【实战】UPX简单壳脱壳实战

  • A+
所属分类:逆向工程

我们了解了几种常见程序壳的特征,同时也掌握了如何利用“入口点代码”、“程序区段”、以及专用工具来判断程序是否加壳且加壳的方式。

本期内容我们将一起来学习程序破解中最为基础的能力—脱壳。首先我们要明白何为程序脱壳,简单的说,对一个加了壳的程序,去除其中无关的干扰信息和保护限制,把它的壳脱去,解除伪装,还原软件本来的面目,这个过程就叫做脱壳。那么在实战之前,我们一起来了解一些关于程序脱壳过程中涉及到的专业术语。

【实战】UPX简单壳脱壳实战

【盘古石知识小课堂】

★ 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等等。(这个步骤后续进阶课程会涉及)

看到步骤这么简单各位是否已经迫不及待想要尝试一下了,那么接下来,我们就一起进入紧张刺激的实战环节吧!!


【实战】UPX简单壳脱壳实战


拿到一个加壳程序,运行程序如图。


【实战】UPX简单壳脱壳实战


首先运用上期学到的内容,利用Exeinfo PE工具查看加壳类型。可以非常容易的判断出来为UPX加壳。


【实战】UPX简单壳脱壳实战


确认加壳方式了,接下来使用OllyDbg加载程序。根据UPX壳特征,简单下拉后可见OEP入口。


【实战】UPX简单壳脱壳实战


F7单步步入(call后面紧接jmp,我们上期说到的VS编译程序特征)


【实战】UPX简单壳脱壳实战


完成step1找到OEP后,就到了我们的step 2,利用LPE工具获取dump镜像。


【实战】UPX简单壳脱壳实战


最后,我们进行step3,利用ImportREC软件对加壳程序进行IAT修复。(注意过程中保证相关加壳程序正在运行)


【实战】UPX简单壳脱壳实战


在OllyDbg中确认基址为400000,前面我们已知OEP为41DDAC,那么这里的OEP值为41DDAC-400000=1DDAC。


【实战】UPX简单壳脱壳实战


将获取到的值填入到响应模块后,点击获取导入表,接着修正转储到指定路径即可。此时我们已顺利完成程序脱壳!


【实战】UPX简单壳脱壳实战


来源:盘古石取证,作者:技术专家 杨卓远



【实战】UPX简单壳脱壳实战

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: