2

グローバル ポインターからゲームのエンジン バージョンを取得しようとしていますが、これはかなり初めてです。これは私が見つけた非常に小さな例です...

http://ampaste.net/mb42243

そして、これは私が取得しようとしているものの逆アセンブリです。ポインター (gpszVersionString) は強調表示された行 (5 行目) です。

http://ampaste.net/m2a8f8887

だから私が見つける必要があるのは、基本的に私が見つけたサンプルアプローチを使用してそれを取得することです.基本的に関数の最初の部分を署名し、その行へのオフセットを見つける必要がありますか?

お気に入り...

メモリ署名 - /x56/x8B/x35/x74/xD5/x29/x10/x68/x00/xA8/x38/x10 次に、その行に到達するためのオフセットは? (オフセットを見つける方法がわからない)

4

1 に答える 1

5

これを直接行うことはできません。プロセスのアドレス空間は、プロセスに完全に固有のものです。あるプロセス0xDEADBEEFでは「Dog」を0xDEADBEEF指し、別のプロセスでは「Cat」を指すことができます。別のプロセスのアドレス空間にアクセスできるようにするオペレーティング システム コールを作成する必要があり、その場合でも推測する必要があります。多くの場合、その場所はアプリケーションの実行ごとに異なります。通常、プロセスの実行時のレイアウトがすべての場合にどうなるかを予測することはできません。

Windowsを使用していると仮定すると、(編集:すべての場合にAとBは必要ありませんが、通常は必要です)A.管理者になり、B.プロセスのSeDebugPrivilege を取得し、Cを開きますprocess へのハンドル、次に D. ReadProcessMemory / WriteProcessMemoryを使用して、必要なことを行います。

それが役立つことを願っています:)

編集 2: 逆アセンブラから取得したアドレスを見ているようです。その場合、そのアドレスの値を使用することはできません。イメージは実行時に再ベース化される可能性があり、そこの値は完全に異なることになります。特に、アドレス空間レイアウトのランダム化をサポートする Windows の最近のバージョンでは。

于 2010-02-25T23:51:39.130 に答える