- PE文件的Magic code(魔数、幻数)是什么?
MZ头、PE头
- PE文件中文件头的信息有哪些?
运行平台、时间戳、PE文件属性、区段数量、扩展头的大小
- PE文件中扩展头的信息有哪些?
OEP的RVA、ImageBase(400000)、代码段起始地址、数据段起始地址
数据目录表、数据目录表项数量、文件对齐、内存对齐、映像总大小
- PE文件中区段信息有哪些?
区段名称、虚拟地址、虚拟大小、文件偏移、文件大小、区段属性(C0000020、60000020)
- PE文件中数据目录表有哪些表?
导出表、导入表、异常表、tls表、资源表、IAT、重定位表
- 一个进程,三环下有哪些数据结构?
进程环境块(PEB)、线程环境块(TEB)、tls结构
手工加壳

目标:将代码段加密,以防止IDA等静态工具分析。
步骤:
-
添加一个区段(文件大小、区段数量)
-
将原OEP修改为新区段中的地址
-
将代码段异或加密
-
在新区段新OEP处,添加异或解密代码
注意:
① 代码段默认没有可写属性,需要修改
60000020h,改为80000020h
② 有随机基址属性的程序会重定位代码,一般我们会去掉这个属性
如果没有去掉,就需要在壳代码中进行重定位
具体:
-
添加区段
image.png
只使用LordPE,添加完区段,程序是无法运行的,因为虚拟大小、文件大小都是空的

使用LordPE编辑区段信息

再使用010Editor添加文件数据

- 修改OEP,增加OEP代码
原OEP:000011D2
新OEP:17000
修改OEP

添加代码

- 加密代码段
代码段信息

在010Editor中操作代码段
③ 选中代码段

④ 异或代码段


- 增加解密代码
由于代码段本身有重定位信息,那么如果加密之后,重定位会出现问题,所以应该去掉随机基址
40 81 -> 00 81
脱壳
脱壳的目的:
-
Cracker(破解者) 脱壳、解密、破解
-
杀毒引擎(脱壳引擎、反病毒虚拟机) 解密、查杀病毒、扫描特征
脱壳的步骤:
-
找到原始OEP
-
Dump内存到文件
-
修复文件(常见于修复IAT)
导入表和IAT

IAT表在文件中保存的是一个RVA数组,每一项指向指向了函数字符串结构

在内存中,这个RVA数组,被修改为函数地址,每一个函数地址就是之前对应的函数字符串的函数

所以从内存中dump出的文件,必须进行IAT修复或者修复导入表。
脱自己加的壳
- 找到原始OEP
单步跟踪,很容易找到原始OEP
- Dump内存到文件
在原始OEP处进行DUMP内存,原因就是这个时候内存没有做太多的初始化
- 修复IAT或者修复导入表
使用ImportREC修复。

网友评论