0

Delphi で VirtualAllocEx を使用して、次のような外部プロセスでメモリを予約しています。

var
 p : pointer;
begin
 p := VirtualAllocEx(Process, nil, SizeOf(Integer), MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
end;

ProcessHandle は以前に開かれていPROCESS_ALL_ACCESSます。

その後、私のプログラムは次のように、割り当てられたアドレスに単純な整数値を書き込みます。

WriteProcessMemory(Process, p, @MyInteger, SizeOf(Integer), BytesWritten);

アドレスはp- に保存されるので、別のアプリケーションで使用するためにアドレスを保存できます。他のアプリケーションは、外部プロセスのアドレスにアクセス/書き込むために、外部プロセスを再度開く必要があります。

私の質問は次のとおりです。外部プロセスでこのアドレスを読み書きできるのは誰ですか?

すべてのプロセスが書き込みを許可されていますか? すべてのプロセスが読み取りを許可されていますか? 管理者権限を持つプロセスのみに読み取り/書き込み権限がありますか?

ご回答有難うございます。

4

3 に答える 3

3

読み取りおよび書き込みアクセスを許可するプロセスハンドルを持っている人は誰でも、メモリの読み取りまたは書き込みを行うことができます。PROCESS_VM_READおよびPROCESS_VM_WRITEを参照してください 。したがって、最終的には、プロセスへのハンドルとそのプロセスのDACLをどのように取得したかによって異なります。

通常、プロセスを作成した場合、またはSeDebugPrivilegeを有効にしている場合は、すべてのアクセス権を取得します。を呼び出すときはOpenProcess、必要なアクセスの種類を指定する必要があります。その要求は、プロセスのセキュリティ記述子と照合されます。

于 2012-10-31T20:31:42.363 に答える
2

メモリが機能する場合、Windows はこれをデバッグとして分類します。

関係なく、独自のプロセスをデバッグできます。

許可されている (および有効になっている) 場合は、別のユーザーのプロセスをデバッグできますSeDebugPrivilege

アカウントに SeDebugPrivilege を付与すると、基本的にそのアカウントも管理者アカウントになることに注意してください。つまり、SeDebugPrivilege が付与されている場合、そのアカウントを使用する人は基本的に好きなことを行うことができ、選択した他の権限を有効にすることができます。エルゴ: 本当に必要でない限り、付与しないでください (また、システム サービス プロセスのデバッグなどを行っている場合を除き、おそらく付与しないでください)。

于 2012-10-31T20:16:33.810 に答える
1

デフォルトでは、整合性レベルに互換性があるものはすべて と を使用できReadProcessMemoryますWriteProcessMemory。これは、ターゲット プロセスの整合性レベル以上の整合性レベルを意味します。

于 2012-10-31T20:15:18.720 に答える