Cheat Engineで暗号化された値を見つけよう!

今回はゲーム内で暗号化された値をどうやって見つけるか?その方法を手短に解説します。
使用するゲームは風来のシレン5plusです。


まずはゲーム画面上にあり1番目立つHP、もしくは満腹度から検索していくわけなんですが、普通に検索してもヒットしません。この時点でもしかしたら暗号化か何か対策されているかもしれないと思いました。このままでは手掛かりも何もないので、何かないかとゲームを操作してみると、、、ありました。


メニュー画面を表示すると右下に満腹度が表示されています。この状態で検索をかけてみましょう。

無事に見つけることができ、最終的に2つに絞りこめました。ただ、値を変更してみてもゲーム内に変化はありません。おそらく画面表示用の一時的な変数なんだと思います。
次はこの値に書き込んでいる命令を「Find out what writes to this address」で見つけます。値は2つありますが両方ともやってください。



全部で5つ命令がヒットしました。「Show disassembler」で逆アセンブリ画面を開き、周辺に怪しい命令がないか確かめます。5つの命令すべてです。場合によっては怪しい箇所にブレークポイントを仕掛け、レジスタやメモリの値も確認します。

そうすると1つありました。


逆アセンブラ画面

ShirenTheWanderer5plus.exe+162256(青い行)にブレークポイントを設定し、レジスタを確認するとedxに満腹度が格納されています。ではこのedxの値はどこから来たのでしょうか?少し上にさかのぼってみるとmov命令でeaxから代入されています。そしてそのすぐ上にCall命令、つまり関数を呼び出しています。この関数の返り値がeaxに格納されていて、eaxからedxに代入されたということです。
このことから、おそらくこの関数は暗号化された値を複合化しているんじゃないかと推測できます。

複合化関数を呼び出す
   ↓  
関数の返り値をedxに代入
   ↓
edxの値を画面表示用の変数に代入


ここから先はネタばれになるので皆さんでやってみてください。

Tips:
call ShirenTheWanderer5plus.exe+1EE3A0 <- この関数を調べてみよう!

Cheat Engine Luaでアドレスを大量に追加する方法

某掲示板で私が書き込んだものですが、需要があるかもしれないのでご紹介します。

最初のアイテムのアドレスが1000だとして次のアイテムのアドレスが1008、次が1010と等間隔に並んでいて大量にアドレスを追加する場合に便利なLuaスクリプトです。

画像

参考リンク

参考リンク先のコード1番下にある(画像の緑枠部分)
addMoreAddresses("Base Address", Amount Of Addresses you want, Offset)
この関数の引数を自分の好きなように設定する

第1引数
Base Address -> ベースアドレス。先頭になるアドレス。
第2引数
Amount Of Addresses you want -> 追加したいアドレスの数。
第3引数
Offset -> オフセット。例えばここを4に設定するとアドレスを4ずつずらしながら追加できる。
       1000 -> 1004 -> 1008 -> 100C

Memory View -> Ctrl + L でLua Engineを起動し、コードを貼り付け実行
これでチートテーブルにアドレスが自動で追加される

Cheat Engineがインストールできない場合の解決方法

Cheat Engine 7.4をインストールしようとすると以下のエラーが出たので解決方法をご紹介します。


インストール手順


左下にあるWindowsキーをクリック。


↑画像の状態で「アプリとブラウザー コントロール」と入力。「アプリと」まで入力すれば検索に引っ掛かるはずです。「」は必要ありません。


画像の赤枠部分を選択。


評価ベースの保護設定をクリック。


望ましくない可能性のあるアプリのブロックをオフに変更。

これでCheat Engineをインストールできるようになります。
インストールが終わればオンに戻しておいてください。

インストール時の注意点


余計なソフトがインストールされるのを防ぐため、必ず画像のように
Skip All を選択しましょう!