截图

截图

我一直在尝试制作批处理文件安装程序。通过将文件嵌入批处理文件中并使用一行more +...来提取它。

这是我的代码:

@echo off
set self=%~df0
>%userprofile%\desktop\file.exe more +8 "%self%"
echo done!
pause
exit
REM beginning of exe file...

c  
sd  
€  ~  * 0      ~  *  €  *’s6  (e  
t
  €  s.  
(/  
€  *   (f  
*^(  og  
,
(9  oh  
*0 K     ~  ->~  (i  
(j  
~  -(  þ7  sk  
ol  
€  Þ(m  
Ü~  * 


etc...

问题:

我正在尝试提取 GUI exe,但是,提取后,当我尝试运行它时,Windows 会将其视为 16 位程序...为什么会发生这种情况?我该如何修复它?


截图


截屏

答案1

正如评论中指出的那样,将可执行程序塞入文本文件会破坏二进制文件。相反,您可以存储编码版本,然后对其进行解码。要轻松实现这一点,您可以使用 PowerShell。从此批处理文件开始:

@echo off
powershell -command "[IO.File]::WriteAllBytes('extracted.exe', [Convert]::FromBase64String((gc '%0')[-1]))"
extracted
del extracted.exe
exit

REM Base64-encoded program will be inserted below

在末尾添加一个额外的空白行。

有趣的部分是 PowerShell 调用。该命令读取批处理文件的内容,取出最后一行,从 Base64 解码,并将这些字节写入名为 的文件extracted.exe。然后批处理文件只运行该 EXE,完成后它会通过删除临时可执行文件进行清理。

为了使最后一行包含必要的信息,启动 PowerShell,cd进入批处理文件的目录,然后运行此文件(输入实际文件名和路径):

[Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\fullPathTo\file.exe')) | Out-File 'batchFile.bat' -Append -Encoding ASCII

完成后,您的批处理文件将能够提取该程序并运行它。

相关内容