ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

PicoCTF 2022「unpackme」の復習

はじめに

タイトルのやつをやります。

https://play.picoctf.org/practice/challenge/313?category=3&originalEvent=70&page=1

私的ポイント

UPXを知らなかった。

ja.wikipedia.org

解き方

ダウンロードしたバイナリを動かしてみます。好きな数字を聞いてくる系のやつ。

$ ./unpackme-upx
What's my favorite number? 111
Sorry, that's not it!

以前記事にした問題と同じっぽいです。

shinobe179.hatenablog.com

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してみる。