以下のファイルが与えられた。
gdun-dqjho-wr-fkduohv-d-jhvklfnwhu.oodev
zealotcrypt-02.bin
zealotcrypt-02-decrypt.bin
複号プログラムを.oodev
のファイルを main.findFilesWithExt
関数で探して複号することが読み取れた。
安全のため os.Remove
の呼び出し (Ghidra上の表示で08150b2b
、ファイルの0x108B2B
バイト目 (0-origin) からの5バイト e8 40 7e f8 ff
) をNOP (90
) で埋め、
次に、暗号化プログラムをGhidraで逆コンパイルすると、
拡張子 .llabs
のファイルを main.findFilesWithExt
関数で探し、main.encryptAes
関数で暗号化しているのが読み取れた。
そこで、これもos.Remove
の呼び出し (Ghidra上の表示で0822ea83
、ファイルの0x1E6A83
バイト目 (0-origin) からの5バイト e8 98 5b ec ff
) をNOP (90
) で埋め、
CS50 IDE上で実行してみることにした。
暗号化対象の空のファイル hoge.llabs
を用意した上で、改造した暗号化プログラムをCS50 IDE上のGDBで実行し、
main.encryptAes
関数を呼び出す直前の 0x0822ea35
にブレークポイントを置いて観察した。
すると、以下のように、%esp + 0x0c
に書かれているアドレスに何かのデータがあることを発見した。
These files were given:
gdun-dqjho-wr-fkduohv-d-jhvklfnwhu.oodev
zealotcrypt-02.bin
zealotcrypt-02-decrypt.bin
Decompiling the decryptor via .oodev
using the function main.findFilesWithExt
, and decrypts the files.
I filled the part to call the function os.Remove
(the 5 bytes e8 40 7e f8 ff
from 08150b2b
on Ghidra, or 0x1E6A83
-rd byte of the file (the first byte is 0th)) with NOP (90
) for safety,
and executed the decryptor on
Then, I decompiled the encryptor via Ghidra.
I found that it searches for files with the extension .llabs
using the function main.findFilesWithExt
, and encrypts the files using the function main.encryptAes
.
I decided to fill the part to call the function os.Remove
(the 5 bytes e8 98 5b ec ff
from 0822ea83
on Ghidra, or 0x1E6A83
-rd byte of the file (the first byte is 0th)) with NOP (90
) for safety,
and to try executing that on CS50 IDE.
I put an empty file to encrypt hoge.llabs
and executed the patched encryptor with GDB on CS50 IDE.
I put a breakpoint to 0x0822ea35
(just before calling the function main.encryptAes
) and investigated.
As a result, I found that there is some data from the address written in %esp + 0x0c
like this:
ここで発見したデータを16進数で表した d8f5c876b36f019254a7307c1eb0fe09
を引数として改造した複号プログラムを用いると、
与えられたデータを複号することができ、復号結果がflagを含んでいた。
I used the data found here expressed in hexadecimal d8f5c876b36f019254a7307c1eb0fe09
as the argument to execute the patched decryptor.
It succeeded to decrypt the data given, and the result of decryption contained the flag.