Kingtaker

Webブラウザ上でキャラクターを動かして規定の手数以内で王冠を集めるゲームのURLが与えられた。

Firefoxでゲームを開き、進めた。
その結果、1面と2面はクリアできたが、3面は手数が足りなくなり、クリアする方法がわからなかった。

そこで、Cheat EngineをFirefoxのプロセスにアタッチし、 表示されている残りの手数を 4 Bytes でサーチした。
そして、1歩動いて残りの手数が変わった所で、さらにサーチを行った。
ここで候補が無くなったら、アタッチするプロセスを変えてサーチをやり直した。
候補が残ったら、この値を99などに書き換えることで手数を増やすことができ、3面をクリアできた。

4面は、手数が十分あっても通常の移動ではクリアできない構造だった。
3面の時と同じプロセスにアタッチした状態で、4 Bytes の Unknown initial value でサーチを行い、
右に動いて Increased Value のサーチ、左に動いて Decreased Value のサーチを行うと、 候補を10個程度に絞り込むことができ、1マス動くと値が32変わる様子がみられた。
これをもとに、残りの手数に近いアドレスの値を適切な値に書き換えることで、 キャラクターを移動させ、クリアすることができた。

4面をクリアすると、flagが表示された。

An URL of a browser game in which we control a character to correct crowns within pre-defined number of moves was given.

I opened the game in Firefox and played the game.
I cleared the 1st and 2nd stage, but I couldn't clear the 3rd stage due to lack of moves.

I attached Cheat Engine to a Firefox process and searched for the shown number of moves left (4 Bytes).
Then, after making one move and making the number of moves left change, I performed the search again.
When no candidates are left at this point, I changed the process to attach and searched again.
When there is a candidate left, I changed the value to, for example, 99. This lead to increasing the number of moves and I cleared the 3rd stage.

The 4th stage wasn't able to clear only using normal moves even if there were enough number of moves.
Keeping attacheing to the same process as I used for the 3rd stage, I first searched "Unknown initialvalue" (4 Bytes).
Then, I searched "Increased Value" after moving right and "Decreased Value" after moving left. As a result, there were around 10 candidates left and the value changed by 32 by one-block move.
I cleared this stage by changing the value whose address is near the number of moves left to proper value so that the character moves.

The flag was displayed when I cleared the 4th stage.

CakeCTF{M4yb3_I_c4n_s3rv3_U_inst34d?}

CakeCTF 2021