-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是windows xp sp3

4

1 回答 1

1

它比你这里的要复杂一些。您不能只将当前进程中的 DLL 名称的地址作为 lpStartAddress 参数传递给另一个进程中的 CreateRemoteThread。您必须在其他进程中注入代码以使其调用 LoadLibrary 以将您的自定义 DLL 带入该进程,然后您的加载逻辑可以将控制权转移到该 DLL 中的函数。该函数也必须由远程进程中的 GetProcAddress 发现,因为地址可能与注入进程中的地址不同。

于 2012-03-27T23:16:59.013 回答