34.构建核心注入代码,添加核心

34.构建核心注入代码上一个内容:33.获取入口点
以 33.获取入口点 它的代码为基础进行修改
实现的功能是把LoadLibrary函数注入到目标进程实现加载我们的模块。LoadLibrary只有有程序使用过了它的代码就

上一内容: 33. 获取入口点

33、根据入口点获取代码修改代码。

实现的功能是向目标进程注入LoadLibrary函数来加载模块。 LoadLibrary仅在程序使用其代码时才加载到内存中(因为动态链接库是从内存加载的)。即程序a必须使用LoadLibrary,但此时程序b已经不存在了。对于程序b,您还可以通过简单地映射LoadLibrary而不是再次将其放入内存来修复另一个程序中的LoadLibrary函数的地址。获取LoadLibrary函数的地址,将该地址移动到目标进程,并在那里写入动态链接库的磁盘位置字符串。

创建一个新的模块项目。

新建项目步骤:

首先,右键单击解决方案,然后选择下图中红色框中的选项。

然后选择MFC动态链接库。

只需输入您的项目名称并单击“创建”。

然后根据下图进行选择并单击“确定”按钮。

创建项目后,在其初始化代码中添加以下代码:

CWinApp:InitInstance();

AfxMessageBox(L\’注入成功!\’);

然后返回到您之前插入的项目。 ·新班级

这个新添加的类封装了相关的功能,例如插入游戏、开始游戏等。

INJCET.h 文件代码

#PragmaOnce

注射类

{

公共:

BOOL 启动进程(

常量wchar_t *GameExe,

const wchar_t * 游戏通行证,

wchar_t *游戏命令,

PROCESS_INFORMATION* 有限合伙人信息

);

void* ImageLoad(const wchar_t* 文件名);

无效卸载图像(无效* _data);

DWORD GetEntryPoint(const wchar_t* 文件名);

公共:

BOOL CreateRemoteData(HANDLE hProcess);

};

INJCET.cpp文件的代码:

#include \’pch.h\’

#include \’INJCET.h\’

#include fstream

void _stdcall INJECTCode() {

LoadLibrary(L\’F:\\\\代码位置\\\\c\\\\GAMEHACKER2\\\\x64\\\\Debug\\\\Dlls.dll\’);

}

BOOL INJCET:StartProcess(const wchar_t* GameExe, const wchar_t* GamePath, wchar_t* GameCmds, PROCESS_INFORMATION* LPinfo)

{

//用于指定窗口的工作站、桌面、标准句柄以及创建时进程主窗口的外观。

STARTUPINFOsi{};

si.cb=sizeof(si);

创建进程(GameExe,

游戏命令,

空,空,

错误,

//新进程的主线程创建时处于挂起状态,直到调用ResumeThread 函数后才会运行。

创建_暂停,

无效的,

游戏通行证,

C,

LP信息

);

返回真。

}

void* INJCET:ImageLoad(const wchar_t* 文件名) {

std:ifstream streamReader(文件名, std:ios: 二进制);

StreamReader.seekg(0, std:ios:end);

无符号文件大小=streamReader.tellg();

char* _data=new char[文件大小];

StreamReader.seekg(0, std:ios:beg);

StreamReader.read(_data, 文件大小);

StreamReader.close();

_返回数据;

}

无效INJCET:UnloadImage(void* _data) {

删除[]_数据;

}

DWORD INJCET:GetEntryPoint(const wchar_t* 文件名)

{

//方法二(32位环境下运行,根据游戏版本选择运行32位程序或64位程序)

void* Image=ImageLoad(文件名);

IMAGE_DOS_HEADER* dosHeader=(IMAGE_DOS_HEADER*)image;

无符号PEAddress=dosHeader-e_lfanew + (无符号)image;

IMAGE_NT_HEADERS* ntHeader=(IMAGE_NT_HEADERS*)PEAddress;

DWORD dEntryPoint=ntHeader-OptionalHeader.AddressOfEntryPoint;

CString wTxt;

wTxt.Format(L\’%X\’, dEntryPoint);

AfxMessageBox(wTxt);

卸载图像(image);

返回dEntryPoint。

}

BOOL INJCET:CreateRemoteData(HANDLE hProcess)

{

LPVOID adrRemote=VirtualAllocEx(hProcess, 0,0×3000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

SIZE_T 重量;

WriteProcessMemory(hProcess, adrRemote, INJECTCode,0x200, lwt);

返回真。

}

去哪里打电话

变量声明的地方

此时,当前程序无法成功插入。成功的代码稍后再写。

以上关于#34 的信息仅用于构建核心注入代码。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91384.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月22日 上午2:17
下一篇 2024年6月22日 上午2:48

相关推荐

  • 培养编程思维有什么好处

    程序性思维通常被认为相当于计算机科学中的批判性思维。它包括将问题分解为可管理的部分、识别模式、理解问题的抽象含义,设计有效的解决方案,提高解决问题的能力。一个显著的好处是加强逻辑推…

    网站运维 2024年5月12日
    0
  • 如何关闭默认共享文件夹?

    Win7系统中默认共享文件夹在哪里如何关闭?Win7系统中默认开启了一些共享文件夹,如果我们同在一个局域网,是可以共同它来传输文件的。但是,病毒也是可以通过共享

    2024年9月24日
    0
  • 如何使用FTP软件?

      说到FTP,相信很多小伙伴都不太了解这个词汇,它其实是一种客户端/服务器的协议,主要是用来将文件传输到主机或者是与主机交换文件。简单来说就是本地电脑和VPS

    2024年9月18日
    0
  • 带你玩转私有网盘QNAP TS212P3网络存储开箱

    之前一直用来存文件和视频的百度网盘会员就快到期了,本来想继续续费一年了。后来想了下,每年续费的成本也挺高的,而且使用下来的体验也并不咋样,还不如自己整个NAS来

    2024年9月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注