1 votes

Fichier batch pour extraire l'exe de lui-même en utilisant more, ne fonctionne pas

J'ai expérimenté la création d'un programme d'installation de fichier batch. en intégrant le fichier dans le fichier batch et en utilisant une fonction more +... pour l'extraire.

Voici mon code :

@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...

Le problème :

J'essaie d'extraire un exe GUI, mais une fois qu'il est extrait, lorsque j'essaie de l'exécuter, Windows le traite comme un programme 16 bits... Pourquoi cela se produit-il ? Et comment puis-je le réparer ?


Captures d'écran


screenshot

1voto

Ben N Points 38070

Comme indiqué dans les commentaires, le fait de placer un programme exécutable dans un fichier texte va détruire le fichier binaire. Au lieu de cela, vous pouvez stocker une version codée et la décoder ensuite. Pour y parvenir facilement, vous pouvez utiliser PowerShell. Commencez par ce fichier batch :

@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

Ajoutez une ligne vierge supplémentaire à la fin.

La partie intéressante est l'invocation PowerShell. Cette commande lit le contenu du fichier batch, prend la toute dernière ligne, la décode en Base64, et écrit ces octets dans un fichier appelé extracted.exe . Ensuite, le fichier batch exécute simplement cet EXE, et une fois que c'est fait, il nettoie en supprimant l'exécutable temporaire.

Pour que la dernière ligne contienne les informations nécessaires, lancez PowerShell, cd dans le répertoire avec le fichier batch, puis exécutez ceci (avec les noms de fichiers et les chemins réels) :

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

Une fois cela fait, votre fichier batch sera capable d'extraire ce programme et de l'exécuter.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X