《自我保护 HIPS主动防御》由会员分享,可在线阅读,更多相关《自我保护 HIPS主动防御(1页珍藏版)》请在金锄头文库上搜索。
1、1、要Hook的API方法名称:OpenProcess位置:Kernel32.dllOpenProcess函数用来打开一个已存在的进程对象,并返回进程的句柄。2、大体方法找到API函数在内存中的地址,改写函数头几个字节为JMP指令跳转到自己的代码,执行完毕再执行API开头几个字节的内容再跳回原地址。这种方法对CPU有较大的依赖性,而且在多线程环境下可能出问题,当改写函数代码的时候有可能此函数正在被执行,这样做可能导致程序出错。3、操作步骤1找到MessageBoxA的入口地址2修改入口地址的虚拟保护为可读可写类型3在入口处直接返回也就是在MessageBoxA的入口地址处写入retn10(为什
2、么是retn10因为MessageBoxA最后的返回是这个参数)这个其实在OD里面是很容易实现的也就是Gtrl+GMessageBoxA然后retn104、需要的APIGetProcAddress函数功能描述:GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。函数原型:FARPROCGetProcAddress(HMODULEhModule,/DLL模块句柄LPCSTRlpProcName/函数名);对于我们这个题目来说我们要通过它得到MessageBoxA的地址如果这个函数正常返回那么返回值就是MessageBoxA的函数地址另外DLL模块句柄就是User32
3、.dll的句柄函数名当然是MessageBoxA那么我们怎么得到User32.dll的句柄的句柄呢请看下个函数GetModuleHandleDeclareFunctionGetModuleHandleLibkernel32AliasGetModuleHandleA(ByVallpModuleNameAsString)AsLong说明获取一个应用程序或动态链接库的模块句柄返回值Long,如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError参数表参数类型及说明lpModuleNameString,指定模块名,这通常是与模块的文件名相同的一个名字用这个函数就可以得到User32.dll的句柄到这里我们就完成了第一步找到MessageBoxA的入口地址下面我们来修改这个地址处的内存读写保护默认是不可以写的必须修改才能写入数据就要用到下个函数VirtualProtectVirtualProtect方法当做对应之Win32函式的逻辑包装函式。VirtualProtect的Win32实作会在呼叫处理序的虚拟位址空间里,变更认可页面区域上的保护。好了就这3个API就可以做到了写内存这个API在易语言里面有这个指令我就不说了