警告 - 这是一个相当长的问题。
背景
我正在开发一个用于检测 pe 文件的小项目。目前我的主要重点是扩展可执行文件的 .text 部分。不是添加新段,不是修改入口点,而是真正扩展现有的 .text 段。
我的做法很幼稚。我完全依赖 https://learn.microsoft.com/en-us/windows/win32/debug/pe-format,因此我很高兴听到有关如何改进的建议。此外,也许你会发现我错过的一些东西。现在我是:
现状
我能够扩展自己编写的使用 TLS、异常、导入、延迟导入、sefe seh 和资源的小项目。但我未能扩展互联网上可用的真实的大型应用程序。
记事本++
我无法扩展的应用程序之一是记事本。我的意思是修改后的 Notepad++ 二进制文件会崩溃。我找到了一个地方,似乎是原因。
push ebp
mov ebp, esp
mov ebx, dword ptr ss:[ebp+8] ; <-- 1) this argument in orginal is equal to 2. In permutated executable it is equal to some huge number
xor ecx, ecx
push edi
xor eax, eax
lea edi, dword ptr ds:[ebx*4 + 0x641fdc] ; <-- and so this causes ACCESS VOLATATION
一些截图: x64dbg - 1) 之前的原始 Notepad++。基址:0x41000。 ebx 将变为:0x2。 x64dbg - 1) 之前的扩展 Notepad++。基址:0x42000。 ebx 将变为:0x00177FF4
0x146dde rva 地址是重定位。这是原始 Notepad++ 中此重定位的屏幕截图 并在修改后的一处。请注意,只有重定位值已从 0x611fdc 更改为 0x621fdc(这是预期的行为):
原始 Notepad++ 二进制文件的链接:https://notepad-plus-plus.org/downloads/v7.8.6/
链接到修改后的 Notepad++ 二进制文件:https://www.dropbox.com/s/hokh4ulmtgn7om1/notepad%2B%2B.permutated.exe?dl=0
嘿,您能否分享一下您的代码,或者至少更深入地解释一下您如何在不破坏所有内容的情况下设法增加 .text ?我正在尝试做同样的事情,但我错过了一些东西,也许我做错了方法。
非常感谢你