readprocessmemory内存,然后将函数复制到另一个地方修改后替换函数调用达到hook api的目的,怎么才能实现?
一、1.windows系统为每个程序分配4GB的虚拟内存,虚拟内存由“页文件”实现。
2.每个程序的4GB空间的前2GB是程序的私有空间,后2GB是系统的空间。
3.每个页文件4KB。
4.在程序私有的2GB中,windows 98系列的系统的程序的可用地址为4MB--2GB
windows 2000系列的系统的程序的可用地址为64KB--2GB
因此还需要先判别程序运行的操作系统。
二、1.查阅MSDN可知,Read/WriteProcessMemory都需要一定的权限,
因此打开句柄时必须赋予相应权限。
1)搬走开头几个指令
2)修改开头几个指令为跳转指令
3)执行完毕,修改回来
4)跳入函数地址执行函数
这要求函数只有自己在用,不能多线程使用
另一个方法,
1)保存API函数导入点(函数地址)
2)修改API的导入点为自己定义的函数,执行自己的代码
自己的代码里面,可以跳入保存的导入点,执行函数
这种方式比较彻底,不用担心多线程问题。