【发布时间】:2019-01-19 10:51:17
【问题描述】:
我目前正在尝试让一个可执行文件在内存中运行。因为以后很可能有人会问:是的,它会被用于恶意软件,以便对 AV 隐藏它。它仅用于教育目的,特别是针对学校项目(将是我毕业的一部分)。 然而,这个问题涉及到别的东西。我在 Github 找到了一个非常好的来源:https://github.com/aaaddress1/RunPE-In-Memory,它非常适合我的用途(我已经为我的目的更改了它等),除了我想运行的木马。我尝试了几个,例如 Darkcomet 或 Darktrack (它需要是一些众所周知的旧东西来展示如何重用它们)。我想因为 Darkcomet 它是在 Delphi 中编码的(它输出一个本机?),它会像任何其他 EXE 文件一样工作(就像 Github 提供的那些),但它只是没有启动。在 Darkcomet 中,还有一个选项可以让恶意服务器文件引人注目,所以我没有在任何端口转发方面失败是安全的。
那时我的第一个意图是在文本编辑器中打开 EXE 并查看它是否是相同的架构。我可以在两个二进制文件中找到“PE L”,据我所知,它都是 32 位的。让我觉得奇怪的是这两行
"此程序不能在 DOS 模式下运行。" 用于编译的 runPE 加载器 和
“此程序必须在 Win32 下运行”才能获得木马可执行文件。
此外,这两个二进制文件的第一个字符不同:MZ 和 MZP。 在打开更多二进制文件并对其进行测试后,我得出的结论是,带有“此程序必须在 Win32 下运行”的那些不起作用。
据我所知和谷歌搜索,有 DOS 和 Windows 可执行文件。但如果只有这两种类型,为什么会有区别呢? "必须在 Win32 下运行" == "不能在 DOS 模式下运行。" 在我看来。
我也查了这两个术语,但我只得到关于尝试在 DOSBox 或类似东西中运行这些 Windows-PE 的人的线程。
所以,我实际的两个问题是:
-“这个程序必须在Win32下运行”(Type1)和“这个程序不能在DOS模式下运行”(Type2)有什么区别
-如果我想使用从 Github 存储库制作的 (Type2)RunPe-InMemory 可执行文件将 (Type1) 程序推送到内存中,为什么它不起作用。
【问题讨论】:
-
DOS模式可能意味着16位模式? Win32顾名思义就是32位。在 32 位 x86 上,由于向后兼容,本质上仍然潜伏着一个活化石 16 位架构。已在 64 位 x86 中被杀死的 AFAIK,取而代之的是 32 位活化石。
-
感谢您的回答。这将解释当时的差异。但为什么它不工作呢?我的意思是它都是 32 位...