問題タブ [createremotethread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - CreateRemoteThread() が期待どおりに動作しない
私はGray Hat Pythonという本を読んでいて、前述の注入技術に問題があります。
DLL インジェクション コードは正常に動作しますが、dll 内のコードは実行されていないようで、メッセージ ボックスも作成されません。
コード インジェクションは正常に実行されたと主張しますが、プロセスを終了するシェルコードは適切に実行されず、インジェクションを受けたプロセスはすぐに機能しなくなります。
これらの問題は Windows 7 が原因で、書籍が少し古くなっているだけですか? それとも他に問題があるのでしょうか?Windows 7 Ultimate 64 ビットを実行しています。
とにかく、ここにコードがあります:
dll_inject.py
code_inject.py
注入された.dll
browser - Internet Explorer、GoogleChromeインジェクション
Internet Explorer / Chromeで関数を挿入するコードを作成しましたが、これらのプロセスでは機能しません。基本的に、1つの大きな構造体に、関数に必要なすべてのAPI、文字列、その他のデータを入力します。次に、ハンドルを取得しvirtualallocex
、関数と構造体を格納するのに十分なメモリを割り当てるプロセスを開き、関数と割り当てられたメモリの構造。次にcreateremotethread
、関数を開始アドレスとして、構造体をパラメーターとして、そこで実行されます。
calc / notepad / winampプロセスではすべてうまく機能しますが、ブラウザーの挿入に問題があります。
私はそれが何であるか疑問に思っています、私はこれらのAPIを使用しています。
ブラウザが現在保護されており、最低の権限で実行されているためですか?
c - ここで CreateRemoteThread が機能するのはなぜですか?
別のプロセスにスレッドを挿入しようとしています。これにより、プロセスは外部 dll をロードできます。
これが私がインターネットで見つけたコードで、動作します。
しかし、私の理解では、によって返されるアドレスはGetProcAddress
、対象のプロセスではなく、現在のプロセスのメモリ空間に存在します。
では、なぜ機能するのでしょうか。
Windows 7 でテスト済み
c# - マネージド DLL をネイティブ プロセスに挿入する
マネージド c# dll をネイティブ実行可能ファイルに挿入しようとしています。CLR をロードするために、次のコードを実行可能ファイルに挿入しています。
コードをcmd.exeに挿入すると正しく出力されるため、インジェクションが機能することはわかっています。CLRCreateInstance 、pMetaHost->GetRuntime、pRuntimeInfo->GetInterfaceはすべて S_OK を返しますが、pClrRuntimeHost->Start()は E_FAIL を返します。
これは、dll をリモート プロセスに挿入した場合にのみ発生します。自分のプロセスに dll をロードし、そこから Main を呼び出すと、すべての呼び出しが S_OK を返し、マネージ コードが正常に実行されます。
更新: notepad.exe や explorer.exe などの他のプロセスにコードを挿入しようとしました。それはそれらでうまくいきます。cmd.exe で実行されない理由についてはまだ興味がありますが、テスト目的でのみ使用したので、もう問題ではありません。
GetLastError が「存在しないトークンを参照しようとしました」を返す
windbg - RtlUserThreadStart の前に 0xC0000022
プロセスでAPIをフックするコードを挿入していますが、chrome.exeなどの一部のアプリケーションで問題が発生しています
私のテストアプリは、中断されたプロセスを起動し、インジェクションと API フックを実行してから再開します。
子プロセスをフックできるようにするために、CreateProcessW がフックされます。CreateProcessW が呼び出されると、強制的に作成が中断され、子をフックして再開します。
挿入されたコードは ntdll API のみに依存するため、フックされたプロセスはまだ完全には初期化されていませんが、ntdll.dll は常に存在します。
コードは、CreateRemoteThread または NtCreateThreadEx と CREATE_SUSPENDED フラグを使用してヘルパー スレッドを使用して挿入されます。(どちらでも、問題はまだあります)
このイントロの後、問題は、一部の chrome チャイルドなどの一部のプロセスで、CreateRemoteThread が TRUE を返すことですが、インジェクター スレッドを再開すると、コード 0xC0000022 で終了し、プロセスも終了します。
中断された chrome.exe 子プロセスに WinDbg をアタッチすると、何かを行う前にそれも失敗し、chrome.exe は同じ動作で終了します。
RtlUserThreadStart の前に OS コードを実行するとエラーが発生するようですが、デバッグ方法がわかりません。
RtlUserThreadStart の前に実行されるコードをデバッグするにはどうすればよいですか? それを可能にするデバッガーまたはwindbgオプションはありますか?
編集:
hereからの最後の投稿に続いて、この情報を取得できました。
プロセスは制限されたトークンで作成され、メイン スレッドはそれを継承しますが、アプリによって作成されるため、インジェクター スレッドは制限されません。
CreateProcess がクロムに戻る前に注入が行われるため、ntdll の API はまだクロムによってフックされていないと想定できます (この場合)。
スレッド内の非制限トークンが何らかの方法でプロセス トークンと競合する可能性はありますか?
dll-injection - 中断されたプロセスでDLLインジェクションが機能しない
CreateRemoteThread api を使用して、dll をプロセスに挿入しています。これは、プロセスが実行中の状態のときに機能します。しかし、CreateProcess API を使用して中断状態のプロセスを起動し、dll を挿入しようとすると、dll の挿入が機能しません。しかし、一時停止フラグなしで createprocess を使用すると、dll を挿入できます。誰でもこの問題の解決策を教えてもらえますか?
c# - CreateRemoteThread はファイルが存在しないと言いますが、存在します
Interop を使用して、.dll を別のプロセスのメモリに挿入しようとしています。
これは私のC#コードです:
関数のコードは次のとおりですInject
( のコメントに注意してreturn -6
ください)。
ファイルがそのフォルダーに存在するため、エラーが誤解を招く可能性があると思います。LoadLibraryA
また、ASCII 用の が原因でエラーが発生した可能性もあると考え、を使用しようとしLoadLibraryW
ましたが、それでも同じ問題が発生しました。
誰かが何が間違っているのか考えているなら、正しい方向性を教えてもらえますか?