2

Win32 プロセスにフックできれば、次のことができるでしょうか。

  • プロセス内のクラス内から変数を読み取りますか?

  • 上記の Win32 アプリの完全なソース コードを持っています。それをこのテーマの参照として使用できますか?

乾杯。

4

1 に答える 1

2

はい。モジュールがプロセスにフックされるとすぐに、同じアドレス空間を共有します。つまり、プロセスが割り当てたメモリ (クラス インスタンスなど) にアクセスできるようになります。

クラス インスタンスのオフセットがわかっている場合は、次のいずれかを実行できます。

  • このメモリアドレスをクラスへのポインターにキャストします (クラスヘッダーが含まれている場合)
  • このメモリ アドレスからのオフセットを使用して、クラスのメンバーにアクセスします。

MSDNのモジュール リストの走査を参照してください。「フック」したいプロセスのMODULEENTRY32を取得したらmodBaseAddr、オフセットのベースとして使用できます。たとえば、クラス インスタンスを指すグローバル変数が 0x000AD421 にあることがわかっている場合、次のように実行できます。

ClassName *pClassBase = moduleEntry->modBaseAddr + 0x000AD421;
pClassBase->UseSomeFunctions();

また

unsigned char *pClassBase = moduleEntry->modBaseAddr + 0x000AD421; // if we don't know the exact definition of the class we want to play with
float flMemberValue = *reinterpret_cast<float*>((unsigned char *)pClassBase + 24); // float member value at offset 24
// value of member is flMemberValue

*reinterpret_cast<float*>((unsigned char *)pClassBase + 24) = 15.25; // setting the same member value to 15.25.

他のコメンターが述べたように、クラス ベースのオフセットを見つけることは、このプロセスの最も難しい部分です。ただし、クラス定義が手元にある場合は、これが基本的に行う必要がある唯一の作業です (つまり、クラス メンバーのオフセットも検索する必要はありません)。

于 2012-06-20T19:20:35.283 に答える