Useful Machine

添付ファイルの確認

vm.pyを眺めてみると,独自言語で実装されたプログラムを実行するプログラムとわかった.

そのプログラムコードはprogramというバイナリファイルに書かれているらしい. バイナリだからリバースするならもうちょっと読みやすくしたいな...

というわけでGPTにPythonに変換するコードを書いてもらった

それで出力されたPythonコードが以下になる.

コードを眺めてみると,1パターンのコードが繰り返されていることが判明. 多分文字数の分だけ繰り返されている.

最後の部分を見ると

つまりmem[0]が0でない数字ならmem[0]になってフラグと一致.

その前の行を見ると,mem[0] * mem[1]だから,mem[1]の結果が1文字だけの比較結果. mem[0]が今までの結果を累積しているメモリだろう.

なんとかmem[0] != 0でない値にするには,プログラム内のmem[0] * mem[1]の演算が行われるときすべてにおいて,mem[1] != 0である必要がある.もし一度でもmem[1] == 0になってしまうと,フラグと一致しないといえるであろう.

てことは,mem[0] != 0(mem[1] != 0でもいい)がtrueになるstepの回数をキーに貪欲法でさがせばOK よってvm.pyを以下のようにいじった.