前提是已经用汇编语言对远程基址进行了成功的捕获。
在VC中,读取远程基址比较常用的方法有几种:可以采用hook钩子函数,也可采用windows API 远程进程函数对内存进行读取,然后获得远程进程在本机中的数据,并进行相关代码的注入,获取更高的执行效率。
比较常见的API函数:
FindWindow();//查找当前游戏运行窗口,
GetWindowThreadProcessID();//得到游戏句柄
OpenProcess();//获得游戏进程的访问权限
ReadProcessMemory();//读写内存空间,这里包含了游戏改变数值的基址,注入函数的函数名
CreateRemoteThread();//创建远程线程,注入代码
动态链接库的创建和调用
1创建动态链接库; 2 添加函数代码;3 在def文件中做一个套出的处理;4 运行发布版本,win32 release;5 创建MFC程序,将动态链接库和函数库文件套入MFC程序文件夹中,并且设置文件寻找路径link下写上文件名;6调用 先声明 -declspec(dllimport) int 函数名 (参数),或者#pragma comment(lib,“mydll.lib”)
2 注入游戏中:以键盘为例:
1 键盘回调函数 KeyboarProc;SetWindowsHook(创建键盘钩子函数,使用这个函数的时候,通过监视键盘动作,自动的调用回调函数。将游戏代码注入到游戏中去,完成所需操作。
//安装线程钩子
HHOOK SetWindowsHookEx(
int idHook,//回调函数的类型
HOOKPROC lpfn, //钩子回调函数 ,键盘回调函数
HINSTANCE hMod,
DWORD dwThreadId //游戏线程的ID
);
相应的回调函数也是不同的,如:callWndProc CBTProc ,KeyboardProc MouseProc 有按钮按下回调函数,键盘回调函数,鼠标回调函数。
由以上可以看出,要将代码注入,需要安装钩子函数产生相应的钩子函数,通过钩子函数产生回调函数,回调函数里写上注入代码。同时回调函数,可以考虑写入动态连接库中
LRESULT CallNextHookEx(
HHOOK hhk,
int nCode,
WPARAM wParam,
LPARAM lParam
);
LRESULT CALLBACK KeyboardProc(
int code,
WPARAM wParam,
LPARAM lParam
);
安装游戏函数:
创建游戏程序:加入以上动态链接库,当在游戏界面上按下键盘时,打开任务管理器,进程里可以发现游戏里注入了我们自己写的动态链接库。