- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
楼主 |
发表于 2007-10-16 11:31:05
|
显示全部楼层
Oh Yes! 搞定了 :loveliness: 大家先慢慢分析 三天后我公布我的方法 爽死我了 搞了两个多小时 终于有结果了
思路公开:找到NAG的CALL是很简单的 但是为什么保存后软件就无法运行呢? 而调试到该CALL的时候就可以跳过NAG呢?
这就是值得考虑的地方,后来发现:
0047AE1A E8 F1FCFFFF CALL PB_exe.0047AB10 ; 这里将对文件进行效检
0047AE1F 58 POP EAX
0047AE20 E8 3B070000 CALL PB_exe.0047B560 ; NAG在这个Call出现
只有将CALL 0047AB10运行完毕后, 这个出现NAG的CALL 0047B560中才会有数据,所以我们要等第一个CALL运行完毕的时候用SMC打补丁来去掉NAG,剩下的就好办了,就是在壳区找一处空白地址,刚开始没把空白地址找对,走了不少弯路,还怀疑过这种思路是否可行,找对空白地址后一切就都OK了.
下方的方法仅适合与MoleBox加壳时不选择 CRC效检一项的壳,如果选择这里的话 还有过CRC效检,这我研究了一下午也没过去,汗~~ 大约修改了N处眼看就要OK了,最后又出现一个CALL,实在是搞不下去了,就放弃了,我的思路就是把第二个CALL出错的数据全部JMP出来SMC,但修改的地址数太多了,即便的OK一个,该方法也无法推广,最好的方法就是找到效检的地方然后就好办了.
带CRC效检的那个加壳文件见这里:
https://www.chinapyg.com/viewthread.php?tid=20499
定位Nag 并确定SMC数据地址:0047B833 6A 00 PUSH 0
0047AE19 50 PUSH EAX
0047AE1A E8 F1FCFFFF CALL PB_exe.0047AB10
0047AE1F 58 POP EAX ; 修改为JMP 47AF69
0047AE20 E8 3B070000 CALL PB_exe.0047B560
0047AE25 870424 XCHG DWORD PTR SS:[ESP],EAX
0047AE28 58 POP EAX
0047AE29 894424 24 MOV DWORD PTR SS:[ESP+24],EAX
0047AE2D 61 POPAD
0047AE2E 58 POP EAX
0047AE2F 58 POP EAX
0047AE30 FFD0 CALL EAX
0047AE32 E8 5DAF0000 CALL PB_exe.00485D94
0047AF69 58 POP EAX ; 这里还原覆盖的数据
0047AF6A 66:C705 33B8470>MOV WORD PTR DS:[47B833],5EB ; SMC数据
0047AF73 E8 E8050000 CALL PB_exe.0047B560
0047AF78 ^ E9 A8FEFFFF JMP PB_exe.0047AE25 ; 返回到原CALL的下一行代码 因为返回CALL时要返回到这里
Why? CALL 0047AB10这个CALL的作用(这里不是自效检 判断失误)就是生成这个CALL 0047B560地址中的数据 所以我们即便是修改了也是徒劳 |
|