ASM启动过程隐藏

Nol*_*oli 1 console winapi masm nasm disassembly

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

谢谢!

Mik*_*wan 6

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

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

要执行代码注入,请找到编解码器,然后JMP在入口点(EP)修补此编解码器.在codecave,写被覆盖的指令JMP,然后拨打电话来FreeConsole,然后JMP回指令后JMP,你在前面EP修补英寸

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

#include <Windows.h>

int main() {
  Sleep(INFINITE);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

1

按下顶部的大M来获取内存映射:

2

由于我们的主模块是Some_console_App,然后双击那里的PE头,我们将这个:

3

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

4

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

五

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

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