【实验目的和要求】
在理解PE文件以及壳的工作原理基础上,对目的PE文件进行处理,增加节,并写入符合加密壳功能的代码,修改PE文件入口地址、修改节属性,达到加密壳的功能。
【实验工具】
OllyDBG、PEditor、WinHex等。
【实验原理和步骤】
模拟壳的工作
初始PE文件的 RVA 与 FOA 相同,使得模拟的时候可以省去各种地址转换的问题。本实验的模拟工作将会在该文件上进行模拟。以下分析、处理基于EnPE.exe文件。
① 对原始可执行文件RawPE.exe的代码节进行加密,得到EnPE.exe(已完成);
密码算法:异或;密钥0XCC,与原始可执行文件RawPE.exe比较,分析加密了几个字节?
增加两节
② 增加节(已完成);与原始可执行文件RawPE.exe比较,增加了几个节,该节大小是多少?
原始可执行文件的节表为0003,修改后为0004,增加了一个节;该节的大小是1000
③ 修改代码节的属性与程序的入口点;
在PE ditor中修改入口点
使用PE来修改代码节的属性,鼠标点击sections,然后找到.text,右键,点击edit section,修改Characteristics,将它改成可读、可写、可执行,00000020h+20000000h+40000000h+80000000h=E0000020h,然后保存。
知识点:节的属性问题
关于文件属性:
标志(属性块)常用特征值对照如下所示:
[00000020h] :包含可执行代码;a
[00000040h]:该块包含已初始化的数据;b
[00000080h]:该块包含未初始化的数据;c
[20000000h]:该块可执行;d
[40000000h]:该块可读;e
[80000000h]:该块可写;f
代码节的属性一般为60000020H,也就是可执行、可读和"节中包含代码"(a+d+e);
数据节的属性 一般为C0000040H,也就是可读、可写和"包含已初始化数据"(b+e+f);
而常量节(对应源代码中的.const段)的属性为40000040H,也就是可读 和 "包含已初始化数据";
那么为了达到加壳后能正常运行,EnPE.exe的.text节的属性是什么?
知识点:入口点
为了达到加壳后能正常运行,EnPE.exe入口点应改为什么?
改为0x00004000
④ 在增加的节中写入解密代码。
参照课本P160 代码,解释代码作用;
在OD中打开保存好后的文件,打开后如下图所示,发现OD已经停在入口地址为0x00404000处,表示修改成功了
在新的入口点出添加如下代码:
将保存好的拉到pe修改