首页 > 其他分享 >恶意代码分析实战 加壳与脱壳 lab 18-1 18-2 18-3 18-4 18-5

恶意代码分析实战 加壳与脱壳 lab 18-1 18-2 18-3 18-4 18-5

时间:2022-10-06 18:55:35浏览次数:78  
标签:脱壳 18 OEP lab 加壳 存根 指令 恶意代码

脱壳存根

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

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

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

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

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

尾部跳转

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

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

 

Lab18-01.exe

首先利用peid进行查壳

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

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

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

PUSHAD 指令

本指令将EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 这8个32位通用寄存器依次压入堆栈,其中SP的值是在此条件指令未执行之前的值.压入堆栈之后,ESP-32–>ESP.

POPAD 指令

本指令依次弹出堆栈中的32位字到 EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX中,弹出堆栈之后,ESP+32–>ESP.

 

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

在IDA中定位到00409F43分析:

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

另外在od中看到:

 

 

该地址后面一堆这样0000没有意义的代码!并且40154F和409F43的地址差异太大,也是疑点!

 

OD中在00409F43处下断点并step 下一条指令,看到下面这种奇怪的东西:

 

 

 

 

然后可以看到二进制数据了:

 

然后dump:

 

 

 右键OEP后使用OllyDump插件脱壳:

“重建输入表”取消勾选后点击脱壳。

 

保持OD不退出, 然后使用ImportREC获取导入表

 

 

 

 

 

 

点击fixdump,修复转存文件

 

 

至此已完成脱壳,脱壳后的文件就是unpack_那个!

 

 

标签:脱壳,18,OEP,lab,加壳,存根,指令,恶意代码
From: https://www.cnblogs.com/bonelee/p/16758192.html

相关文章