gpt4 book ai didi

c - 如何巧妙地修改 PE 数据部分

转载 作者:行者123 更新时间:2023-12-04 05:05:16 27 4
gpt4 key购买 nike

我正在“C/C++ - Win32API”环境中编写一个 dll。
我有一些常量变量(都是 DWORD 值和 LPWSTR/LPSTR 字符串),我必须启用用户修改。
我正在寻找的是(希望)一种工具,可以按照所述进行安全的二进制修改,
以更新 PE 的所有必要表的方式。

最佳答案

您可以在单独的 PE 部分中创建一个结构,因此:

// Create the section
#pragma section("myconst", read)

// Declare a struct to hold the constant data
typedef struct
{
DWORD a;
DWORD b;
char stringa[256];
char stringb[256];
} ConstData;

// Create an initialized instance of the struct in the new section
__declspec(allocate("myconst"))
const ConstData theData = {0xdeadbeef, 0xfeedface, "Hello", "dolly"};

编译代码。打开 Visual Studio 命令提示符,运行
dumpbin /all myexe.exe > dump.txt
notepad dump.txt

搜索 myconst节。你应该看到类似的东西:
SECTION HEADER #4
myconst name
208 virtual size
4000 virtual address (00404000 to 00404207)
400 size of raw data
2000 file pointer to raw data (00002000 to 000023FF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
Read Only

RAW DATA #4
00404000: EF BE AD DE CE FA ED FE 48 65 6C 6C 6F 00 00 00 ï¾­ÞÎúíþHello...
00404010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00404020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

您可以看到在代码中初始化的两个十六进制值和第一个字符串值。你还可以看到这个数据在PE文件中的偏移量——“原始数据的文件指针”——是0x2000。

有了这些信息,就可以很容易地构造一个新的数据块、打开 PE 文件并覆盖 0x2000 处的数据。

要确定代码的偏移量,您需要解析 PE 文件头和节头。这是相当简单的。或者,您可以从 dumpbin 输出中获取偏移量作为构建过程的一部分,并将其输入到编辑工具的构建中。

请注意,要在 Release模式下对此进行测试,您需要实际使用 theData否则链接器会将其丢弃。另请注意,该部分只有 read属性,所以它是真正的只读。尝试写入它会导致访问冲突。

最后......这一切都很邋遢。除非你真的别无选择,否则我不会打扰。

关于c - 如何巧妙地修改 PE 数据部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com