個人的に、どういう場合にどっちのコマンドを使うのかゴッチャになりがちなのでメモ。
以下のテスト用のバイナリfile.bin
を例にしてxorsearchとxorstringsコマンドを実行する。
$ xxd file.bin
0000000: 6c7b b121 2221 2121 2521 2121 dede 2121 l{.!"!!!%!!!..!!
0000010: 9921 2121 2121 2121 6121 2121 2121 2121 .!!!!!!!a!!!!!!!
0000020: 2121 2121 2121 2121 2121 2121 2121 2121 !!!!!!!!!!!!!!!!
0000030: 2121 2121 2121 2121 2121 2121 c121 2121 !!!!!!!!!!!!.!!!
0000040: 2f3e 9b2f 2195 28ec 0099 206d ec00 7549 />./!.(... m..uI
0000050: 4852 0151 534e 4653 404c 0142 404f 4f4e HR.QSNFS@L.B@OON
0000060: 5501 4344 0153 544f 0148 4f01 656e 7201 U.CD.STO.HO.enr.
0000070: 4c4e 4544 0f2c 2c2b 0521 2121 2121 2121 LNED.,,+.!!!!!!!
0000080: 939f e343 d7fe 8d10 d7fe 8d10 d7fe 8d10 ...C............
0000090: de86 1810 d4fe 8d10 de86 1e10 cafe 8d10 ................
00000a0: d7fe 8c10 21fe 8d10 de86 0e10 c8fe 8d10 ....!...........
00000b0: de86 0910 d5fe 8d10 de86 1910 d6fe 8d10 ................
00000c0: de86 1c10 d6fe 8d10 7348 4249 d7fe 8d10 ........sHBI....
00000d0: 2121 2121 2121 2121 2121 2121 2121 2121 !!!!!!!!!!!!!!!!
00000e0: 7164 2121 6d20 2521 2ee7 7a6b 2121 2121 qd!!m %!..zk!!!!
00000f0: 2121 2121 c121 2320 2a20 2821 2189 2121 !!!!.!# * (!!.!!
0000100: 2105 2321 2121 2121 a817 2121 2131 2121 !.#!!!!!..!!!1!!
0000110: 21e1 2121 2121 2120 2131 2121 2123 2121 !.!!!!! !1!!!#!!
0000120: 2721 2021 2721 2021 2721 2021 2121 2121 '! !'! !'! !!!!!
0000130: 2121 2221 2125 2121 60b6 2221 2321 61a0 !!"!!%!!`."!#!a.
0000140: 5244 4253 4455 014c 4452 5240 4644 0021 RDBSDU.LDRR@FD.!
0000150: 2121 2121 3121 2121 2121 2121 2121 2121 !!!!1!!!!!!!!!!!
0000160: 6981 2121 0d20 2121 21d1 2121 41d0 20 i.!!. !!!.!!A.
file.bin
は0x21
を鍵としてXORエンコードが施されたファイルである。
暗号鍵が既知の場合はxorstringsを使用してデコードする
暗号鍵を既に知っている場合は暗号鍵を引数に渡してxorstringsを実行するとファイルの内容を復号できる。
以下のコマンドは暗号鍵に0x21
を指定してfile.bin
をXORデコードする。
xorstrings file.bin -o XOR -k 0x21
$ xorstrings file.bin -o XOR -k 0x21
secret message!
secret message!
というデータが復号された。
復号後のデータを知っている場合はxorsearchを使用して暗号鍵を突き止める
暗号鍵は不明だが復号後のデータを知っている場合はxorsearchを使用して暗号鍵を突き止める事ができる。
以下のコマンドはsecret message!
という既知の復号データ (known plain text)をもとにfile.bin
の暗号鍵を求める。
xorsearch file.bin "secret message!"
$ xorsearch file.bin "secret message!"
Found XOR 21 position 0140: secret message!
secret message!
というデータが暗号鍵0x21
を用いてXOR暗号化されていることが判明した。