5

仕様:Windows 7 x64、Visual C ++

目的:サンプルプログラム(calc.exeなど)からリモートPEBを取得しようとしています。proc IDを見つけ、すべての適切な権限でプロセスへのハンドルを開きました。次に、PROCESS_BASIC_INFORMATIONを使用してプロセスからPEBの場所を取得するクラスの作成に移りました。

問題: NtQueryInformationProcessがMSでたわごとに変わったことを示しているように見えるいくつかの投稿を他の場所で見つけました。ある投稿は、ntdll.dllからNtQueryInformationProcessを動的ランタイムリンクする方法を提案しています。ただし、これは長期的には不安定であり(MSは明日NtQueryInformationProcessを削除する可能性があります)、広範なエラー処理が行われないと思います。

このアイデアはこのスレッドの後半で実現され、Mike2343によって「他の方法を使用する」ことが提案されています。

質問:NtQueryInformationProcessを含まないリモートプロセスのPEBを見つける別の方法は何でしょうか?

これを見て時間を費やしてくれた人に感謝します。

4

1 に答える 1

2

私が使用することになった方法:

私はこのコードのほとんどすべてを盗み、64ビット用に修正しました。さまざまなヘッダーと構造体のすべてに関連するさまざまなドキュメントに頭を悩ませるのに、かなりの時間を費やしました。また、 PE32 +形式に関する問題に遭遇しました。そこでは、jcopenhaが親切にも、私が直面している可能性のあるいくつかの問題について教えてくれました。これらの問題を考慮した後、実行可能ファイルによってロードされたすべてのDLLとそれぞれの関数のリストを、それらの相対アドレスとともに取得できる機能プログラムがありました。

振り返ってみると、自分がやろうとしていたことをうまく理解できていなかったと思います。メモリ不足のプロセスを読み取って、PEB関連の構造体などを見つけるつもりだったと思います(後で、画像ヘッダーなどがPEBの情報を説明していることがわかりました)。それは可能かもしれませんが、私が今持っているのは、exeファイルを読み込んで私のために働くオフラインの例です。

于 2012-07-30T23:40:56.473 に答える