チート技術-その1
ちょうど20歳の頃、プログラム風にメモリを書き換えるMemProgというソフトを作りました
当時、チート系のソフトはいくつかあったのですが、それらのソフトは特定のアドレスに特定の値を書き込むということしかできず、現在HPの値を最大HPの値にするとか、20Byteおきにアイテムの個数を99個にするといったプログラム風のメモリ書き換えが出来ませんでした
そういうソフトを自分で作ってみたいと思い、半年くらい掛けて制作しました
今回はそのMemProgについて紹介したいと思います
MemProg
プログラム風メモリ書き換えソフト
大まかな機能はサーチ機能・メモリエディタ・改造コードの3つです
サーチ機能
よくあるメモリ検索機能です
メモリの検索範囲を設定して、数値を検索しアドレスを絞り込みます
例えばゲームでお金が1000Goldあるときに1000で検索し、お金を950Goldにしたあと950で検索を掛けると、お金のデータのアドレスを特定することができます
アドレス指定が32bitのため、64bitOSが主流になってきた現在では使えないソフトも多いです
32bit時代のゲームならまだ使うことができます
メモリエディタ
こちらもよくある16進数のエディタです
マーク機能・リアルタイム更新・ポインタジャンプなど使いやすさを重視した機能を付けてます
構造体編集機能も付けたかったのですが、技術力不足で断念
描画はライブラリを使わずに全部自前描画してます
見た目は完全にStirlingのパクリでs
今、同じものを作れと言われても作れないかも(情熱って大事)
改造コード
これがメインになるプログラム風の改造コード機能です
HPを最大HPに上書きするコードの例
HPに最大HPをコピーするだけで良いのですが、機能紹介のために複雑にしてあります
次がアイテムの個数を20Byteおきに99個にするコード
変数にアドレスを入れて、加算しながらアクセスするという手法を使います
代入式を作るのが面倒くさい人のために、C言語風に式を手入力することも出来ます(手入力演算)
mem[]がメモリアクセス、val[]が変数アクセスです
文字数・要素数に制限は無く、かなり複雑な式も入力することが出来ます
この手入力演算機能の実装にはかなりの時間を掛けてます
構文解析とか逆ポーランド記法とか1から学びました
そしてメイン画面で改造コードの実行管理をします
実演
実際にフリーゲームを使って実演してみたいと思います
HDDに入ってたElonaというゲームを題材に使用
まずプロセス選択でelona.exeを選択します
HPの値、29をサーチしましょう
サーチ範囲を00300000から、ほぼ全域にあたる7F000000に変更します
値を指定にチェックを入れ、右のエディットボックスに29を入力、サーチボタンを押します
該当データのアドレスがリスト上に列挙されます
次にモンスターに殴られるなどしてHPを減らしたあとに再びサーチします
するとアドレスが1箇所に絞られました
アドレスをダブルクリックするとメモリエディタが開きます
1A(26)が現在HPです
すぐとなりに最大HPの1D(29)があるのが分かりますね
試しに両方ともFF(255)に書き換えると、HPが255/255になるのを確認できます
ここでHPを1Dに戻し、改造コードを作ってみましょう
メニューからコードの追加を選択し、コード作成画面を出します
タイトルは何でも良いのですが、今回は”HPが5以下になったら完全回復とします”
常に値を監視するため、起動条件はタイマーにします
追加→条件式を選択し、次のように入力します
これはアドレス05E7130の値が5以下のとき、次行の式を実行するという条件式になります
OKを押し、次に、追加→代入式を選び、次のように入力します
これは、アドレス056E7130(現在HP)に05E7134(最大HP)の値を書き込むという式になります
OKを押すと次のようになります
これでコードは完成です
見やすくするためCtrl+→でインデントできます
OKボタンを押すとメイン管理画面にコードが登録されます
チェックを入れると、1秒おきにコードが実行されます(実行スパンはコード→コードの設定から変更可能)
敵と殴り合うとHPが減ってきます(HPが6以上なので回復しない)
もう一発殴られるとHPが完全回復します
こんな感じで、独自のルールをゲームに付与することができます
この技術の本質
チートなんて言うと、ゲームをつまらなくする上、真面目にプレイしてる人からも批判されたりと、とても印象が悪いものですが
この技術の本質は、他のアプリの情報を自分のアプリに取り込むことにあります
プログラミングをする中で、他人が作った便利なライブラリを組み込んで自作プログラムを作ることができますが、出来上がったプログラムの内部情報を自分のプログラムの入力として使うようなことは出来ません(CUIアプリは別ですが)
あのソフトは便利なんだけど、こんなときに通知してくれる機能があればなあ、とか
ちょっとした改良なんだけど業者にソフト更新を依頼すれば何百万円も掛かってしまうんだよなあ、とか
普通ならできない既存プログラムを利用した応用プログラムの制作が、このチート技術を使えば可能になります
外出先のスマホから、起動中のアプリのステータス監視をするといった使い方も出来るかもしれませんね
ちょっとワクワクしませんか?
次回は、自作のプログラムから他プログラムのメモリにアクセスする方法について解説したいと思います(気力があれば)
最近のコメント