【うさみみハリケーン】環境依存型変動アドレスを調べてみる【解析】

アザラシです。久しぶりに解析系の記事です。
今回はお金のアドレスなどをせっかく調べ、いじれることを確認できたけど
PC再起動やゲーム再起動後などに実行したらうまくいかない場合があると思います。

今回はそれに対応するための解析をしてみたいと思います。

以下解析記事のテンプレ

うさみみハリケーンの関連記事はチートを推奨する記事ではありません。
趣味及び知識の為の解析記事です。
オンラインゲーム等の不正行為を助長する目的は一切ありません。
記載内容を実行し、電子機器に損害を与える現象及び事例。
違法行為による起訴、逮捕、書類送検、賠償等でユーザー、及び対象の企業に不利益を被った際、
アザラシ(当ブログ アザラシ備忘録管理者)は責任及び賠償などの一切を負いません
疑問点等ありましたらコメントにてお返事いたします。
2020年03月01日 最新版

₍₍⁽⁽ 💻 ₎₎⁾⁾
見て!パソコンが踊っているよ
かわいいね


💥
みんながオンラインゲームや迷惑のかかるところで、チートや解析をしているので
ゲーム会社に迷惑が掛かってしまい、破壊されてしまいました。

お前のせいです
あ~あ

ニコニコ大百科 : 見て!○○が踊っているよ

ということです。理解できる人のみ、記事をお読みください。

0.準備するもの と 参考リンク

いつも通りぱちゅコン!を使います。
とりあえずお金のアドレスを調べていきます。
お金のアドレスを調べる方法などは過去の記事にて掲載していますので、過去記事からどうぞ。
【うさみみハリケーン】うさみみハリケーンを使ってみよう【お触り編】

他にも、記事を見ながら実践してくださる方がいるのであれば、
今回はメモ帳などを用意しながら進めていくと便利かもしれません。
アドレスなどをメモしていきますので。

参考リンク : 基礎用語 環境依存型変動アドレス

1.お金のアドレスを見つけた

今回お金のアドレスを見つけましたところ、
0x0CD71C84
に格納されていることがわかりました。

一旦今回のお金のアドレスをメモに記載します。

今までであれば、これでお金の数値いじってお金が変わった!おっけ~!でしたが
ゲームを再起動しても、お金のアドレスをいじれるようにしたいのでブレークポイントを仕掛けます。
仕掛けた後に数値を変動させ、出力されたログのEIP付近を逆アセンブルします。

逆アセンブルについては過去の記事を参考にしてください。
【うさみみハリケーン】うさみみハリケーンをつかってみよう【逆アセンブル編】
それではお金のアドレスにブレークポイントを仕掛けます。

クリックすると大きいサイズでみれます

はい、ブレークポイントを仕掛け、数値を変動させてログが出ました。
EIP は 0x00448858 でした。
今回この出てきたログをメモ帳にコピーしてください。後ほど使います。

このようにコピーしました。
では次はEIP付近を逆アセンブルします。

アドレス移動をしたら、対象のアドレスに栞機能でマークを付け、
前後を大まかに選択して 選択範囲を逆アセンブル します。
早速逆アセンブルをします。

逆アセンブルをし、EIP部分を確認しました。
EIPの1行上が減産処理となっています。今回はここからがようやくスタート地点です。
何かうまくいかなかったらもう一度過去記事なども参考にしながらやってください。

2.環境依存型変動アドレスを調べよう!

はい、本当にここからがスタート地点ですがぱちゅコン!は割と簡単に見つかるんで
実はほぼもう終わりに近づいてます。
一旦調べるにあたってどのような手段を取るのがいいのかを参考リンクから紹介します。

これら環境依存型変動アドレスの解析においては、パラメータ等のアドレスにデバッガで読み書きまたは書き込みブレークポイントを設定してブレークさせ、ブレーク箇所周辺の逆アセンブルコードリストを読解してプログラムの処理上どのようにアドレスを管理しアクセスしているかを把握するというアプローチが基本となります。この際、逆アセンブルコードリスト上で処理をさかのぼって観察し、特にパラメータ等のアドレスを指定するためにレジスタに格納される値の出所に注目して下さい。また、パラメータ等のアドレスが含まれるメモリブロックの、API関数による確保処理とその後のデータ格納処理を追いかけていくというアプローチもあります。

