Misc 200

backdoor CTF 2014 Misc 200 Writeup

BackdoorCTF_Misc200

スコットランドの家族にマイクロプロセッサのチップとメモリチップを送り届けようとしていたある軍隊が捕獲された。マイクロプロセッサのプログラムはここにある。

メモリチップは、メモリアドレス0x0031からの領域は103 110 117 95 775 107 105 108 108 95 97 99 116 101 100 95 114 97 119という状態であった。たとえば、メモリアドレス0x0032の値は110ということである。

実際にプログラムを見てみると、冒頭に以下のような記載があります。

; This is the default program that ships with
; every 8085 that we at Intel manufacture

これから、問題のプログラムはIntel 8085のプログラムであるということがわかります。Wikipediaの英語版のIntel 8085の項目を参照すると、Windows上で動作するエミュレータであるGNUSim8085が参照として示されているので、配布ページからダウンロードしてインストールします(日本語版ではなぜかAndroid版のエミュレータのリンクしかありません)。

プログラムは中央のペインにCopy & Pasteし、メモリの値は左下の”Memory”という部分を使って1つずつ設定します。以下のような状態になれば準備完了です。

BackdoorCTF_Misc200_1

“Debug” – “Step in”を選択すると保存先を問われますがそれはキャンセルします。6行目がハイライトされたら、あとは右下に”Program assembled successfully”と出るまでF5キー(= Step inのショートカット)を連打します。よく見ると、右側のメモリの値の一部が書き換わっているのがわかります。

BackdoorCTF_Misc200_2

書き換えられた結果を列挙すると、”103 117 110 95 107 105 108 108 115 95 99 97 100 101 116 95 105 110 95 119 97 114”となっているはずです。ASCIIコード表を参照しながらこれを文字列に置き換えると、”gun_kills_cadet_in_war”となります。ちなみに”cadet”とは士官候補生のことです。

問題文を改めてみると、flagは”md5(secret_msg)”とありますので、得られた文字列をmd5sumにかければ求めるflagを得ることができます。md5の最後にあるハイフンは、ファイル名を省略したという意味です(通常はファイル名を引数に取る)。

$ echo -n gun_kills_cadet_in_war | md5sum
f57f4973ce9eb1c07c71ad3be3752c79  -

ちなみに、変換する前の数列である”103 110 117 95 115 107 105 108 108 95 97 99 116 101 100 95 114 97 119″は、文字列化すると”gnu_skill_acted_raw”となりますが、単純に回答文のアナグラムになっているというだけで、この文章自体には大きな意味はないと思われます。

コメントする