有两种方法可以做到这一点.您可以执行代码注入以在创建窗口后隐藏窗口,也可以更改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中打开结果二进制文件,我们会得到这样的结果:

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

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

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

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

选择要更改的字节,按Ctrl-E并将3更改为2.然后右键单击>>复制到可执行文件.在弹出的"文件"窗口中,右键单击并选择"保存文件".
田田!完成.对不起,对于大分辨率的图片.
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |