看流星社区

 找回密码
 注册账号
查看: 3152|回复: 4

[求助]Dll注入后应该怎样Call?

[复制链接]

该用户从未签到

发表于 2011-3-30 08:18:54 | 显示全部楼层 |阅读模式
我用CreateRemoteThread和LoadLibrary的方法注入了一个Dll,那么
然后应该怎样调用Dll的Call呢?直接调用Dll函数的话就相当于自己的程序
执行代码,放在Dll的begin。。。end段的话就无法控制执行的函数,大家
给我说说应该怎样调用?感激不尽。。。

该用户从未签到

发表于 2011-3-30 08:19:01 | 显示全部楼层
注入后要和DLL通讯来实现CALL吧,可以自定义消息,通过消息机制传递要做什么;或者创建内存映
射,并监视,然后EXE通过改变内存映射区的值来实现向DLL发出"命令";
如果只是单纯的CALL,不需要DLL就应该可以实现了, 代码注入,而不是DLL文件注入.
VirtualAllocEx分配一块内存区,写入CALL的机器码, 需要CALL的时候,执行CreateRemoteThread远程
线程.

该用户从未签到

发表于 2011-3-30 08:19:14 | 显示全部楼层
好像不用分配内存都可以吧, 直接CreateRemoteThread调用游戏的CALL,比如要调用
00401029    .  E8 DA240A00        call 004A3508

CreateRemoteThread(hProcess,nil,0,Pointer($004A3508),nil,0,lpThreadId);

该用户从未签到

发表于 2011-3-30 08:19:31 | 显示全部楼层
晕...这样调用游戏不崩溃才怪

CreateRemoteThread不是用来调用函数的,而是创建一个远程线程

既然是线程,就要求函数原型为DWORD WINAPI Thread(LPVOID p);

如果游戏函数的原型与此一致,就可以通过这个来调用,否则,就需要中间代码过渡.

该用户从未签到

发表于 2011-3-30 08:19:41 | 显示全部楼层
有参数CreateRemoteThread调用CALL,
自定义一个线程体,  
procedure ThreadProc(p:Pointer);stdcall;
在线程体里面声明有参数CALL的函数类型,  
type
  CallProc = function (a: integer; b: Integer): Integer; stdcall;
再通过 CallProc(CALL的地址)(a,b); 来调用Call

参数a,b可以通过CreateRemoteThread的第5个参数传递一个record,供线程里面的CallProc读取.当然首先要把ThreadProc这个线程体,通过WriteProcessMemory写入到游戏进程中.
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-15 05:10

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表