扩展可执行文件的 .text 部分失败

问题描述 投票:0回答:1

警告 - 这是一个相当长的问题。

背景

我正在开发一个用于检测 pe 文件的小项目。目前我的主要重点是扩展可执行文件的 .text 部分。不是添加新段,不是修改入口点,而是真正扩展现有的 .text 段。

我的做法很幼稚。我完全依赖 https://learn.microsoft.com/en-us/windows/win32/debug/pe-format,因此我很高兴听到有关如何改进的建议。此外,也许你会发现我错过的一些东西。现在我是:

  1. 修复 .text 之后部分的所有原始/虚拟地址 部分确保它们正确对齐,
  2. 修复一些 标头中的字段,例如数据大小、代码大小、校验和,
  3. 迭代每个数据字典并修复所有字段 有RVA。 当比较 pe-bear 中的文件时,一切似乎都已正确更新。

现状

我能够扩展自己编写的使用 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

code-injection instrumentation portable-executable
1个回答
0
投票

嘿,您能否分享一下您的代码,或者至少更深入地解释一下您如何在不破坏所有内容的情况下设法增加 .text ?我正在尝试做同样的事情,但我错过了一些东西,也许我做错了方法。

非常感谢你

© www.soinside.com 2019 - 2024. All rights reserved.