过程注入的方法

来源:百度文库 编辑:神马文学网 时间:2024/04/24 05:52:13
过程注入的方法  这个貌似比代码注入高级一点,原理一样,只是广泛不同
首先说下我是怎样不用DLL注入也可以CALL游戏里的函数吧.

其实我是用过程注入的.意思是说我将要CALL的游戏函数写到一个过程里.然后在目标进程中建立一个内存空间,把我写的过程的注入到该空间里.具体怎么做呢?我就用我的程序里的一个小功能来做个介绍吧!

就用完美国际的角色死亡回城的CALL来说明,下面是代码及说明:

//过程注入函数
function TForm1.FunIn(Hid:cardinal;FunName:pointer):cardinal;
var
{要注入线程的窗口句柄和临时存放的句柄}
TmpHandle: THandle;
ThreadID: Thandle;
ThreadAdd:pointer;
WriteCount: DWORD;
begin
ThreadAdd := VirtualAllocEx(Hid, nil, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);//在目标进程建立内存空间
WriteProcessMemory(Hid, ThreadAdd,FunName, 4096, WriteCount);//将要注入的过程写到上面建立的内存空间中
TmpHandle := CreateRemoteThread(Hid, nil, 0, ThreadAdd, nil, CREATE_SUSPENDED, ThreadID);//获得注入后过程的句柄ID
result:=TmpHandle;//返回句柄ID
end;

//游戏回城CALL
procedure gohome;
var
Address:pointer;
begin
Address:=Pointer($005829B0); //函数入口地址
asm
pushad
MOV EAX,DWORD PTR DS:[$8F0F7C]
MOV EAX,DWORD PTR DS:[EAX+$20]
LEA ECX,DWORD PTR DS:[EAX+$EC]
CALL Address
popad
end;
end;

//调用
procedure TForm1.Button1Click(Sender: TObject);
begin
homeAdd:=FunIn(HPro,@gohome);//调用注入函数
ResumeThread(homeAdd); //运行注入的CALL线程
CloseHandle(homeAdd); //关闭线程
end;

以上我都写成这么的详细如果还有人说不会那我就没办法了.
如果真的不明白的话那就不要用CALL了