あなたが勉強しているプログラムに大きく依存し、あなたの人生を困難にする方法があれば著者が出て行ったかどうかを正確に説明するのは少し難しいです。私はこれを一度だけ行ったことに注意してください。しかし、小さなアセンブリしか知りませんでしたが、それは合理的にうまく機能しました。
おそらく、値がmalloc/newの呼び出しを使用してヒープに割り当てられ、レベルを変更するたびにそれらがクリーンアップされ、別の場所に再割り当てされることが考えられます。したがって、プログラムのアセンブリコードを見て、mallocによって返されたポインタがどこに格納されているかを調べ、ポインタの内容を確実に読み取って、探している値を見つける方法を見つけ出すことです。
まず、OllyDbgのようなデバッガとアセンブリの基本知識が必要です。その後、検査する変数に読み書きブレークポイントを設定して開始します。変数がどこにあるのか正確には分からないと言ったので、実行中にプロセスを一時停止し、プログラムのメモリでその値を検索する必要があります。うまくいけば、関数呼び出しやローカルでの使用のためのコピーであるかもしれないので、スタックに入っているものは何かを調べるためにいくつかの結果しか得られないでしょう。
ブレークポイントが設定されたら、ブレークが発生するまでプログラムを実行してください。コードを見て、変数がどのようにアクセスされているか調べるだけです。それがパラメータとして渡されている場合は、関数の呼び出しサイトを調べてください。それがポインタを介してアクセスされている場合は、それを書き留めて、ポインタの検査を開始します。それがポインタのオフセットとしてアクセスされている場合、それはデータ構造の一部であることを意味するので、それを記録し、他の変数の検査を開始します。等々。
滞在はあなたの変数に焦点を当て、あなたは最終的に2つのいずれかであることができ、ルートを見つけるまで、単にコードを調べておいてください。
静的アドレスを持つグローバル変数を。これは、データ構造を確実に処理するために使用できる静的アドレスがコードに直接ハードコードされているため、最も簡単なシナリオです。
スタック割り当て変数。これは手間がかかり、このシナリオを確実に処理する方法が完全にはわかりません。そのアドレスは、ほとんどの場合、スタックの先頭から同じオフセットを持つ可能性がありますが、そうではない可能性があります。スタックを歩いて、対応する関数とそのパラメータを見つけることもできますが、これはちょっと難解です。
あなたはアドレスを持っていたらやって残っているすべてはあなたが見つけた情報を使用して、変数を見つけるためにReadProcessMemoryを使用しています。例えば、あなたが持っているアドレスがオフセット0x40で燃料値が格納されているデータ構造体へのポインタを表しているなら、アドレスの値を読み込み、0x40を加えて結果をもう一度読み取らなければなりません。
アドレスは、実行ファイルが変更されない限り、有効であることに注意してください。それが再コンパイルまたはパッチ適用されている場合は、最初からやり直す必要があります。私はあなたがプログラムを起動するたびにアドレスを変更するかもしれないWindowsのASLRについて注意する必要があると思います。
コメントボックスが小さすぎるため、ここに入力してください。
esp
に定数を加えた場合、これはパラメータでありローカル変数ではないと考えられます(呼び出し規約のレイアウトを確認して確認してください)。その場合、プログラムが呼び出し元に戻ってパラメータがどのように設定されているかを把握し(呼び出し命令の前にプッシュ命令を探して)、そこから探索を続けます。私がこれをしたとき、私はデータ構造へのグローバルポインタを見つける前に、スタックを1〜2回巻き戻さなければなりませんでした。
また、esi
レジスタはスタックに関連していません(私はlook it upでした)ので、どのように設定されているか確認します。それはデータ構造のアドレスを含み、定数は変数へのオフセットです。レジスタがどのように設定されているかを把握すれば、ポインタにもっと近くなるでしょう。
最初のインスタンスでどのようにそれらを探しますか? –
"住所の再配置"とはどういう意味ですか? – foxy
あなたは他の人からのアドレスを見つけます(これはダイナミックであると考えています)。または、メモリ内でその値を検索します。あなたのお金は50,000ですか?それは無署名intだと思いますか?メモリ内で50000を検索し、正しいものを探します。それらを再配置することによって、私は住所の変更について話しています。お金へのポインタが各レベルを変更し、プログラムを開始するたびに変更されます。 –