说明
============
本次模拟json解析功能,进行普通子程序hook,不涉及内存补丁
仅仅进行了替换子程序,高手请移步
写个json解析模拟环境
============
界面如下:
各个按钮说明:
点击"json解析"后,编辑框1.内容,复制到编辑框2中,赋值操作
点击"解析事件",获取"json解析"的按钮事件
点击"Hook"按钮,hook掉"json解析"事件
替换掉指定的子程序
代码如下:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_文本 | 文本型 | | | 局_地址 | 整数型 | | | Hook (取子程序真实地址 (&_按钮1_被单击 ), 取子程序真实地址 (&新的子程序 ))
hook后,再点击"json解析":
反汇编分析
============
hook前的子程序开头:
004010E5 /$ 55 push ebp ; 解析事件子程序
004010E6 |. 8BEC mov ebp,esp
004010E8 |. 81EC 08000000 sub esp,0x8
004010EE |. 6A FF push -0x1
004010F0 |. 6A 08 push 0x8
004010F2 |. 68 05000116 push 0x16010005
004010F7 |. 68 03000152 push 0x52010003
004010FC |. E8 AC090000 call 4.00401AAD
00401101 |. 83C4 10 add esp,0x10
hook后子程序开头:
----------
004010E5 /$ /E9 98070000 jmp 4.00401882 '跳转 ; 解析事件子程序
004010EA |? |0800 or byte ptr ds:[eax],al
004010EC |? |0000 add byte ptr ds:[eax],al
004010EE |. |6A FF push -0x1
004010F0 |. |6A 08 push 0x8
004010F2 |. |68 05000116 push 0x16010005
004010F7 |. |68 03000152 push 0x52010003
jmp 4.00401882 跟过去,是新的子程序的开头,目的达到了
总结
============
1 本次的模拟环境所用的子程序,无参数,无返回值,仅相当于一个过程
2 有参数和返回值的子程序,hook更复杂些
3 hook的是自身进程
4 hook其他进程需要注入
|