恶意代码分析实战—第18章加壳与脱壳

脱壳存根

被加壳程序中的脱壳存根由操作系统加载,然后脱壳存根负载加载原始程序。对于加壳程序来说,可执行程序的入口点指向脱壳存根,而不是原始代码。原始程序通常存储在加壳程序的一个或多个附加节中。

脱壳存根执行了以下三步操作:

1. 将原始程序脱壳到内存中;

2. 解析原始可执行文件的所有导入函数;

3. 将可执行程序转移到原始的程序入口点(OEP)。

尾部跳转

一旦脱壳存根完成脱壳,他就必须转到OEP运行。转到OEP的指令通常被叫做尾部跳转指令(jmp、ret、call)。

书中对于脱壳过程图示如下:

 

Lab18-01.exe

首先利用peid进行查壳

可以看出这是一个被UPX加壳的文件。UPX是一个压缩壳,并不是一个加密壳。

在OD中打开Lab18-01.exe分析: 

可以看出这并不是OEP,而是脱壳存根。为了进行脱壳,我们需要找到尾部跳转从而得到OEP。00409DC0处的指令为pushad,在脱壳存根中为了保持栈平衡,也一定会一个popad的命令。

在OD中查找popad命令,在00409F43处看到jmp指令。

在IDA中定位到00409F43分析:

结果UPX压缩后,IDA不能识别处 00409F43处的有效地址,所以猜测该处的jmp就是尾部跳转指令。

OD中在00409F43处下断点并步过分析:

所以该处既是原始程序的OEP,右键OEP后使用OllyDump插件脱壳:

“重建输入表”取消勾选后点击脱壳。 然后使用ImportREC获取导入表

点击修复转存文件

至此已完成脱壳。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值