2024年6月14日发(作者:)

1、要Hook的API

方法名称:OpenProcess

位置:

OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。

2、大体方法

找到API函数在内存中的地址,改写函数头几个字节为JMP指令跳转到自己的代码,

执行完毕再执行API开头几个字节的内容再跳回原地址。这种方法对CPU有较大的依赖性,

而且在多线程环境下可能出问题,当改写函数代码的时候有可能此函数正在被执行,这样

做可能导致程序出错。

3、操作步骤

4、1 找到MessageBoxA的入口地址

5、2 修改入口地址的虚拟保护为可读可写类型

6、3 在入口处直接返回 也就是在MessageBoxA的入口地址处写入 retn 10(为什

么是retn 10 因为MessageBoxA最后的返回是这个参数)

7、这个其实在OD里面是很容易实现的 也就是Gtrl+G MessageBoxA 然后 retn

10

8、需要的API

9、1 GetProcAddress

10、函数功能描述:

11、GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。

12、函数原型:

13、FARPROC GetProcAddress(

14、HMODULE hModule, // DLL模块句柄

15、LPCSTR lpProcName // 函数名

16、);

17、对于我们这个题目来说 我们要通过它得到MessageBoxA的地址 如果这个函数

正常返回 那么返回值就是MessageBoxA的函数地址

18、另外DLL模块句柄 就是的句柄 函数名当然是MessageBoxA

19、那么我们怎么得到的句柄的句柄呢 请看下个函数

20、2 GetModuleHandle