示例程序演示

样例程序选择win7自带的notepad.exe,该程序原本是没有加壳的:

手动脱UPX压缩壳-LMLPHP

拷贝notepad.exe文件一个副本,重命名为notepad - upx.exe,我们对notepad - upx.exe进行加upx壳:

手动脱UPX压缩壳-LMLPHP

压缩之后查壳:

手动脱UPX压缩壳-LMLPHP

脱upx壳

od调试小技巧:

F8 步过/向下的循环直接跳过

F7 步入

F4 遇到向上的循环,光标选中循环体的下一句汇编指令(非调用指令,即call指令),然后按f4,可直接跳到此处;若下一句汇编指令是call指令,则选call后边的非call指令,然后按f4,可直接跳到此处。

注意:如果碰到nop的指令,F4定到下一条语句,否则程序会跑飞

手动脱UPX压缩壳-LMLPHP

F8 跳转到地址 0x004e53c2 :

手动脱UPX压缩壳-LMLPHP

F7 步入到 0x004ec969 :

手动脱UPX压缩壳-LMLPHP

我们将程序notepad - upx.exe调试到地址 0x004e53c2 。打开LordPE,选中该应用进程,右键->修正镜像大小,右键->完整转存:

手动脱UPX压缩壳-LMLPHP

手动脱UPX压缩壳-LMLPHP

手动脱UPX压缩壳-LMLPHP

手动脱UPX压缩壳-LMLPHP

此时转储下来的dumped.exe程序无法运行,因为导入表还没有进行修复:

手动脱UPX压缩壳-LMLPHP

接下来我们进行导入表的修复。

使用ImpREC进行对导入表的修复:

手动脱UPX压缩壳-LMLPHP

OEP框输入 000e53c2(此处纠正为 000ec969。更新于2018.11.29) 点击“自动搜索IAT”,此时RVA字段会自动调整为 00131ffc 。再点击“获取导入表”,最后点击“修复转储”。

修正后的可执行文件dumped_.exe :

手动脱UPX压缩壳-LMLPHP

dumped_.exe就是可以正常运行的程序了,我们最后再来查壳看看该程序,此时没有壳:

手动脱UPX压缩壳-LMLPHP

我们再贴一张加壳的程序信息:

手动脱UPX压缩壳-LMLPHP

Preference

脱壳笔记-手工脱UPX压缩壳注:主要参考和实现的就是这个链接。本帖子的目的就是自己走一遍手动脱upx壳过程,争取好的理解。

以下还有两篇比较详细的关于壳的帖子:

脱壳入门初级教学

【干货分享】恶意样本分析手册——常用方法篇

05-11 15:39