逆向-第六次实验-加壳分析

提前说一下:ql太菜啦

 还有请不要照抄,保持开源精神

使用UPX和ZProtect对exe文件加壳,然后使用PE文件解析器读取

https://down.52pojie.cn/Tools/Packers/

(ZProtect解压两次)

使用UPX加壳

win+r进cmd 然后cd到文件夹路径对exe加壳,可以把文件拖到这个文件夹里,这样不用填绝对路径

cd进UPX的文件夹再运行upx!!!!!!!!!!

 

 

 使用ZProtect加壳

如图即可

 

PE分析

最后会有三个程序

 

PE分析

 

可以使用文本分析工具

在线文本比对工具 | 菜鸟工具 (runoob.com)

[DOS_HEADER]

zp加密壳中的e_lfane变化

在正常的PE文件中,e_lfanew的值通常为0x80或其附近。加壳工具在处理PE文件时,会对e_lfanew的值进行不同程度的修改。

压缩壳的目的是减小PE文件体积,对PE结构的修改较小。为保证文件继续正常工作,压缩壳不会随意修改e_lfanew的值。

加密壳在重组PE结构时,会修复所有指向新结构字段的指针,这时e_lfanew的值就有较大变化。加密壳可能会把e_lfanew的值修改为一个看似随机的地址,目的是防止恢复原结构

[FILE_HEADER]:

 NumberofSections不一致

在PE文件中,NumberOfSections表示文件中节表中的节数。加壳工具会解压和重组原始文件,在处理过程中可能会减小节数,这会导致NumberOfSections减小

[option_HEADER]

 

 

 

 1.压缩壳sizeofcode变化,加密壳不变:压缩壳的主要目的是压缩PE文件,减小体积。为达此目的,压缩壳会直接对.text节中的原始代码进行压缩,然后用压缩后的代码替换原代码。加密壳的目的是加密和隐藏PE文件结构与代码,防止逆向分析。为此,加密壳不会直接修改.text节中的原始代码,而是对整个PE结构进行重组,使用自定义格式加密后再重新构建。

PE头:

 UPX壳在处理文件时,会新增名为UPX0和UPX1的节,用于存储压缩后的代码和数据。这也是判断UPX壳的典型特征之一。

加密壳在重组PE结构时,会使用各种自定义的节名称来填充节表,名称内容基本无规律。有的加密壳还会使用类似但不完全相同的名称来伪装标准节,如.textbss即为.text和.bss的组合,目的是为了隐藏修改和掩人耳目。
 
地址出现变化:

 

 

差异分析

1. UPX

UPX的加壳逻辑主要分三步:

1) 解压可执行文件并提取硬件无关的二进制代码

2) 使用LZMA算法压缩提取的二进制代码

3) 修复可执行文件结构,将压缩后的代码重新加入文件

UPX加壳后的文件在PE解析时的主要特征是:

1) 文件体积显著减小, typicall在30-70%之间

2) PE头各字段基本未变,如Magic、TimeDateStamp等

3) 节表未变,各节Characteristics也未变,但节内容被压缩代码替换

4) 除新增UPX0、UPX1节外,其它节基本未变

5) 文件Hash值发生变化,但与原文件存在一定对应关系

2. ZProtect

ZProtect的加壳过程更为复杂:

1) 提取可执行文件中的代码、数据、资源等并解压缩

2) 对代码进行ita混淆和控制流扰乱加固,插入虚假基本块

3) 使用自定义压缩算法(非LZMA)压缩各节内容

4) 重建PE结构,生成新的节布局并填充各结构字段

5) 修补IAT、 Relocation等使文件保持可执行

ZProtect加壳后的文件PE解析特征是:

1) 文件体积不会减小明显,基本保持在10%左右

2) PE头各字段被修改,如Magic修改为“ZPCK”

3) 节表也被修改,节数和各节Characteristics均被修改

4) 除新增ZPR0、ZPR2节,绝大多数节被修改或消失

5) 文件Hash值完全不同,与原文件无对应关系

6) 文件结构复杂,各字段相互不匹配,难以完全解析

posted @ 2023-05-22 10:05  逆世混沌  阅读(382)  评论(0)    收藏  举报