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的头像CSDN
上一篇 2024年6月22日
下一篇 2024年6月22日

相关推荐

发表回复

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