(ここで添付ファイルを見つけることができますhttps://github.com/R0IS/RCTF2021/blob/main/Recv/Harmony/Harmony/liteos)
xctf でHi!Harmony!
という問題に遭遇しました。なぜ xctf で強調するのかというと、xctf には添付ファイルがありません。問題の説明には次のように書かれています:
Hello, hackers! Have you ever heard of pangu, the creator of the world in Chinese mythology?
この文をじっくり考えてみました(おそらくそんなに長くはかかりませんでしたが)、この問題は添付ファイルを忘れた可能性があるかもしれないと思いました。この文が問題文そのものである可能性よりも高いです。
インターネットでファイルを見つけました。cutter や ida では risc-v を逆コンパイルすることはできませんが、アセンブリを見ることはできません。ghidra を使えば擬似コードを見ることができます。
エントリーポイントに入ると、非常に複雑で、システムのロードのように見えます。WP を見て、文字列を基準に関数を特定します。まったくもって忘れてしまいました。私は紙です。
関数内で大量の代入を見つけました。特定の変数の型を配列に変更する必要があるようです。右クリック。なぜオプションが表示されないのですか???まあいいや、じっくり見ます。。。
2000 年後。関数名を main に変更しましょう。なぜ未定義の関数と呼ばれているのですか??関数を定義するために右クリックします。OK、変数を変更できます。。。
ははは、彼はフラグを直接出力しています。フラグを自分で解読して出力する問題があるのか、とてもくだらないです。
擬似コードをコピーし、配列の代入部分を変更します。フラグには特定の形式があることを覚えています。WP を開いてみると、フラグが私のものとは異なるようです。OK、リトルエンディアンです。逆さまにします。
Vim のブロック編集に半日かかりましたが、ついに一行を逆さまにすることができました。出力します。
長さが合わない、数文字足りませんか?一部の文字が空白文字に解読されています。変数の型を編集するときに、配列の長さを正しく入力していなかったため、後ろのデータの代入が表示されなくなってしまいました。for ループから配列の実際の長さを推測する必要があります。
以上です。全体的には非常に簡単でした。おそらくマークされていない問題ほど難しくはありません。公式の解説にはシステムイメージの実行とデバッグのチュートリアルがあり、非常に学びに値するものです。(https://blog.rois.io/2021/rctf-2021-official-writeup-2/#Harmony)