看流星社区

 找回密码
 注册账号
查看: 2708|回复: 0

DLL注入的方法及通讯

[复制链接]

该用户从未签到

发表于 2011-3-26 11:31:10 | 显示全部楼层 |阅读模式
1、    全局钩子法
此方法利用SetWindowsHookEx进行钩子的建立,同时系统会自动把钩子需要的DLL文件注入到目标程序,此方法注入过程由系统自动完成,比较方便。缺点就是调用这个DLL的主程序需要保持启动状态,当这个主程序退出,那么所有注入的DLL都会卸载。

2、    远程LoadLibrary法
此方法相对比较复杂一些,注入和卸载的过程都要自己写出代码来实现,主要用到 VirtualAllocEx,WriteProcessMemory,LoadLibraryA,CreateRemoteThread,等API实现,优点就是注入后,主程序可以退出,不影响DLL在目标进程的工作。
执行流程:
1)    打开进程,得到进程句柄;
2)    得到DLL的全路径名称和长度
3)    申请内存空间,把DLL全路径写到目标进程空间内(VirtualAllocEx,WriteProcessMemory);
4)    使目标进程调用LoadLibrary,加载DLL(CreateRemoteThread,LoadLibraryA)
5)    释放目标进程中申请的空间 (VirtualFreeEx)


关于通讯问题:
看到论坛里很多人在问DLL如何和外面的主程序通讯的问题,我这里给大家提供二种解决方法:
1、程序界面在DLL中,所有操作都由DLL呼出窗体进行,包括所有的逻辑操作及CALL操作,也就是说,所有的代码都写到DLL种,主程序,只是负责将DLL注入进目标程序即可。
这样做呢,有个弊端,就是如果要设置辅助就得需要打开游戏界面,然后呼出辅助进行设置,不是很方便。
2、消息通讯法,其实还有几种的,比如共享内存段等方法,为什么推荐消息呢,个人感觉消息写起来比较舒服,而且代码简单。此方法呢,DLL中只写常用的 CALL信息,比如:普通攻击CALL,买卖CALL,拾取CALL等等,没有其他的。而主程序里写挂的所有逻辑判断,当需要执行某个动作时,比如普通攻击,那么就发个消息给DLL让他执行普通攻击操作就可以了。
消息呢,VC里我使用了自定义消息来实现,不同的消息名称对应不同的操作,这样就很好区分不同CALL了。
至于消息的接受,我认为有二种方式,第一种,消息直接发给对应的目标程序里的DLL,这样做呢,简单些,DLL里接受消息后进行对应操作,但这样做有个问题,就是如果多开的话,DLL的查找是个问题,不知道应该发给哪个游戏内的DLL。第二种方法呢,就是DLL内通过SetWindowsHookEx挂钩(HOOK)消息处理函数,这样DLL就可以接受到发给游戏的消息,那么DLL就可以根据发给游戏的消息来判断执行对应的操作,这样的方式就解决了第一种方法中的弊端,发消息时,直接发给对应游戏就可以了。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

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

GMT+8, 2024-5-4 14:10

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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