64ビットプロセスに64ビットDLLを挿入しようとしています。
私はRemote-thread \ Window Hooksの手法を試しましたが、いくつかのアンチウィルスは私のローダーを偽陽性として検出します。
この記事を読んだ後:Dll Injection by Darawk、私はコード洞窟を使用することに決めました。
これは32ビットではうまくいきましたが、VSが64ビットのインラインアセンブリをサポートしていないため、オペコードとオペランドを明示的に記述しなければなりませんでした。
私はこの記事を見て:64Bit injection using code cave、記事の状態として、いくつかの違いがあります。コード洞窟を使用して64ビットDLLを注入
ここに組み込まれなければならなかったいくつかの違いがあります。
- がMASM64はfastcallを使用するため、関数の引数は レジスタに渡され、スタックには渡されません。
- アドレスの長さ(32ビットvs. 64ビット)を考慮する必要があります。
- MASM64には、 がスタック上のすべてのレジスタを(32ビットのpushadのように)プッシュしないので、すべてのレジスタを明示的にプッシュして を実行する必要があります。
私は、これらのガイドラインに従い、記事の例が、私が働いたかのどれを実行しました。
私はメインスレッドを再開した瞬間にターゲットプロセスがクラッシュしましたが、ollydbgには64ビットのサポートがないため、実際に調べる方法はわかりません。
これは私がそれを注入された前のコードがどのように見えるかです:
codeToInject:
000000013FACD000 push 7741933Ah
000000013FACD005 pushfq
000000013FACD006 push rax
000000013FACD007 push rcx
000000013FACD008 push rdx
000000013FACD009 push rbx
000000013FACD00A push rbp
000000013FACD00B push rsi
000000013FACD00C push rdi
000000013FACD00D push r8
000000013FACD00F push r9
000000013FACD011 push r10
000000013FACD013 push r11
000000013FACD015 push r12
000000013FACD017 push r13
000000013FACD019 push r14
000000013FACD01B push r15
000000013FACD01D mov rcx,2CA0000h
000000013FACD027 mov rax,76E36F80h
000000013FACD031 call rax
000000013FACD033 pop r15
000000013FACD035 pop r14
000000013FACD037 pop r13
000000013FACD039 pop r12
000000013FACD03B pop r11
000000013FACD03D pop r10
000000013FACD03F pop r9
000000013FACD041 pop r8
000000013FACD043 pop rdi
000000013FACD044 pop rsi
000000013FACD045 pop rbp
000000013FACD046 pop rbx
000000013FACD047 pop rdx
000000013FACD048 pop rcx
000000013FACD049 pop rax
000000013FACD04A popfq
000000013FACD04B ret
は私には罰金だが、私は、私は何かが欠けてると思います。
完全なコードはここにあります:Source code
どのようなアイデアですか?
WinDbgをデバッグに使用すると何が問題になりますか?それはネイティブなx64プロセスをうまくサポートしており、OllyDbgよりはるかに安定していて信頼性が高いとわかります。 – RaptorFactor
64ビットプロセスから注入していますか?もしそうでなければ、 'LoadLibrary'のアドレスを使うことはできません。 – pezcode
また、 'LoadLibrary'を呼び出すと、スタックが16バイトに整列していることを確認してください。 – pezcode