【手工创建pe节区】
前言
提示:少就是多,快就是慢:
小生打算转战web区了,于是写下这些心的供后人参考
本文教程在Windows10 64bit下成功运行
提示:以下是本篇文章正文内容,下面案例可供参考
一、用到的工具
PEview、Hexwin、VScode
二、使用步骤
1.编写示例文件:test.cpp
VScode—代码如下(示例):
#include <windows.h>
#undef UNICODE
int main(){
MessageBox(NULL, "hello32world", "32", MB_ICONINFORMATION);
return 0;
}
2.编译:
VScode—终端打包(如图):
命令如下:
g++ -m32 -o test.exe '.\PE\helloword.cpp'
提示:-m32 是指编译成32位程序
3.使用PEview分析test.exe:
重要的部分用红框标记了,分别是
Size of Image :文件大小
Section Alignment:节对齐大小:1000(RVA对齐大小)【虚拟内存】
File Alignment:文件对齐大小:200(file Offset对齐大小 )【物理内存】
上图红框标记的Number of Section 是指节区数量,后面添加节需要使其加一
3.开始添加节
使用WinHex打开test.exe
拉到文件最底部,点击箭头所指方向,使地址视图改为16进制,选中最后一个字节,
右键编辑,粘贴0字节
点击确定,这里插入1000(16进制)字节,1000转成10进制就是4096,可以用计算器验证一下,
写入1000字节后保存一下,养成良好习惯
回到PEview,点击箭头所指,更改视图为物理地址(File Offset),其中Number of Section 的值是000D,转为10进制就是13
物理地址是00000086
在WinHex找到地址00000086,我们要插入一个节,所以Number of Section 的值要加一,变成了000E
在PEview随便找一个节,记住File Offset,然后在hex复制下来,小生选择的是最后一个节,
347c是起始字节,需要向后延长3个字节,所以选择区域是00000358到0000037f,
右键,编辑,复制选区,正常
在地址00000380右键,编辑,剪切板数据,写入
点击确定,前面8个字节是节的名字,随意更改即可,
再更改文件大小,插入了1000字节,Size of Image Base加1000,变成00101000
保存一下,然后用PEview查看,成功了
红框标记的需要更改
RVA是该节所在的虚拟地址,上一个节的RVA是0000F000,Section Alignment:节对齐大小是1000
所以RVA应该改成00010000
Size of Raw Data是节(AAAAAAA)的大小
Pointer to Raw Data是该节所在的物理地址
之前我们在文件末尾写入了1000字节,所以Size of Raw Data的值应该是1000,(200、600、800都可以,只要是File Alignment的倍数即可,但是不能超过1000,因为我们只写了1000)
更改完成后保存运行