Visual Studio 2005 (プレイするには MSVCR80.dll が必要) を使用してコンパイルされたゲーム (Red Alert 3、クローズド ソース..) を「ハッキング」しようとしています。
対戦相手のユニット一覧を表示するプログラムを作ってみました。それに関しては、最初にシングルプレイヤーで実行できる自分のリストへの (静的) ポインターを見つける必要があります。
静的ポインターが本当に必要なものを指しているかどうかを判断できないため、いくつかの問題があります。
私はこの動作に気付きました: (どのアドレスが add_unit コードによって変更されたかを見ることによって):
- ユニットがまだ構築されていない場合は、新しいアドレスを作成し (ランダムに?)、値を 1 (そのタイプのユニットの数) に設定しますが、以前に追加されたユニットの他のすべてのアドレスは変更されません。タイプ A のアドレスは 0x12345678 であり、タイプ A のユニット数が示され、変更されず、ゲーム セッション全体でアクセス可能なままになります。
それで、他のアドレスは無効化されていませんか?
これは追加されたアドレスの例です。強調表示されているアドレスは最初に追加されたアドレスです:
これにはどのような種類の std::containers を使用できますか? 新しい要素を挿入するときにベクトルが他のすべてのアドレスを無効にするため、それは確かにベクトルではありませんか?
編集/更新: 今のところ、この構造を再構築することができました:
struct UnitsInfo
{
DWORD * someptr_1_to_other_UnitsInfo_struct;
DWORD * someptr_2_to_other_UnitsInfo_struct;
DWORD * someptr_3_to_other_UnitsInfo_struct;
int unkown_1;
unsigned int Type;
unsigned int Amount;
};
some_ptr は他のすべてのユニットアドレスを指しています。それがどのように機能するかを調べる必要があります。そうすれば、すべてを効率的に作成できます。