1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【CyberDefenders】RE101【Writeup】

Last updated at Posted at 2023-06-13

初めに

どうも、クソ雑魚のなんちゃてエンジニアです。
本記事は CyberDefenders (以下リンク参考)の「RE101」にチャレンジした際のWriteupになります。

※本チャレンジについてはRed側のペネトレというよりはBlue側の分析力を問われるものになります。

File: MALWARE000 - I've used this new encryption I heard about online for my warez; I bet you can't extract the flag!

ファイルが複数あるうちの「malware000」のファイルについて問題を出されている。
とりあえず表層解析してみる。stringsコマンドで確認。
1-1.png
あ、Base64ぽいエンコード文字列がある。
base64 -dでデコードしたら答えがでてきました。
1-2.png

Ans: 0ops_i_used_1337_b64_encryption

File: Just some JS - Check out what I can do!

ファイルが複数あるうちの「just_some_js」のファイルについて問題を出されている。
とりあえず中身を確認してみる。
2-1.png
ああ、これJSのobfuscationで見たことあるわ。以下のサイトでdeobfuscationできます。

2-2.png
フラグゲット!

Ans: what_a_cheeky_language!1!

File: This is not JS - I'm tired of Javascript. Luckily, I found the grand-daddy of that lame last language!

ファイルが複数あるうちの「this_is_not_js」のファイルについて問題を出されている。
とりあえず中身を確認してみる。
3-1.png
これもみたことあるわ。Brainf*ckだわ。以下のサイトでdeobfuscationできます。

3-2.png
フラグゲット!

Ans: Now_THIS_is_programming

File: Unzip Me - I zipped flag.txt and encrypted it with the password "password", but I think the header got messed up... You can have the flag if you fix the file

ファイルが複数あるうちの「file.zip_broken」のファイルについて問題を出されている。
unzipコマンドで試しに解凍してみるとwarning: file too longといわれる。
バイナリを確認してみるとパット見ではheader構造におかしな点は見えない(50 4B 03 04で始まってるし。ここら辺CTFやってる人からしたら暗記事項かな)
4-0.png
というわけでしっかりheader構造を追わないといけないみたいだ。ここら辺は以下のサイトが役に立つかもしれない。

調べてみるとlocal file headercentral directory headerの項目のfile name lengthに差分があるのがわかる。58 5808 00で違う。
4-1.png
flag.txtについては8バイトなのでcentral directory headerのほうが正しい(リトルエンディアン)。こちらに合わせる。
4-2.png
保存後、再度解凍すればフラグのテキストファイルが見える。
4-3.png

Ans: R3ad_th3_spec

File: MALWARE101 - Apparently, my encryption isn't so secure. I've got a new way of hiding my flags!

ファイルが複数あるうちの「malware101」のファイルについて問題を出されている。
とりあえずGhidraで確認してみる。
5-1.png
....Stack Stringかなぁ、それくらいしかないほどシンプルなバイナリ。
radare2で実際にデバックしてみる。
r2 -A -d malware101コマンドでデバック開始。izで一応stringsも確認したがいいものない。何もない。やっぱりStack Stringか?
5-2.png
aflでSymbolを確認しつつ、pdf @ mainでディスアセンブル!
5-3.png
printfが見えるのでその直前にBreakPointをdbで仕込んでdcで実行してみる。
V!のビジュアルモードで確認すると、Stackにフラグが積まれているのが見える。
5-4.png
というわけで、qでモード抜けた後はpxw @ rspでStackの中身を出力し、フラグゲット!!!
5-5.png

Ans: sTaCk_strings_LMAO

File: MALWARE201 - Ugh... I guess I'll just roll my own encryption. I'm not too good at math, but it looks good to me!

ファイルが複数あるうちの「malware201」のファイルについて問題を出されている。
とりあえず回してみる。
6-2.png
何やらフラグが暗号化して出力されているみたいだ。暗号化前の文字列と暗号化後の文字列の比較も出力されている。
とりあえずGhidraで中身を確認してみる。
6-1.png
FUN_004005b0は出力関数で実際の暗号化はFUN_00400620で行ってそう。
この関数の中身を確認する。
6-3.png
デコンパイルの結果、ビットシフトしたりXORしたりしているのがわかる。
なんか面倒なのでChatGPTさんに聞いてみた。
6-4.png
PythonのTool作ってくれたので、このToolを回します。

def decrypt_string(encrypted_str):
    decrypted_str = ""
    key = 0xA0
    for byte in encrypted_str:
        decrypted_byte = ((byte ^ key) - 1) >> 1
        decrypted_str += chr(decrypted_byte)
        key = (key + 1) & 0xFF
    return decrypted_str

# 暗号化された文字列と文字数を指定して解密を行う例
encrypted_str = b'\x7b\x52\xe3\x78\x6f\x42\x41\x64\x67\x62'
num_chars = len(encrypted_str)
decrypted_str = decrypt_string(encrypted_str)
print(decrypted_str)

6-5.png
フラグゲット!!!

Ans: malwar3-3ncryp710n-15-Sh17

最後に

クリプト問やバイナリ解析の入門にちょうどいいチャレンジだとおもいました。
最後に手を抜いてChatGPTさんに聞いてしまい申し訳ありませんでした。

今回もセキュリティエンジニアの皆さんの助けになればなと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?