Winapi ASM启动进程隐藏 我有一个已经编译过的C++控制台应用程序,它显示为一个小的黑窗口。 现在,我想反汇编应用程序并添加代码以隐藏进程开始。也许你能帮我找到api调用,或者你能解释一下它是如何工作的。我目前使用的调试器是OllyDBG,但我也了解IDA和WDASM32

Winapi ASM启动进程隐藏 我有一个已经编译过的C++控制台应用程序,它显示为一个小的黑窗口。 现在,我想反汇编应用程序并添加代码以隐藏进程开始。也许你能帮我找到api调用,或者你能解释一下它是如何工作的。我目前使用的调试器是OllyDBG,但我也了解IDA和WDASM32,winapi,console,nasm,masm,disassembly,Winapi,Console,Nasm,Masm,Disassembly,谢谢转发 有两种方法可以做到这一点。您可以在创建窗口后执行代码注入以隐藏窗口,也可以更改PE标头中定义的子系统 PE头有一个标志,用于定义编译代码所依据的子系统。这将是当前的WINDOWS_CUI,您希望将其更改为WINDOWS_GUI 要执行代码注入,请找到一个codecave,然后在入口点EP处将一个JMP修补到此codecave。在codecave中,编写被JMP覆盖的指令,然后调用FreeConsole,然后JMP返回到先前在EP中修补的JMP之后的指令 让我给你举个例子。我用VC++编

谢谢转发

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

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

要执行代码注入,请找到一个codecave,然后在入口点EP处将一个JMP修补到此codecave。在codecave中,编写被JMP覆盖的指令,然后调用FreeConsole,然后JMP返回到先前在EP中修补的JMP之后的指令

让我给你举个例子。我用VC++编写了一个C程序:

#include <Windows.h>

int main() {
  Sleep(INFINITE);
  return 0;
}
如果我们在OllyDbg中打开结果二进制文件,我们会得到如下结果:

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

由于我们的主模块是一些控制台应用程序,因此双击此处的PE标题,我们将看到:

向下滚动一点以查找子系统:

如您所见,它被设置为IMAGE\u SUBSYSTEM\u WINDOWS\u CUI,定义为3。我们想将其设置为IMAGE\u SUBSYSTEM\u WINDOWS\u GUI,即2。返回CPU窗口,在十六进制转储中,转到子系统标志设置的地址。在本例中,它是0x0136013C:

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


塔达!完成。抱歉,图片分辨率太高。

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

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

要执行代码注入,请找到一个codecave,然后在入口点EP处将一个JMP修补到此codecave。在codecave中,编写被JMP覆盖的指令,然后调用FreeConsole,然后JMP返回到先前在EP中修补的JMP之后的指令

让我给你举个例子。我用VC++编写了一个C程序:

#include <Windows.h>

int main() {
  Sleep(INFINITE);
  return 0;
}
如果我们在OllyDbg中打开结果二进制文件,我们会得到如下结果:

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

由于我们的主模块是一些控制台应用程序,因此双击此处的PE标题,我们将看到:

向下滚动一点以查找子系统:

如您所见,它被设置为IMAGE\u SUBSYSTEM\u WINDOWS\u CUI,定义为3。我们想将其设置为IMAGE\u SUBSYSTEM\u WINDOWS\u GUI,即2。返回CPU窗口,在十六进制转储中,转到子系统标志设置的地址。在本例中,它是0x0136013C:

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


塔达!完成。很抱歉,图片分辨率太高。

使用WinAPI SetWindowVisible,控制台窗口的句柄和参数为false?我找不到SetWindowVisible,我对此没有太多经验,但我仍然需要它,我想了解它是如何工作的,我搜索并发现他可能指的是ShowWindow或SetWindowPos。在您的示例中,SetWindowVisible是一个调用ShowWindow的帮助函数。使用WinAPI SetWindowVisible,将控制台窗口的句柄和参数设置为false?我找不到SetWindowVisible,我对此没有太多经验,但我仍然需要它,我想了解它的工作原理,我搜索发现他可能指的是ShowWindow或SetWindowPos。在您的示例中,SetWindowVisible是一个调用ShowWindow的助手函数。