我们了解了几种常见程序壳的特征,同时也掌握了如何利用“入口点代码”、“程序区段”、以及专用工具来判断程序是否加壳且加壳的方式。
本期内容我们将一起来学习程序破解中最为基础的能力—脱壳。首先我们要明白何为程序脱壳,简单的说,对一个加了壳的程序,去除其中无关的干扰信息和保护限制,把它的壳脱去,解除伪装,还原软件本来的面目,这个过程就叫做脱壳。那么在实战之前,我们一起来了解一些关于程序脱壳过程中涉及到的专业术语。
【盘古石知识小课堂】
★ OEP(Original Entry Point):程序的入口点。程序脱壳最关键的部分,只要我们找到OEP就能够快速的脱壳。可以理解为壳就是一把锁,OEP就是锁孔。
★ IAT(Import Address Table):导入函数地址表。壳可能会对指针进行处理,我们需要修复输入表也就是修复IAT。
经过小编这段时间的反复学习和测试,其实脱壳并没有大家想象的那么复杂,只要我们能顺利找到程序的OEP(需要大量的经验积累),基本就成功了80%。这里我为大家简单的总结一下脱壳步骤。
Step 1. 寻找OEP;
Step 2 .dump镜像文件;
Step 3. 修复IAT(简单的壳基本到这个步骤就已经顺利完成,特殊情况可能需要加上最后步骤)
Step 4. 修复重定位表、修复资源、修复VMOEP等等。(这个步骤后续进阶课程会涉及)
看到步骤这么简单各位是否已经迫不及待想要尝试一下了,那么接下来,我们就一起进入紧张刺激的实战环节吧!!
拿到一个加壳程序,运行程序如图。
首先运用上期学到的内容,利用Exeinfo PE工具查看加壳类型。可以非常容易的判断出来为UPX加壳。
确认加壳方式了,接下来使用OllyDbg加载程序。根据UPX壳特征,简单下拉后可见OEP入口。
F7单步步入(call后面紧接jmp,我们上期说到的VS编译程序特征)
完成step1找到OEP后,就到了我们的step 2,利用LPE工具获取dump镜像。
最后,我们进行step3,利用ImportREC软件对加壳程序进行IAT修复。(注意过程中保证相关加壳程序正在运行)
在OllyDbg中确认基址为400000,前面我们已知OEP为41DDAC,那么这里的OEP值为41DDAC-400000=1DDAC。
将获取到的值填入到响应模块后,点击获取导入表,接着修正转储到指定路径即可。此时我们已顺利完成程序脱壳!
来源:盘古石取证,作者:技术专家 杨卓远
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论