Dll注入代码

时间:2012-03-27 22:25:56

标签: assembly masm32

我正在尝试创建一个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

1 个答案:

答案 0 :(得分:1)

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