栏目导航: 首页 > 检测提权 > 加密破解 > 内容

利用OllyDbg破壳的过程详解(附软件下载)

www.hx99.net    时间: 2011-01-27    阅读: 次     整理: 华西安全网

预备知识 
    大多数壳都有一个共同的特点。在壳准备开始解压时都要执行PUSHAD,当壳解压 
完时都要调用POPAD。到底PUSHAD和POPAD是什么干什么用的呢?其实PUSHAD是用来将 
所有普通寄存器顺序进栈的指令,POPAD是所有普通寄存器顺序出栈指令。POPAD的出 
栈顺序和PUSHAD相反。壳为了保护寄存器,便在解压前将所有寄存器进栈保护起来, 
当解压完成后又将寄存器出栈,恢复其原貌,并将IP设置为原程序的OEP。这样我们就 
可以通过这个特点快速脱掉多种软件的壳。 

ASPACK篇 
    先用ASPACK将NOTEPAD.EXE加壳。用OllyDbg(以下简称OD)载入。看见光标停在 
壳的入口处。 
0040D001 >  60              PUSHAD ;壳的入口。准备开始解压,保护寄存器 
0040D002    E8 03000000    CALL    NOTEPAD.0040D00A 
…… 
我们不管它,直接向下翻页找POPAD指令。在40D3AF处找到POPAD 
…… 
0040D3AF    61              POPAD ;解压完成,恢复寄存器 
0040D3B0    75 08          JNZ    SHORT NOTEPAD.0040D3BA 
0040D3B2    B8 01000000    MOV    EAX, 1 
0040D3B7    C2 0C00        RETN    0C 
0040D3BA    68 CC104000    PUSH    NOTEPAD.004010CC ;返回到原程序OEP处 
0040D3BF    C3              RETN 
…… 
选定40D3AF这一行,F4运行到此处。在这里说明壳已经完成解压工作。并且返回到原 
程序的入口处。F8单步到4010CC,这里便是原程序的OEP。用DUMP插件直接DUMP出来就 
可以了(在DUMP时注意将入口点改为10CC,即4010CC-400000=10CC,400000是映象基 
地址)。文件大小是77059字节,用PEditor重建PE头便可以了。未压缩的文件大小是 
53248字节,脱壳后的文件大小是60930字节。 

UPX篇 
    用UPX将NOTEPAD.EXE加壳,然后用OllyDbg载入。停在PUSHAD处,用脱ASPACK同样的方 
法,向下翻页找POPAD。 
…… 
0040E9FE    61              POPAD 
0040E9FF  - E9 C826FFFF    JMP    NOTEPAD.004010CC 
…… 
下面的JMP就是跳转到程序的OEP处。F4到40E9FF处,F8单步一下,来到OEP处,DUMP出 
来。DUMP文件的大小是65536字节,直接就可以运行。为了完美,用PEditor重建PE头。 
那么脱壳后的文件大小是60293字节。 

后记 
    用上面说的方法,很多种壳都可以快速的手动脱掉。如果你没有OllyDbg的DUMP插件, 
可以到新论坛的下载区找。如果实在没有,也可以直接停在OEP处用PEDump来DUMP。很 
久没有写东西了。这一篇是写给初学者练手的。其实壳也是软件,再怎么复杂都有可 
能被脱下来。祝你好运。 

本文来源:华西安全网[http://www.hx99.net]
发表评论】【告诉QQ好友】【错误报告】【加入收藏】【关闭