Cheat Engine ヒント
スキャン、ポインタ、値の型、Lua、Mono、ワークフローに関する実践的なヒントです。初心者向けと上級者向けの内容が混在しています。
スキャン&値
- 複数の値の型を試す。 4 Bytes で数百万件やゼロなら、Float、Double、8 Bytes を試す。体力・お金は 4 Bytes か Float が多い。
- 型が不明なときは「すべて」。 遅くなるが、ゲームの格納方法が分からないときに有効。
- 次のスキャンで絞る。 ゲーム内で値を変え(ダメージ、ゴールド消費など)、その都度次のスキャンでリストを扱いやすい数まで減らす。
- 不明な値の手順。 数値で入力できない値(例:「?」)は不明な初期値のあと、ゲーム内で変えたら「増加した値」「減少した値」「変更された値」を使う。
- 表示値と格納値が違うことがある。 ゲームによっては値が×2や×8で格納されている。入力した数値が一致しない場合は Wiki の「カスタムスキャン」「乗算された値」のチュートリアルを参照。
ポインタ&安定性
- 重要な値にはポインタを。 アドレスを見つけたらポインタスキャンで再起動後もチートが動くようにする。時間とディスクを使うので、まずは「最大レベル」を小さくして試す。
- ポインタ結果をフィルタする。 ポインタスキャン後、「読み取り可能でなければならない」「ポインタは静的でなければならない」で絞ると不良結果が減る。ゲーム再起動後に再スキャンして確認。
- テーブルはこまめに保存。 ポインタスキャンや長時間の作業で落ちると進捗が消える。.CT を定期的に保存する。
コード&AOB
- コード注入には AOB を。 スクリプトでアドレスを直書きすると更新で動かなくなる。AOB(バイト列)でコード位置をパターン検索すると、パッチ後も動きやすい。
- AOB は一意に。 パターンが1箇所だけに現れるよう十分なバイト数を含める。必要なら不明なバイトは ?? にする。
- アドレスに書き込む命令を検索。 アドレスを右クリック →「このアドレスに書き込む命令を検索」。ゲーム内で値を変えると CE が命令を表示。コード注入に便利。
Mono&Unity
- まず Dissect Mono。 Mono ゲームでは Mono → Dissect mono などでクラス一覧を出し、「Player」「Health」「GameManager」などでクラス・フィールドを探す。
- インスタンスを検索。 クラスを見つけたら「クラスのインスタンスを検索」や Mono ヘルパーでオブジェクトのインスタンスを取得し、フィールドから目的の値を探す。
Lua&自動化
- Lua で自動アタッチ。 プロセス名を待ってゲーム起動時に自動でアタッチする Lua スクリプトを書ける。
- Lua 拡張フォーラムを確認。 多くの完成済み Lua スクリプトや拡張が共有されている。使用前にコードを読むこと。
パフォーマンス&安全
- スキャン範囲。 大きなゲームでは設定でスキャン範囲を制限すると速くなる(値がメインモジュールにあると分かっている場合は大きな DLL 領域を除外など)。
- 信頼できない .CT をそのまま開かない。 Lua を実行しシステムを変更する可能性がある。まずテキストエディタで開くか、信頼できる人からのテーブルだけ使う。
- 管理者実行は必要なときだけ。 アタッチに必要なゲームもある。終わったら CE を閉じてリスクを減らす。
ワークフロー
- 内蔵チュートリアルから始める。 少なくともステップ 1~5 を完了し、初回スキャン・次のスキャン・値の変更を理解する。
- アドレスに名前を付ける。 アドレスリストで説明をダブルクリックし、わかりやすい名前(例:「プレイヤー HP」)を付ける。
- テーブルでチートをグループ化。 アドレスリストでグループ・サブグループを使い、項目が多いときもテーブルを見やすくする。
- ポインタスキャン前に保存。 ポインタスキャンは巨大プロセスで落ちることがある。先に .CT を保存してアドレスを失わないようにする。
- 「書き込み可能」で絞る。 スキャンオプションの「書き込み可能」で、ゲームがそのアドレスに書き込む必要があるため結果を減らせる。
- 座標は Float が多い。 X/Y/Z 位置は Float や Double で、スキャン間にゲーム内で移動して探す。
- .CT をテキストエディタで確認。 ネットのテーブルを読み込む前に開き、<LuaScript> や不審なコードがないか確認する。
- メインメニュー前にアタッチ。 CE を検知するゲームでは、プロセス開始直後(アンチチート読み込み前)にアタッチすると動くことがある。