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
Mein Antivirus-Programm mag nicht eine der generierten 'exe'-Dateien. – Stephan