1

Я экспериментировал с созданием программы установки для пакетного файла. встраивая файл в пакетный файл и используя строку 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...

Эта проблема:

Я пытаюсь извлечь exe-файл с графическим интерфейсом, однако, когда он извлекается, когда я пытаюсь его запустить, Windows воспринимает его как 16-битную программу ... Почему это происходит? И как я могу это исправить?


Скриншоты


Скриншот

1 ответ1

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

Как только это будет сделано, ваш командный файл сможет извлечь эту программу и запустить ее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .