对用Petite2.2加壳的程序进行手动脱壳的一点分析
2007-01-12 20:12:32 来源:WEB开发网核心提示: bd *bpx 405B9210、按F5键,中断在此:015F:00405B92 59 POP ECX <--你停在此处015F:00405B93 5E POP ESI015F:00405B94 FD STD015F:00405B95 33C0 XOR EAX,EAX015F:004
bd *
bpx 405B92
10、按F5键,中断在此:
015F:00405B92 59 POP ECX <--你停在此处
015F:00405B93 5E POP ESI
015F:00405B94 FD STD
015F:00405B95 33C0 XOR EAX,EAX
015F:00405B97 B956030000 MOV ECX,00000356
015F:00405B9C E898740000 CALL 0040D039 <--小心了,按F8键进入
11、按F8键进入Call 0040D039,就到了程序的入口处了。如下:
015F:0040D039 5F POP EDI
015F:0040D03A F3AA REPZ STOSB
015F:0040D03C 61 POPAD
015F:0040D03D 669D POPF
015F:0040D03F 83C408 ADD ESP,08
015F:0040D042 E98540FFFF JMP 004010CC <--这就是真正程序的Entry Point了
12、在JMP 004010CC处,保存内存的映象的时候到了。下指令
Pagein d 400000 e000 c: empdump.exe
13、开始修补dump.exe。用ProcDump把每个Section的Offset改成RVA大小。把PSize改成VSize大小。
把Entry Point改成000010CC (即004010CC-00400000=10CC)。把Directory中的Import Table的RVA改成D228,Size改成1B4即可。
后记:(现在我怎么这么多废话)
从步骤8-13可以发现。Petite2.2加壳的程序一般从Loadlibrarya中断回来就快到真正程序的Entry Point了。一般在循环退出后的一个Call调用内就可以看到Entry Point了。(该循环应该是加载动态链接库的各个函数吧) 而真正的import table一般在LoadLibrarya中断后用搜索的方法可以找到。
俺现在还没能写出ProcDump的Script :-( 。只好Post此文滥芋充数了。不过还好,写此文只花俺1个多小时。写文章看来同样也是熟能生巧的哦。:-)
好了,写Script的历史暂时告一段落。对于写ProcDump中的Bhrama Client不是一日之功,以后有时间再学习学习。
或者哪位高手写个教学,我再学习后再说,那样可以省不少摸索的功夫了。呵呵....
更多精彩
赞助商链接