ASM启动过程隐藏

时间:2011-08-18 11:59:42

标签: winapi console nasm masm disassembly

我有一个已编译的C ++控制台应用程序,它显示为一个小黑窗口。 现在我想反汇编应用程序并添加代码以隐藏进程启动。也许你可以帮我找到api电话,或者你能解释一下这是怎么回事。我目前使用的Debuger是OllyDBG,但我也熟悉IDA和WDASM32。

谢谢!

1 个答案:

答案 0 :(得分:6)

有两种方法可以做到这一点。您可以执行代码注入以在创建窗口后隐藏窗口,也可以更改PE标头中定义的子系统。

PE头有一个标志,用于定义编译代码的子系统。目前为WINDOWS_CUI,您希望将其更改为WINDOWS_GUI

要执行代码注入,请找到编解码器,然后在入口点(EP)将JMP修补到此编解码器。在编解码器中,写下被JMP覆盖的指令然后调用FreeConsole然后JMP回到你在EP上修补的JMP之后的指令早。

让我举个例子。我在VC ++中编译了一个C程序:

#include <Windows.h>

int main() {
  Sleep(INFINITE);
  return 0;
}

如果我们在OllyDbg中打开结果二进制文件,我们会得到类似的结果:

1

按顶部的大M来获取存储器映射:

2

由于我们的主模块是Some_console_App,然后双击那里的PE标题,我们将其转到:

3

向下滚动一下以找到子系统:

4

如您所见,它设置为IMAGE_SUBSYSTEM_WINDOWS_CUI,定义为3.我们要将其设置为IMAGE_SUBSYSTEM_WINDOWS_GUI,即2.返回CPU窗口,在十六进制转储中,转到子系统标志设置的地址上。在这种情况下,它是0x0136013C:

5

选择要更改的字节,按Ctrl-E并将3更改为2.然后右键单击&gt;&gt;复制到可执行文件。在弹出的“文件”窗口中,右键单击并选择“保存文件”。

多田!完成。对不起,对于大分辨率的图片。