2016-06-12 14 views
-3

, wenn ich den flappy Vogel im Batch sah sah ich durch den Code und sah dies:Wie wird die Binärdatei in der Batch-Datei gespeichert und in eine Datei umgewandelt? So

) Do >> "FLAPPY.zi_" (Echo.For b=1 To len^(%%b^) Step 2 
    Echo WScript.StdOut.Write Chr^(Clng^("&H"^&Mid^(%%b,b,2^)^)^) : Next) 
    Cscript /b /e:vbs "FLAPPY.zi_" > "FLAPPY.zip" 
    Del "FLAPPY.zi_" >nul 2>&1 
    UNZIP FLAPPY.ZIP 
    Del/q UNZIP.EXE 
    del/q FLAPPY.ZIP 
    echo. 
    echo Installed succesfully, press a key to play 
    pause>nul 
    goto:eof 

und über

) Do >> "FLAPPY.zi_" (Echo.For b=1 To len^(%%b^) Step 2 

gibt es Binärcode. Der vollständige Code ist hier: https://docs.google.com/document/d/1bl2JRE8ssYzvGMhacZ8hf-AyBQeageseC0o-iTWy_Hg/edit?usp=sharing

So gibt es eine Möglichkeit, dass ich eine Datei in Binär konvertieren kann?

Und dann konvertieren Sie es zurück in eine Datei?

+0

Mein Antivirus-Programm mag nicht eine der generierten 'exe'-Dateien. – Stephan

Antwort

1

Reine Stapelverarbeitung kann keine Nullbytes (0x00) schreiben. Sie können various hybrid techniques verwenden, um Stapel mit leistungsfähigeren Sprachen wie VBScript, JScript, PowerShell zu kombinieren, die binäre Daten relativ einfach lesen/schreiben können.

Aber wahrscheinlich die einfachste Sache zu verwenden ist CERTUTIL. Es hat verschiedene Verboptionen, die binäre Daten in hexadezimale oder base64 umwandeln können und umgekehrt.

Die folgenden Befehle bieten Hilfe für die entsprechenden Verb Optionen:

:: Hexadecimal conversion 
certutil -encodehex -? 
certutil -decodehex -? 

:: Base 64 conversion 
certutil -encode -? 
certutil -decode -? 

Die kodieren Verben zusätzliche Inhalte an den Ausgang hinzufügen, die mit den Dekodierungs nicht Verben stören. Sie können die zusätzlichen Informationen sicher entfernen und die Kodierungsdateien neu formatieren, und die Dekodierungsverben funktionieren weiterhin.

Irgendwo auf DosTips.com ist ein guter Thread, der zeigt, wie CERTUTIL zum Lesen/Schreiben von Binärdateien verwendet wird, aber ich konnte es nicht finden.

Hier ist ein triviales .bat-Beispiel, das alle 256-Byte-Werte in das Skript eingebettet hat und die hex-Daten in eine temporäre Datei extrahiert, CETUTIL verwendet, um das Hexadezimalformat in eine 256-Byte-Binärdatei zu decodieren, und dann CERTUTIL verwendet erneut, um die Binärdatei in hex zu codieren.

@echo off 
::: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 
::: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 
::: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 
::: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 
::: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 
::: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 
::: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 
::: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 
::: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 
::: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F 
::: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF 
::: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF 
::: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF 
::: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF 
::: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF 
::: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 
>hex.temp (
    for /f "delims=: tokens=*" %%A in ('findstr "^:::" "%~f0"') do echo %%A 
) 

certutil -f -decodeHex hex.temp out.bin >nul 

certutil -f -encodeHex out.bin out.hex >nul 

del hex.temp 
+0

Ich habe einen Weg gefunden http://dos9.org/doc/en/html/batbox.html –

Verwandte Themen