基礎用語 環境依存型変動アドレス

ということで、太字で強調されている部分が先ほどやった部分になります。
ここからは、毎回アドレスが変動してるけどなんで~?どうして~?という部分を
突き詰めていく部分になります。

では、実際に調べていきます。
今回は先ほど逆アセンブルしたコード一覧で、減算処理している部分に着目します。
減算処理している部分のコードは

00448852 SUB [EAX+241C],EDX

となっていました。こちらもメモします。
で、このコードは アドレス EAX + 241C に格納されている値を EDX で引け。
と書かれています。EAXってなんだ!ということで、先ほどメモしたブレークポイントのログを見ます。

EAX = 0CD6F868 となっていました。
この値に 241C をすると CD71C84 となります。
この値は、お金のアドレスですね。

で、このEAXという値どっから来たんだよ。という話です。
次はレジスタ EAX にいつこの値が格納されたのか調べますので
逆アセンブルコード一覧の減算処理より上の行を調べていきます。

見ていくと少し上の 0x00448844 の処理が
MOV EAX,[479648]
となっています。あからさまに怪しいですね。なので早速 0x479648 のアドレスを確認しに行きます。

現状メモ

で、飛んできました。ここが 0x479648 です。
4byteでみると 0CD6F868h が格納されているようです。
そうです、これがEAXに格納されている値です。

たぶんほかのプログラムだったりゲームだったりすると、もう少し難解になっている可能性がありますが
あっさり見つかってしまいました。このアドレス格納値 + 241Ch をすることで、
お金のアドレスをいじれるようになります。

一応この値で本当に正しいのか?ということを確認するために、
ゲームを再起動、もしくはPCを再起動後ゲーム起動して
アドレスの値を確認し、それに +241Ch をするとお金の値になるか確認します。

2.1ゲーム再起動

では、再度調べてみます。先ほど調べた通り、お金のアドレスにたどり着くためのアドレスを格納している場所を見つけているので、 0x479648 を見に行きます。
ゲーム再起動してもアドレス変わらない場合は一度パソコンを再起動してきてください。
あとゲームの仕様上、お金のアドレスはwave待機画面まで行かないと数値が格納されません。ご注意

今回は 0CD4F868h でしたので、前回とは値が変わっていますね。
(ゲーム再起動前は 0CD6F868h )
ではこの値に +241Chしますと、

CD51C84h となりました。このアドレスを確認しに行きましょう
0xCD51C84 を確認しに行くと、

7D0hが格納されていました。これを10進数に直すと・・・

2000です!よっしゃあ!環境依存型変動アドレスを打ち破ったぞー!!
一応心配なので、ゲームでお金を減らしてみましたところ、問題なく減算されていました!
イエーイ!

いやいや、確かにお金のアドレスを確実に見つけることはできたけどさ
改造コードとかでこれちゃんと使えるようになるんですか?という疑問があると思います。
うさみみハリケーンでは、ポインタ指定ができるんです。

*450000>0100-0F27
ポインタアドレス450000のダブルワードの値に100h加算した値を開始アドレスとして書き換え

参考リンク : 改造コード 書式と使用例

つまりは、
*479648>241C-FFFF
とすれば お金のベースアドレスが格納されている部分 + 241C に対して改造コードを実行できます。
早速実行してみます。

クリックで大きな画面になります。

これが・・・

こう!できてます!成功ですね~
ほかの処理に関しても同じような方法をとっているのか今後確認してみたいですが
今回はお金のアドレスだけでも環境依存変動に対応できたので満足しました。

3.終わりに

結構あっさりできてしまったので、拍子抜けでした。
ほかのソフトウェアではもっと難解になっていると思うのでいろいろ調べてみたいですね。
今回の記事はこれにて終了です。