-1

dllインジェクションコードを作成しようとしています。テストプロセスはメモ帳で、プロセスIDはハードコードされています。

コードは次のとおりです。

.386 
.model flat, stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
include \masm32\include\masm32rt.inc


.data
hand db "Kernel32.dll",0
band db "LoadLibraryA",0
dll db "C:\masm32\kntillusion.dll",0
msg db "failed",0
pd dd 840

.data?
var dd ?
handle dd ?
base dd ?
written dd ?
pr dword ?
dr dword ?
thd dword ?
.code 
start: 
invoke OpenProcess,PROCESS_ALL_ACCESS,TRUE,pd
TEST EAX, EAX
JE CodeFail
mov handle,eax
invoke VirtualAllocEx,handle,NULL,sizeof dll,MEM_COMMIT,PAGE_READWRITE
TEST EAX, EAX
JE CodeFail
mov base,eax
invoke WriteProcessMemory,handle,base,addr dll,sizeof dll,offset written
TEST EAX, EAX
JE CodeFail
invoke GetModuleHandle,hand
TEST EAX, EAX
JE CodeFail
mov dr,eax
invoke GetProcAddress,dr,band
TEST EAX, EAX
JE CodeFail
mov pr,eax
invoke CreateRemoteThread,handle,0,0,pr,addr dll,0,addr thd
invoke ExitProcess,0
CodeFail:
invoke StdOut, addr msg
invoke ExitProcess,0
end start

実行すると、次のエラーが発生しました

kinject.exeで問題が発生したため、閉じる必要があります。ご不便をおかけしてしまい申し訳ございません。

だから、plaftromはwindowsxpsp3であるとアドバイスします

4

1 に答える 1

1

ここにあるものよりも少し複雑です。現在のプロセスの DLL 名のアドレスを、lpStartAddress 引数として別のプロセスの CreateRemoteThread に渡すことはできません。他のプロセスにコードを挿入して、カスタム DLL をそのプロセスに取り込むために LoadLibrary 呼び出しを行う必要があります。その後、ロード ロジックはその DLL 内の関数に制御を転送できます。この関数は、リモート プロセスの GetProcAddress によっても検出される必要があります。これは、アドレスがインジェクション プロセスのものと異なる可能性があるためです。

于 2012-03-27T23:16:59.013 に答える