01 壳原理

壳的分类:

1. 压缩壳:减小PE体积

2. 加密壳:对抗逆向分析

 

压缩壳加上对抗手段,如反调试、代码膨胀、代码混淆、IAT混淆等,就成了加密壳。

 

壳需要有一段代码,把原PE代码解压出来,但是解压过程中有可能覆盖了解压代码,解决方法:

使用无文件映射的节,类似于汇编中的.data?段。壳把解压后的数据放到.data?段中,这样磁盘上不占用对应的空间。

那么.data?段大小应该多大才够用呢?原PE程序的SizeOfImage-SizeOfHeaders就够用了。

 

一般来说如果PE被压缩了,都会有一个比较大的无文件映射的节,往往比其他节都要大。

 

如果文件中相同的数据越多,压缩后能达到的压缩率就越高。

 

脱壳步骤:

1. 查壳:PEIDexeinfo,查完后可以搜索相关信息

2. 调试运行,停在OEP处。

2.1 OEP识别:

靠经验,可以安装多个开发环境,编译出程序观察入口特征。也可以通过程序外观猜测 是那种IDE编译的。

2.2 OEP定位:

ESP定律

API断点:搜索入口点会调用的函数,例如VC6GetVersion

另外长跳也很可疑,例如从一个节跳到另一个节,基本是jmp OEP的操作

如果都找不到,就单步跟踪,跳过循环,一般只向下跳转,因为向上是循环。如果有对抗,跑飞的地方一般都有反调试,该nopnop

 

1. Dump

2. 修复导入表等,有些dump工具dump出的程序,需要关闭随机基址才能运行

posted @ 2020-12-07 13:20  八转达人  阅读(212)  评论(0)    收藏  举报