首页
社区
课程
招聘
[求助]反编译之后,怎么建立内存补丁
发表于: 2009-3-2 12:23 3580

[求助]反编译之后,怎么建立内存补丁

2009-3-2 12:23
3580
大概的代码例如下面:
100D7EF9    53              push    ebx
100D7EFA    8D85 E4D7FFFF   lea     eax, dword ptr [ebp-281C]
100D7F00    50              push    eax
100D7F01    8D8D E8D7FFFF   lea     ecx, dword ptr [ebp-2818]
100D7F07    51              push    ecx
100D7F08    68 00280000     push    2800
100D7F0D    8D95 F0D7FFFF   lea     edx, dword ptr [ebp-2810]
100D7F13    52              push    edx
100D7F14    8D4F 28         lea     ecx, dword ptr [edi+28]
100D7F17    C745 FC 0100000>mov     dword ptr [ebp-4], 1
100D7F1E    899D E4D7FFFF   mov     dword ptr [ebp-281C], ebx
100D7F24    E8 8770FFFF     call    100CEFB0

可以看到所有的参数都是一个堆里面的内容,自然到了call后面,介入的数据也都是在堆里,也就是说ebp是一个变化的东西,而使用readprocessmemery直接硬读地址而取得这个100CEFB0函数的参数,就不太可能,用hook,又牵涉到函数的参数不明了,猜起来太费心。

那么请问各位,如果我想要给上面的函数做一个内存级别的补丁,应该怎么入手?谢谢……

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
先将程序断下来,用Debug API或用0xeb,0xfe都可以。等确认程序执行到这里了,将线程挂起(用Debug API的话,断点触发会自动挂起),然后GetThreadContext获得其寄存器的值,再根据EBP的值来换算出正确的地址,然后ReadProcessMemory就可以了。

最后恢复原来程序的运行,如果用Debug API,还需要Dettach调试器,用DebugActiveProcessStop这个API。
2009-3-2 13:19
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
再次mark
一下又挖到了宝。嘿嘿。
2009-3-2 16:24
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
还有个问题呀
stop这个api应该什么时候调用呢。。。囧

貌似代码一般的都是

actvieprocess

while waitevent
do





done

如果是EXIT_PROCESS_DEBUG_EVENT事件的话,那岂不是被调试进程已经结束了。。。
2009-3-2 16:36
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
你如果需要保持被调试状态,一直监视程序的运行,当然就不用Dettach了。

但一般的Loader都是打完补丁后就退出了,如果你退出时不Dettach,会将被调试的子进程强行杀死的,所以在Loader干完活之后就Dettach掉,然后退出就可以了。
2009-3-2 20:07
0
雪    币: 232
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
彭先生说得真是太好了,非常感谢,结贴了。
2009-3-3 11:30
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7

自己问的好傻的问题。。
2009-3-3 14:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nsq
8
说得真是太好了,非常感谢,学了一点知识。
2009-3-3 23:23
0
游客
登录 | 注册 方可回帖
返回
//