RSFPWS - Invulnerable

RSFPWS - Intercepted と同じゲームのプログラムと、そのゲームで用いるサーバのIPアドレスとポート番号が与えられた。
ゲームは一人称視点で移動ができるもので、その中に以下のような入ると5ダメージが入るという箱と、 入るとHP分のダメージが入るという箱があった。

A game program (same as one for RSFPWS - Intercepted) and a pair of an IP address and a port number for the game was given.
In the game, we can move around in first-persom view. There was a box entering to which will result in 5 damage, and a box entering to which will result in damage for all HP.

the boxes

Cheat Engineをアタッチし、以下の手順で操作を行った。

  1. 初期状態でHealth: 100と表示されているので、 Scan Type を Exact Value 、Value Type を 4 Bytes 、Value を 100 にして First Scan を押す。
  2. ゲームを操作して5ダメージが入る箱に入り、Healthを95にする。
  3. Value を 95 にして、 Next Scan を押す。
  4. アドレスが1個だけ見つかるので、右クリックして Browse this memory region を選択する。
  5. メモリダンプの該当の部分を右クリックし、Data Breakpoint → Break on Write を選択する。
  6. ゲームを操作して、入るとHP分のダメージが入る箱に入る。
  7. ブレークポイントに引っかかって止まり、メモリ上のHealthの値が0になっているので、適当な正の値に書き換える。
  8. Memory Viewer の Run ボタンを押す。

すると、入るとHP分のダメージが入る箱の横の文字列がflagに置き換わった。

I attached Cheat Engine to the game process and performed following operations.

  1. At the initial state, seeing Health: 1000 displayed, set "Scan Type" to "Exact Value", "Value Type" to "4 Bytes", and "Value" to "100". After that, press the "First Scan" button.
  2. In the game, enter the box to cause 5 damage and change the Health to 95.
  3. Set "Value" to "95" and press the "Next Scan" button.
  4. Only one address is found. Right-click the address and select "Browse this memory region".
  5. Right-click the value in the memory dump and select "Break on Write" in "Data Breakpoint".
  6. In the game, enter the box to call all-HP damage.
  7. The breakpoint gets hit and the execution pauses. At this point, the value of Health on the memory is zero. Edit the value to some positive value.
  8. Press the "Run" button on the Memory Viewer.

This resulted in the string next to the all-HP damage box changing to the flag.

the flas appeared

Memory Viewer の Search → Find Memory を用い、Unicode の Text ractf{を検索すると、 メモリ上にflagの文字列があるのが見つかった。
ここを選択し、File → Save Memory Region を用いることで、flagの文字列を得ることができた。

I searched for a Unicode Text ractf{ via "Find Memory" in the "Search" menu on the Memory Viewer, finding the string of the flag on the memory.
i obtained the string of the flag by selecting the string and using "Save Memory Region" in the "File" menu.

ractf{Y0uB3tt3rN0tHav3De0bfusc4ted...}

RACTF 2021