如何在控制控制台窗口显示的win32 PE中戳标志

mba*_*768 4 console winapi

我有一个可执行文件,它是批处理过程的一部分.这个可执行文件打开一个控制台窗口,这是令人讨厌的,因为它对最终用户没用,并且会将注意力从他们的活动任务中移开.

我们无法从源(轻松)编译此EXE的新版本.是否有一种简单的方法可以在PE中改变这种设置?

mba*_*768 11

找到了.

editbin.exe /subsystem:windows foo.exe
Run Code Online (Sandbox Code Playgroud)

editbin.exe是MSVC的一部分


bru*_*iuz 5

我用python基于PE规范编写了它 http://msdn.microsoft.com/en-us/library/windows/hardware/gg463119.aspx

我不确定带有控制台| windows子系统的Windows EXE二进制文件是否具有相同的入口点格式(具有相同的参数),但它似乎是这样.

Python代码:

import sys
import struct

if len(sys.argv) < 4:
    print "Change Exe Run Mode Application by burlachenkok@gmail.com\nNot sufficient parametrs. 'exe_src_name.exe' 'exe_dest_name.exe' 'to_console' or 'to_windows'"
    sys.exit(-1)

source = open(sys.argv[1], "rb")
dest   = open(sys.argv[2], "w+b")
dest.write(source.read())

dest.seek(0x3c)
(PeHeaderOffset,)=struct.unpack("H", dest.read(2))

dest.seek(PeHeaderOffset)
(PeSignature,)=struct.unpack("I", dest.read(4))
if PeSignature != 0x4550:
    print "Error in Find PE header"

dest.seek(PeHeaderOffset + 0x5C)

if sys.argv[3].strip() == "to_console":
    # console mode
    dest.write(struct.pack("H", 0x03))
elif sys.argv[3].strip() == "to_windows":
    # window mode
    dest.write(struct.pack("H", 0x02))
else:
    print "Wrong Format: '" + sys.argv[3] + "'"

source.close()
dest.close()

print "Completed succesfully.."
Run Code Online (Sandbox Code Playgroud)