BuringStraw

BuringStraw

被Harmony耍得団団轉

(ここで添付ファイルを見つけることができますhttps://github.com/R0IS/RCTF2021/blob/main/Recv/Harmony/Harmony/liteos

ランダムにHi!Harmony!という問題に出会いました、xctf で。なぜ 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 に変更しましょう。なぜ undefined function と呼ばれているのですか?右クリックして関数を定義します。OK、変数を変更できます。。。

ははは、彼はフラグを直接出力しています。なぜ問題が自分で復号化してフラグを出力するのですか、とてもくだらないです。

擬似コードをコピーし、配列の代入部分を変更します。フラグには特定の形式があることを覚えています。WP を開いてみると、フラグが私のものとは異なるようです。OK、リトルエンディアンです。逆さまにします。

Vim のブロック編集に苦労しましたが、ついに一行を逆さまにすることができました。出力します。

なぜ長さが合わないのですか、数文字足りませんか?一部の文字は空白文字に復号化されます。変数の型を編集するときに、配列の長さを正しく入力しなかったため、後ろのデータの代入が表示されなくなります。for ループから配列の実際の長さを推測する必要があります。

以上です。全体的には非常に簡単でした。おそらくマークされていない問題ほど難しくはありませんでした。公式の解説にはシステムイメージの実行とデバッグのチュートリアルがあり、非常に学びに値するものです。(https://blog.rois.io/2021/rctf-2021-official-writeup-2/#Harmony)

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。