PicoCTF 2022「unpackme」の復習
はじめに
タイトルのやつをやります。
https://play.picoctf.org/practice/challenge/313?category=3&originalEvent=70&page=1
私的ポイント
UPXを知らなかった。
解き方
ダウンロードしたバイナリを動かしてみます。好きな数字を聞いてくる系のやつ。
$ ./unpackme-upx What's my favorite number? 111 Sorry, that's not it!
以前記事にした問題と同じっぽいです。
Ghidraに投げるも、関数が全然出てこなくてよく分からない。Radareでも状況打開できず。
調べると、UPXなる実行バイナリの圧縮をするソフトウェアがあるらしいことが分かりました。しかも手元のマシンに入ってた。
$ which upx /usr/bin/upx
展開してRadareにかけると、入力の比較対象が 0xb83cb
だと分かって。
$ upx -d unpackme-upx Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020 File size Ratio Format Name -------------------- ------ ----------- ----------- 1002408 <- 379108 37.82% linux/amd64 unpackme-upx Unpacked 1 file. $ r2 unpackme-ups $ r2 unpackme-upx -- Here be dragons. [0x00401c90]> aaaaaa # こんなにいらない ... [0x00401c90]> pdf @ main ; DATA XREF from entry0 @ 0x401cb1 ┌ 246: int main (int argc, char **argv); │ ; var char **var_50h @ rbp-0x50 ... │ 0x00401ef5 8b45c4 mov eax, dword [var_3ch] │ 0x00401ef8 3dcb830b00 cmp eax, 0xb83cb ★ここ! │ ┌─< 0x00401efd 7543 jne 0x401f42... [0x00401c90]>
オシャレにワンライナーでsolveしてみる。