2017-10-19 33 views
-2

私は"program.exe"+03262C08 -> B4895A0のベースアドレスを得るために使用できる方法/機能を探しています。このアドレスはチートエンジンのもので、ベースアドレスはポインタスキャナで検出されています。ポインタースキャナーでは、私はshow module listを押すことができ、00400000 program.exeで始まるprogram.exeのアドレスがあります。ポインタスキャナがアドレス09c3000(ベースアドレス+多くのオフセット[最終アドレス]の後に到達したいアドレス)をスキャンしました。このアドレスは特定のオブジェクトのベースですが、アドレスに到達できません。私は00400000にexeファイルのベースアドレスだけを得ることができます。私はポインタ03262C08(および他のもの)からオフセットを追加しようとしていますが、私はまだアドレスに到達できません。私は機能を使用することができませんFindWindow()。プログラムの名前が変わるとそれに固執するのが冗長になります。私はOpenProcess(), EnumProcessModulesEx(), GetModuleFileNameEx()機能を使用しています。私は他の人も同様の結果を得たGetModuleInformation(),...のように試しました。 GetModuleHandle()の結果は0x126 [ERROR_MOD_NOT_FOUND]で終了しました。私は64ビットOSを使用しており、別のプロセスのベースアドレスを取得しようとしています。 ローカルマシン上のすべてのプロセスと「プログラム」プロセスのモジュールを見ることができます。c/C++どのようにして.exe実行プロセスのベースアドレスを取得できますか?

if (!K32EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) { 
    return 1; 
} 

cProcesses = cbNeeded/sizeof(DWORD); 

cout << setw(15) << left << "Process ID" << setw(10) << left << "Modules"; 
cout << setw(30) << left << "Process Name" << endl; 
for (i = 0; i < cProcesses; i++) { 
    if (aProcesses[i] != 0) { 
     ProcessView::GetProccesses(aProcesses[i], modules, sizeModules, &cModules, &hCurrProcess); 
     if (hCurrProcess != NULL) { 
      cout << endl << setw(15) << left << aProcesses[i] << setw(10) << left << cModules; 
      ProcessView::PrintModuleName(hCurrProcess, modules); 
      CloseHandle(hCurrProcess); 
     } 

    } 
} 
ProcessView::GetProccesses(cProcesses, modules, sizeModules, &cModules, &hCurrProcess); 

system("cls"); 
ProcessView::PrintModuleNameAll(hCurrProcess, modules, cModules); 

ここでは、作成したProcessView.hファイルの例の関数定義を追加しました。

static void GetProccesses(_In_ DWORD processID, _Inout_ HMODULE ahModules[], _In_ int sizeModules, _Out_ DWORD* cModules, _Out_ HANDLE* hProcess); 
static void PrintModuleName(_In_ HANDLE processID, _In_ HMODULE* modules); 
static void PrintModuleNameAll(_In_ HANDLE hProcess, _In_ HMODULE * modules, _In_ DWORD cModules); 
+0

[重複](https://stackoverflow.com/questions/11564148)?実行中のプロセスがほしいのですか? –

+0

いいえ、特定のアドレスからプロセスメモリ 'ReadProcessMemory()'を読み込もうとしましたが、 'FindWindow()'関数と同じように動作しています。 –

+0

問題のアドレスがexe(dllではなく、ヒープではない)に属していることを確認してください。 – KonstantinL

答えて

1

Windowsは、現在約10年の間、アドレス空間レイアウトのランダム化を使用していますが、EXEのモジュールベースはそれよりはるかに古いです。それを無視するだけで、今は無意味です。

各プロセスには独自のアドレス空間があります。 1つのプロセス内のポインタは、他のプロセスでは無意味です。

関連する問題