专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »安全 » 游戏外挂原理:游戏外挂基本原理及实现 »正文

游戏外挂原理:游戏外挂基本原理及实现

来源: 发布时间:星期六, 2009年9月12日 浏览:365次 评论:0
  游戏外挂已经深深地影响着众多网络游戏玩家,今天在网上看到了些有关游戏外挂编写技术,于是转载上供大家参考

  1、游戏外挂原理

  外挂现在分为好多种比如模拟键盘鼠标修改数据包还有修改本地内存但好像没有修改服务器内存呵呵其实修改服务器也是有办法只是技术太高般人没有办法入手而已(比如请GM去夜总会、送礼、收黑钱等等办法都可以修改服务器数据哈哈)

  修改游戏无非是修改下本地内存数据或者截获API等等这里我把所能想到思路方法都作个介绍希望大家能做出很好外挂来使游戏厂商更好完善自己技术个人所见到篇文章是讲魔力宝贝理论分析写得不错大概是那个样子下来我就讲解下技术方面东西以作引玉的用

  2 技术分析部分

  2.1 模拟键盘或鼠标响应

  我们般使用:

  UINT SendInput(
    UINT nInputs,   // count of input events
    LPINPUT pInputs, // .gif' /> of input events
     cbSize    // size of structure
  );  

  API个参数是介绍说明第 2个参数矩阵维数第 2个参数包含了响应事件这个自己填充就可以最后是这个结构大小非常简单这是最简单思路方法模拟键盘鼠标了呵呵注意这个还有个替代:

  VOID keybd_event(
    BYTE bVk,       // 虚拟键码
    BYTE bScan,      // 扫描码
    DWORD dwFlags,
    ULONG_PTR dwExtraInfo // 附加键状态
  );  

  和

  VOID mouse_event(
    DWORD dwFlags,      // motion and click options
    DWORD dx,         // horizontal position or change
    DWORD dy,        // vertical position or change
    DWORD dwData,      // wheel movement
    ULONG_PTR dwExtraInfo  // application-d information
  );  

  这两个非常简单了我想那些按键精灵就是用这个吧上面是模拟键盘下面是模拟鼠标这个仅仅是模拟部分要和游戏联系起来我们还需要找到游戏窗口才行或者包含快捷键就象按键精灵那个激活键我们可以用GetWindow来枚举窗口也可以用Findwindow来查找制定窗口(注意还有个FindWindowEx)FindwindowEx可以找到窗口子窗口比如按钮等什么东西当游戏切换场景时候我们可以用FindWindowEx来确定些当前窗口特征从而判断是否还在这个场景思路方法很多了比如可以GetWindowInfo来确定些东西比如当查找不到某个按钮时候就介绍说明游戏场景已经切换了等等办法游戏没有Control控件在里面这是对图像做坐标变换这种思路方法就要受到限制了这就需要我们用别办法来辅助分析了

  至于快捷键我们要用动态连接库实现了里面要用到hook技术了这个也非常简单大家可能都会了其实就是个全局hook对象然后SetWindowHook就可以了回调都是现成而且现在网上例子多如牛毛这个实现在外挂中已经很普遍了如果还有谁不明白那就去看看MSDN查找SetWindowHook就可以了

  不要低估了这个动态连接库作用它可以切入所有进程空间也就是可以加载到所有游戏里面哦只要用对,你会发现很有用途这个需要你复习下Win32编程基础知识了呵呵赶快去看书吧

  2.2 截获消息

  有些游戏响应机制比较简单是基于消息或者用什么定时器东西这个时候你就可以用拦截消息来实现些有趣功能了

  我们拦截消息使用也是hook技术里面包括了键盘消息鼠标消息系统消息日志等对我们没有什么大用处我们只用拦截消息回调就可以了这个不会让我写例子吧其实这个和上面都是用SetWindowHook来写看看就明白了很简单

  至于拦截了以后做什么就是你事情了比如在每个定时器消息里面处理些我们数据判断或者在定时器里面在模拟次定时器那么有些数据就会处理两次呵呵后果嘛定是好事情哦呵呵不过如果数据计算放在客户端游戏就可以真改变数据了呵呵试试看吧用途还有很多自己想也可以想出来呵呵

  2.3 拦截Socket包

  这个技术难度要比原来高很多

  首先我们要替换WinSock.DLL或者WinSock32.DLL我们写替换要和原来致才行就是说它输出什么样我们也要输出什么样子而且参数参数顺序都要样才行然后在我们里面真正WinSock32.DLL里面就可以了

  首先:我们可以替换动态库到系统路径

  其次:我们应用启动时候可以加载原有动态库用这个LoadLibary然后定位入口用GetProcAddress获得每个真正Socket入口地址

  当游戏进行时候它会我们动态库然后从我们动态库中处理完毕后才跳转到真正动态库地址这样我们就可以在里面处理自己数据了应该是切数据呵呵兴奋吧拦截了数据包我们还要分析的后才能进行正确应答不要以为这样工作就完成了还早呢等分析完毕以后我们还要仿真应答机制来和服务器通信个不小心就会被封号

  分析数据才是工作量来源呢游戏每次升级有可能加密方式会有所改变因此我们写外挂人都是亡命的徒啊被人愚弄了还不知道

  2.4 截获API

  上面技术如果可以灵活运用话我们就不用截获API其实这种技术是种补充技术比如我们需要截获Socket以外作为我们用途我们就要用这个技术了其实我们也可以用它直接拦截在Socket中这样更直接

  现在拦截API教程到处都是我就不列举了我用比较习惯思路方法是根据输入节进行拦截这个思路方法可以用到任何种操作系统上比如Windows 98/2000等有些思路方法不是跨平台我不建议使用这个技术大家可以参考Windows核心编程里面545页开始内容来学习如果是Win98系统可以用“Windows系统奥秘”那个最后章来学习 


  • 篇文章: Win2000下系统进程隐藏代码

  • 篇文章: ASP使用MYSQL数据库全攻略
  • 0

    相关文章

    读者评论

    发表评论

    • 昵称:
    • 内容: