请教一个新手问题,如何打动态地址补丁
就上图这种,我把补丁数据放到这行代码下。但是这个DLL加载后的基址是动态的。这也就造成补丁失效。
我就想把EAX的值改成我的补丁地址。因为PATCH的数据比较多。比原来的字符串长。不能用MOV之类的命令一个字节一个字节的写。所以想把补丁数据放一个地址,然后赋值给EAX。本来想用GetModuleHandle来读取基址,但因为又要传递DLL名字。同样是需要解决动态地址的。
表达不是特别清楚。语言功底比较差。希望有会的朋友可以帮助一下。 基址+偏移就可以打动态补丁了善用论坛搜索功能 不知道你是进程进程编程打补丁还是直接修改汇编代码?可用CreateToolhelp32Snapshot枚举进程模块……修改汇编代码就好整了 本帖最后由 pzx521521 于 2020-7-8 16:54 编辑
2L 正解 基址+偏移
但是有的地方可能是别的地方改的
就是 A(基址+偏移)->通过B->修改C
这个时候C的地址就要通过A去偏移出来
最简单的demo是ce的tutorial
同时程序写的时候注意 FileOffset
使用od/CheatEngine编写补丁(https://github.com/pzx521521/PatchExe)
dll注入Demo(https://github.com/pzx521521/DllHookInject)
exe的PE头原理(https://github.com/pzx521521/PE32-RVA-FileOffset) 这个问题要分两个点讨论
1.是否在任何时候对其进行patch都可以
2.是否需要在刚加载此DLL就进行patch,加载完成以后patch就没有意义了
如果是第一种情况,直接写个外部程序枚举一下模块即可,或者写个dll 注入进去也用getmodule也可以
第二种情况就比较麻烦一点,我能想到的思路如下,
1.Inlink hook Loadlibrary
2.借助于DLL重定位修正
3.shellcode获取EIP,再用shellcode自行修正偏移
然后你看一下你会哪种方法 bester 发表于 2020-7-8 16:56
这个问题要分两个点讨论
1.是否在任何时候对其进行patch都可以
2.是否需要在刚加载此DLL就进行patch,加 ...
我给简单的翻译下:
意思就是说下手得早吃不上。
下手得晚又过了。
补丁需要时机和技巧
编程解决是王道。
页:
[1]