
查壳无壳,放进IDA
看看401240,是一个假的判断的函数。

再看sub_401220();

创建了函数指针,WriteFile_0 = (BOOL (__stdcall *)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED))GetProcAddress(LibraryA, ProcName); 获取目标函数(真正的writefile)的地址,并将其存储在 WriteFile_0 中。这个函数指针 WriteFile_0才会是这个程序里用来写文件的函数。然后用40c9b4进行备份,然后把40c9bc写成跳转,后续跳转的地址是401080
再去看4010D0

完成hook的初始化。
所以逻辑已经清楚了。先获取writefile这个函数的位置,把这个函数备份下来。然后40C9BC处是个跳转,跳转到401080.之后把BC跳转写到writefile的位置,这样执行到writefile就进入了401080函数

401000进行真正的判断

401140把40C9B4重新写回来,而这正式我们备份的真正的writefile。然后写入文件

按照真正的判断函数,我们重写就可以了,注意要把循环倒过来写

本文详细描述了一种在IDA环境下使用hook技术,通过获取`writefile`函数地址并备份,实现对程序文件写入操作的劫持,最终恢复原功能的过程。
3204

被折叠的 条评论
为什么被折叠?



