手工加壳脱壳

  1. PE文件的Magic code(魔数、幻数)是什么?

MZ头、PE头

  1. PE文件中文件头的信息有哪些?

运行平台、时间戳、PE文件属性、区段数量、扩展头的大小

  1. PE文件中扩展头的信息有哪些?

OEP的RVA、ImageBase(400000)、代码段起始地址、数据段起始地址

数据目录表、数据目录表项数量、文件对齐、内存对齐、映像总大小

  1. PE文件中区段信息有哪些?

区段名称、虚拟地址、虚拟大小、文件偏移、文件大小、区段属性(C0000020、60000020)

  1. PE文件中数据目录表有哪些表?

导出表、导入表、异常表、tls表、资源表、IAT重定位表

  1. 一个进程,三环下有哪些数据结构?

进程环境块(PEB)、线程环境块(TEB)、tls结构

手工加壳

image.png

目标:将代码段加密,以防止IDA等静态工具分析。

步骤:

  1. 添加一个区段(文件大小、区段数量)

  2. 将原OEP修改为新区段中的地址

  3. 将代码段异或加密

  4. 在新区段新OEP处,添加异或解密代码

注意:

① 代码段默认没有可写属性,需要修改

60000020h,改为80000020h

② 有随机基址属性的程序会重定位代码,一般我们会去掉这个属性

如果没有去掉,就需要在壳代码中进行重定位

具体:

  1. 添加区段


    image.png

只使用LordPE,添加完区段,程序是无法运行的,因为虚拟大小、文件大小都是空的

image.png

使用LordPE编辑区段信息

image.png

再使用010Editor添加文件数据

image.png
  1. 修改OEP,增加OEP代码
    原OEP:000011D2
    新OEP:17000
    修改OEP
image.png

添加代码

image.png
  1. 加密代码段

代码段信息

image.png

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

image.png

④ 异或代码段

image.png
image.png
  1. 增加解密代码

由于代码段本身有重定位信息,那么如果加密之后,重定位会出现问题,所以应该去掉随机基址

40 81 -> 00 81

脱壳

脱壳的目的:

  1. Cracker(破解者) 脱壳、解密、破解

  2. 杀毒引擎(脱壳引擎、反病毒虚拟机) 解密、查杀病毒、扫描特征

脱壳的步骤:

  1. 找到原始OEP

  2. Dump内存到文件

  3. 修复文件(常见于修复IAT)

导入表和IAT

image.png

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

image.png

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

image.png

所以从内存中dump出的文件,必须进行IAT修复或者修复导入表。

脱自己加的壳

  1. 找到原始OEP

单步跟踪,很容易找到原始OEP

  1. Dump内存到文件

在原始OEP处进行DUMP内存,原因就是这个时候内存没有做太多的初始化

  1. 修复IAT或者修复导入表

使用ImportREC修复。

image.png

你可能感兴趣的:(手工加壳脱壳)