車輪の再開発ブログ

Python & CTF Beginner!

picoCTF 2022 unpackme

コンテスト中に解けなかった問題の復習です。

問題

Can you get the flag? Reverse engineer this binary.

バイナリファイル(unpackme-upx)がダウンロードできる。

ヒント

What is UPX?

解法

まず、UPXとはなんぞやということなのですが、

ja.wikipedia.org

みたいです。Ghidraで解析する前に、展開してあげたあげれば、良いらしいです。

https://ja.wikipedia.org/wiki/UPX

まずは、インストール方法は、単純で、aptでupxとやる。

$ apt -y install upx

これで、upxコマンドが使える。

ダウンロードしたファイルを、decompressするには、-dオプションを使う。

# upx -d unpackme-upx 
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2018
UPX 3.95        Markus Oberhumer, Laszlo Molnar & John Reiser   Aug 26th 2018

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   1002408 <-    379116   37.82%   linux/amd64   unpackme-upx

Unpacked 1 file.

これを、Bbbboatと同じように、Ghidraにかける。

で、kusuwada先生のアドバイス picoCTF2022 [Reverse Engineering] writeup - 好奇心の足跡 にしたがって、

Exportsの中の、main関数を見つける。

ここに、0xb83cb、つまり、754635 が見つけたい数値となる。

で、

# ./unpackme-upx 
What's my favorite number? 754635
picoCTF{up><_m3_f7w_5769b54e}

をして、(Ghidraの使い方がよくわからないとかいろいろあるけど、とりあえず)flagゲット!