結論でいうとキレイな解法がよくわからない(´・ω・`)
write up的な何かなのでメモ程度に・・・
フラグを出す実行ファイルがあるのだが、プログラム(elfファイル)作成者が出力する関数を書き忘れてしまったらしい…
問題文を見ると出力する関数を書き忘れたとのこと
とりあえず指定ののファイルをfileコマンドで見てみる
rev100: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=f94360edd84a940de2b74007d4289705601d618d, not stripped
ELFファイルってのは分かるけどそれ以上のことは読み取れない・・・
ELFだしとりあえず実行してみる
root@kali:/home/kuratsuka/Documents# ./rev100
cpaw{}
う~んcpaw{}としか表示されない・・・
cpawって文字列が見える・・・
邪魔な情報も多くフラグを絞りきれないので、他の人の解法をググるとstringsコマンドとやらを実行するらしい
##stringsコマンドで試してみる
stringsコマンドを調べてみたところざっくりファイルの可読部分を表示させるコマンドらしい
とりあえずstringsコマンドを実行してみる
D$Fcpawf
D$J{
D$ y
D$$a
D$(k
D$,i
D$0n
D$4i
D$8k
D$<u
D$@!
T$Le3
[^_]
※上記はstringsコマンド結果一部抜粋です
縦で読んでみると「yakiniku!」って文字が見える、そして答えを言うとcpaw{yakiniku!}
他のサイトを見ると大体がここで終わる、しかしこれでいいんだろうか?
"D$"とかは共通しているから削除してもいいんだろうけど一体どこまで文字を削除すればいいんだろうか?
もうちょっとキレイに解ける方法はないのかな??
##IDA Freeに突っ込んで見るとフラグ部分がきれいに取れる?
ReversingにはIDA、古事記にもそう書いてある
demo番だと30分?しか使えないそうなのでFREE版をダウンロードして対象のファイルを解析してもらう
movとかそれっぽいの見るの基本上納のCASLⅡ以来だ・・・
この7Bh、79hとかが文字コードっぽい気がするのでとりあえずググって見る
文字コード表 - しなぷすのハード製作記
https://synapse.kyoto/lib/MGLCD/CharacterCode/page001.html
参考にさせていただいたのは上記サイト
この文字コードはASCIIコードらしい
"[esp+xxx]"って所が"D$J"とかのyakiniku!の前につく文字っぽいので、その右側の文字を変換していく
| 7Bh | 79h | 61h | 6Bh | 69h | 6Eh |69h |6Bh|75h|21h|7Dh|
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| { | y |a|k|i|n|i|k|u|!|}|
※最後の"}"先頭に0A付いてるけど制御文字っぽい?
上記から{yakiniku!}は読めるけど問題は最初の"77617063h"部分
これが答えからするとここの部分が"cpaw"って書いてあるはずなんだけど・・・
##77617063h部分はリトルエンディアン?
"cpaw"自体をASCIIコードに変換すると"63 70 61 77"となり、解析したコードは逆に入ってることが分かる
リトルエンディアンとは何? Weblio辞書
https://www.weblio.jp/content/%E3%83%AA%E3%83%88%E3%83%AB%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
>例えばIntelのマイクロプロセッサでは8086からPentiumシリーズまでリトルエンディアン方式で記録されるが、
同問題に対してリトルエンディアンなので注意してって書いているサイトを見つけた
調べてみると先程のURLにあるWeblio辞書にプロセッサとリトルエンディアンの関係が記述されている
最初のfileコマンドで"Intel 80386"と出力されたがこの80386は8086と同じくx86系なので命令セットが同じ、
つまりリトルエンディアンが採用されているのだ
みんなここまで覚えてCTFしてるの!!??
##まとめ
IDA Freeの解析のおかげである程度綺麗にフラグは出せたけど
問題文にある通り出力する部分を追記して、ファイルを実行したら"cpaw{yakiniku}"と出力するようにしたかった・・・
ここは完全に技術力不足・・・(´;ω;`)