- 注册时间
- 2018-5-15
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2018-10-2 21:20:32
|
显示全部楼层
说下我是怎样不用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;
//调用
procedure TForm1.Button1Click(Sender: TObject);
begin
homeAdd:=FunIn(HPro, @gohome );//调用注入函数
ResumeThread(homeAdd); //运行注入的CALL线程
CloseHandle(homeAdd); //关闭线程
end;
以上我都写成这么的详细如果还有人说不会那我就没办法了.
如果真的不明白的话那就不要用CALL了.
本帖最近评分记录: 共条评分记录 清空我的评分动态
|
|