pingというチームで参戦しました。自分はbinaryの300しか解けず。。
Reverse-Engineering Android APK 1
apkの中身を見る必要がありそうな問題。
apktools入れたりしていじる。
http://ibotpeaches.github.io/Apktool/install/
( ՞ਊ ՞) :~/dev/ctf/rps $ ./apktool d rps.apk I: Using Apktool 2.0.2 on rps.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: /home/kubo39/apktool/framework/1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files...
なんかいろいろ /rps 以下にできた。
lib/libcalc.so がなんか怪しそう?
https://github.com/pxb1988/dex2jar
d2j-dex2jar: Convert .dex file to .class files (zipped as jar)
適当にダウンロードしてきて全.shに +xして実行。
$ sudo ./dex2jar-2.0/d2j-dex2jar.sh classes.dex rps.apk --force
デコンパイラ(jd-gui)がなんか動いてくれないのでもう一人のバイナリアンに任せて解いてもらった。
Exec dmesg
$ file core-current.iso core-current.iso: # ISO 9660 CD-ROM filesystem data 'TC-Core' (bootable)
$ qemu-system-x86_64 -cdrom core-current.iso
dmesgとかいってるんでdmesgみるか。
$ dmesg dmsg: applet not found $which dmesg /bin/dmesg $ls -ll /bin/dmesg /bin/dmesg -> busybox
BusyBoxかー。
これは dmesg が exec >/dev/kmsg 2&>1
であることを知ってるかの知識問題。
cat /dev/kmsg | grep SECCON
でてきとーにやったらフラグGET。
どうでもいいが busybox のシェルはashを使っているらしい。
Individual Elebin
最初と最後のバイナリはstringsでいける。
1.bin は FreeBSDバイナリで SECCON{AaA
11.bin は eAaAq}
とあったので、まあこれだろう。
2~10の文字列をつなげるかんじ?
雑に qemu-arm-static とかかけてみたけど実行できず。
そういえばgdbをビルドしたときの成果物にはエミュレートして実行するするための *-run が生成されるのでそれ使ってやってみる。
wget http://ftp.gnu.org/gnu/gdb/gdb-7.7.1.tar.bz2
以下に各binary向けのクロスコンパイルの手順をのせておく。
2.bin
$ ./configure --target=m6811-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/m6811-elf-run 2.bin B( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
2.bin => B
3.bin
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/v850-nec-elf-run ./3.bin i( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
3.bin => i
4.bin
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/m32r-renesas-elf-run 4.bin N( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
4.bin => N
5.bin (Renesas SH)
$ ./configure --target=sh-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/sh-elf-run 5.bin program stopped with signal 7. ( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
BUS Error. アライメントっぽい?
これgdbとかじゃ無理なのかな.
これ64bitじゃん...
$ ./configure --target=sh64-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/sh64-elf-run 5.bin 12345678( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
5.bin => 12345678
6.bin
$ ./configure --target=sparc-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/sparc-elf-run 6.bin 90abcdef( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
6.bin => 90abcdef
7.bin (Motorola RCE)
これアーキテクチャよくわからなかったので --target=mcore..
にしたりいろいろためしたけどダメ。。
8.bin
$ ./configure --target=cris-axis-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/cris-axis-elf-run 8.bin AW( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
8.bin => AW
9.bin
$ ./configure --target=avr-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/avr-elf-run 9.bin 3a5d37a3( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
9.bin => 3a5d37a3
10.bin
$ ./configure --target=arm-elf --prefix="$HOME/opt/cross"
( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $ $HOME/opt/cross/bin/arm-elf-run 10.bin 8a0d28f( ՞ਊ ՞) :~/dev/ctf/elebin/Individual_Elebin $
10.bin => 8a0d28f
SECCON{AaABiN1234567890abcdef AW3a5d37a38a0d28feAaAq}
まではいけたんだけどな。
5.binが64bitじゃんてのきづくのが遅くて sh-elf-runとかでBUS ERRORになってなんでじゃー、というので時間浪費したのがでかかった。。まあ7.bin解けなかったわけですが。。
解答みるとやりかたは正しかったぽいので悔いが残る。
雑感とか流れとか
CTFは2回目だったけど、前回はだいぶだれてたというかtirviaくらいしか挑戦してないので、まあ今回はじめてみたいなものだった。
流れとしては、当日うちの会議室に集まって、自分はbinaryのapkの問題をもう一人のバイナリアンととりかかった。途中でExec dmesgが出てきたので自分はそっちを解いた。
途中チャンピオンシップで広島の優勝見届けたりごちうさとアスタリスク観たしたあと、飲みに行くぞ!となったので再度合流して、飲みから帰ってそのまま終了まで Individual Elebin やってみたけど、まあダメ。。みたいなかんじ。
集まってごにょごにょなんかやるのは楽しいのでまたやりたいですね。