私は起動するたびにランダムなベースアドレスを持つ.exeのベースアドレスアドレスを取得する必要があります。私はこれを試しましたが、動作していないようです:別のプロセスのベースアドレスを取得するにはどうすればよいですか? (ASLR)
int Base = (DWORD)GetModuleHandle("Test.exe");
何が問題なのですか?
私は起動するたびにランダムなベースアドレスを持つ.exeのベースアドレスアドレスを取得する必要があります。私はこれを試しましたが、動作していないようです:別のプロセスのベースアドレスを取得するにはどうすればよいですか? (ASLR)
int Base = (DWORD)GetModuleHandle("Test.exe");
何が問題なのですか?
他のプロセスのベースアドレスを取得しようとしているようです。残念ながら、GetModuleHandle
は、現在のプロセスのモジュールでのみ動作します。目標を達成するには、PSAPIまたはCreateToolhelp32Snapshot
を使用して、別のプロセスのモジュールリストを抽出する必要があります。そして、ベースアドレスがリストにあります。
@カスタム、これを参照してください:http://stackoverflow.com/questions/14467229/get-base-address-of-process –
OPはとにかく他のプロセスのメモリとバイブルするので、より直接的なソリューションは、 DLL(例えば、[CreateRemoteThread](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682437.aspx)を使用します)。他人の家に侵入すると、 'GetModuleHandle(NULL)'を呼び出して、プロセスの作成に使用された実行可能イメージのベースアドレスを取得できます。 – IInspectable
起動するたびにランダムなベースアドレスを持つ.exeのベースアドレス/エントリポイントアドレスを取得する必要があります。プログラムはASLRを使用します。する必要があります
...
私は別のプロセスにデータを書き込むために正しいプロセス
内部メモリの特定のチャンクを編集するためにそれを使用します、あなたはWriteProcessMemory()
を使用する必要があり、書き込まれるプロセスにHANDLE
を開きます。
あなたはOpenProcess()
を使用してHANDLE
を取得し、PROCESS_VM_OPERATION
とPROCESS_VM_WRITE
のアクセス権を要求します。
CreateToolhelp32Snapshot()
/Process32First()
/Process32Next()
EnumProcesses()
:OpenProcess()
があなたから得ることができる入力などのプロセスIDを取ります。WTSEnumerateProcesses()
Process EnumerationとEnumerating All Processesを参照してください。
書き込み先のプロセスのベースアドレスを決める必要はありません。システムがあなたのためにその情報を追跡するようにします。あなたが必要とするのは、プロセスへのオープンHANDLE
です。
ええと...確かに、読んだり修正したい静的変数やコードブロックの仮想アドレスを計算するには、ベースアドレスが必要ですか? (私はあなたがModule32First/Module32Nextを使って行うことができると仮定します) –
@HarryJohnston: 'ReadProcessMemory()'と 'WriteProcessMemory()'に渡されるアドレスは、指定されたアドレスで表されるプロセスのベースアドレス'HANDLE'これは、特定のモジュールに相対的ではありません。したがって、プロセスのベースアドレス、プロセス内のターゲットメモリブロックの相対仮想アドレスのみを知る必要はありません。そのアドレスをどうやって取得するかは別の問題です。これは、事前に静的に知られているかもしれません。それは、他のメモリブロックを処理しポインタを追うことによって動的に決定することができる。それは非常に広い話題です。 –
@HarryJohnston:静的変数の場合、モジュール内の固定オフセットを知っている可能性があります。はい、プロセス内のモジュールのベースアドレスを取得できます。これから、プロセス内の変数の仮想アドレスを判別できます。 –
私はそう思わないでしょうか? – Customality
方法は私のテストでは正しいです。コード全体を貼り付けることができますか?あるいは、別のプロセスのベースアドレスを取得しようとしていますか? –
なぜあなたは 'GetModuleHandle'を呼び出すのがあなたの望むことをすると思われますか? –