某チームでSECCON2018に参加しました。難しかった、そしてどの問題も重かった。国内決勝上位12チームに入れるかどうかは、スコアボードに国名でないから何番かわかんないねw期待しないで全裸で待ってる。101点¶zipにはパスワードがかかっている。flag.txtという訳でUnix通算秒がパスワードになってるはずですね。辺りだろうなと思ったんだけど、とりあえず現在時刻から過去に遡って総当たりしたら終わった。実行させるべく、まずはアーキテクチャを調べる。stripped0xdf...?こんなアーキあるのかなと思いましたが、チームの方がmoxieであることを教えてくれました。開発環境のVMイメージからVMイメージをダウンロードします。SECCON2015にも他種類のCPUアーキテクチャの問題が出ていました。ダウンロード後、以下で逆アセできます。./runme逆アセしたのは、ここに置いておきます。ret16と17の命令はmoxieに存在しません。この命令をnopとかで潰して実行すると以下が出力されました。RegA16と17の命令は実装してね(はあと)って事ですね。wikipedia:https://ja.wikipedia.org/wiki/XorshiftXorshiftは疑似乱数列生成法の1つである。Marsagliaが2003年に提案した。Googleさんが採用してるやつかな?Cの実装例が載っていました。15);}アセンブラを読む¶わからない命令はココで調べながら読みました。解りやすいアーキでよかった。こんな感じになっていました。私の理解を#以降に書いています。retという事で、以下の動きになっていることがわかりました。r00x1800と0x1820は1増やして、1の処理に戻る0x1800と0x1820あたりに、どんな値が入っているか調べておきます。0x00xorshift32ですが、乱数といってもシード固定の計算値なので、予め計算しておきます。いつの間にかひっそりと修正されていた件。