免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 利用Dll注入制作魔兽争霸外挂

利用Dll注入制作魔兽争霸外挂

时间:2012-02-17 18:22来源:未知 整理:寂涯网络 点击:

DLL注入是一个很强大的技术,它可以在操作系统应用层突破进程间的限制,把自己的代码注入到其它进程中,从而操作目标进程的行为。DLL注入的一个很重要的应用是游戏外挂。笔者写过一篇文章为《在c++中嵌入汇编实现0^注入》,在那篇文 章中笔者详细介绍了 DLL注入的原理与方法。前几天无聊之余在那个程序基础上写了一个魔兽争霸游戏的外挂,本文就以这个程序为基础介绍一下自己的心得吧。这个程序与商业外挂还有一定的差距,但用到的原理都一样,读者可以在这个程序的基础上逐步完善写出 更强大的外挂。本文用到的工具有:逆向分析工具ollydbg,内存数据修改工具Cheat Engine, 集成开发环境vc++6.0。

dll注入
由于本文的读者并不一定看过去年笔者的那篇文章,所以这里也简要介绍一下该技术的 主要实现步骤,至于详细实现请去参考。用到的主要代码为工程目录Inject下 面文件InjectDlg.cpp中的函数void CinhectDlg: :OnInject ()。在函数一开始是一段汇编代码,这是远程线程的代码,在本程序运行时是不执行的。跳过这段代码是一些0代码,这些c代码的作用是通过创建一个远程线程,把上面那些汇编代码插入到目标游戏进程中。汇编代码如下:
_asm
{
//第一部分给变量占位 //给LoadLibrary函数地址占位 LoadL i braryAddr: nop nop nop nop
//给动态链接库名占位 LibraryName: nop nop nop nop nop nop nop
nop
//第二部分实现地址重定位,吐$保存差值
 call relocal 
relocal pop ebx 
 sub ebx , offset relocal
 //第三部分调用LoadLibrary
 //压入LoadLibrary参数(动态链接库名)
 mov eax , ebx 
 add eax , offset LibraryName
 push eax 
 //Call 函数地址 
 mov eax , ebx 
 add eax , offset LoadLibraryAddr
 mov eax , [eax] 
 call eax 
 } ret  

汇编代码的主要功能是调用函数LoadLibrary导入工程DLL编译生成的Dll文件。由于地址重定位,变量的保存等原因,此处只能用汇编指令来实现。该段代码分为三部分,首先是一堆nop指令,作用是为第三部分用到的变量占位。此部分在编译时,一个0叩指令将被 编译成一个字节的数据90存放在这段代码中。LoadLibrary的地址占四个字节,所以用四个^^指令为其占位。注意,这里只是起到一个占位的作用,当这段汇编代码注入到目标进 程后,还要对这四个字节的数据进行修正,使其存放真正的LoadLibrary地址。动态链接库名也是如此。第二部分的作用是为地址重定位获得汇编代码在注入进程与被注入进程之间的 地址差值,这个差值存放在寄存器ebx中。关于地址重定位的原理笔者在去年那篇文章以及10年十一期发表的《感染exe文件的病毒原理与实现》的中做了详细的解释。第三部分的作用是调用函数LoadLibrary。这部分又分两步,第一步把动态链接库名压入栈中,第二步call函数地址。注意,所有对第一部分中变量的访问都要加上地址差以实现地址重定位, 也就是加上第二部分中得到的ebx中的值。这一段汇编指令被注入到目标进程后,就会把另一个工程编译生成的Dll.dll文件导入到目标进程的地址空间中。
C代码的第一步是通过进程名获取进程句柄。魔兽争霸运行时的进程名为“War3.exe“,程序通过枚举系统里的所有进程得到游戏进程的ID,再通过OpenProcess得到游戏进程句柄。第二步是用函数¥化加&1八110成1在游戏进程中申请远程线程的代码空间。第三步是用 函数WriteProcessMemory向游戏进程复制远程线程的代码,也就是把上面那些汇编指令复 制到游戏进程的地址空间中去。第四步是修正远程线程的变量值,就是把那些用于占位的 90修改为正确的值,同样是用函数WriteProcessMemory。有人可能会问,为什么非得用如口 指令来占位,过后再去修改呢?写代码时直接写正确的值多好啊。笔者也曾经想这样实现, 但在0++中嵌入汇编时并不允许汇编代码在代码区中声明数据,所以只能用代码中的这个方 法,至于用什么指令来占位,这就没有限定了,但要注意选用的指令被编译成十六进制码后 占几个字节。最后一步是调用函数&6站#挪0仏1^^3(1创建远程线程。到此为止,那段汇 编代码就已经存在于游戏进程中,并开始运行了。
搜索游戏存放金钱的内存地址
在游戏外挂开发过程中逆向分析是极其关键的一步,其作用是分析游戏运行时关键数据 及关键代码所在的内存地址,以便于我们的外挂程序进行修改。分析过程非常繁琐,需要分析者有耐心且有一定的逆向分析经验。这里就介绍一下魔兽争霸游戏的逆向分析过程。

本页地址 http://www.jybase.net/biancheng/20120217776.html

百度搜索更多

谷歌搜索更多

顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com