网络游戏外挂制作之我所见(5)

原创 2003年04月07日 10:15:00

我一直没有搞懂制作加速外挂是怎么一回事,直到前不久又翻出来了2001年下半期的《程序员合订本》中《“变速齿轮”研究手记》重新回味了一遍,才有了一点点开悟,随后用Delphi重写了一遍,下面我就把我的心得说给大家听听,并且在此感谢《“变速齿轮”研究手记》作者褚瑞大虲给了提示。废话我就不多说了,那就开始神奇的加速型外挂体验之旅吧!
原本我一直以为加速外挂是针对某个游戏而写的,后来发现我这种概念是不对的,所谓加速外挂其实是修改时钟频率达到加速的目的。
以前DOS时代玩过编程的人就会马上想到,这很简单嘛不就是直接修改一下8253寄存器嘛,这在以前DOS时代可能可以行得通,但是windows则不然。windows是一个32位的操作系统,并不是你想改哪就改哪的(微软的东东就是如此霸气,说不给你改就不给你改^_^),但要改也不是不可能,我们可以通过两种方法来实现:第一是写一个硬件驱动来完成,第二是用Ring0来实现(这种方法是CIH的作者陈盈豪首用的,它的原理是修改一下IDE表->创建一个中断门->进入Ring0->调用中断修改向量,但是没有办法只能用ASM汇编来实现这一切*_*,做为高级语言使用者惨啦!),用第一种方法用点麻烦,所以我们在这里就用第二种方法实现吧~~~
在实现之前我们来理一下思路吧:
1、我们首先要写一个过程在这个过程里嵌入汇编语言来实现修改IDE表、创建中断门,修改向量等工作
2、调用这个过程来实现加速功能
好了,现在思路有了,我们就边看代码边讲解吧:
首先我们建立一个过程,这个过程就是本程序的核心部份:
procedure SetRing(value:word); stdcall; 
const ZDH = $03;        // 设一个中断号
var
  IDT : array [0..5] of byte; // 保存IDT表
  OG : dword;          //存放旧向量
begin
   asm
     push ebx
     sidt IDT                  //读入中断描述符表
     mov ebx, dword ptr [IDT+2] //IDT表基地址
     add ebx, 8*ZDH  //计算中断在中断描述符表中的位置
     cli                       //关中断
     mov dx, word ptr [ebx+6]
     shl edx, 16d             
     mov dx, word ptr [ebx]   
     mov [OG], edx     
     mov eax, offset @@Ring0   //指向Ring0级代码段
     mov word ptr [ebx], ax        //低16位,保存在1,2位
     shr eax, 16d
     mov word ptr [ebx+6], ax      //高16位,保存在6,7位
     int ZDH             //中断
     mov ebx, dword ptr [IDT+2]    //重新定位
     add ebx, 8*ZDH
     mov edx, [OG]
     mov word ptr [ebx], dx
     shr edx, 16d
     mov word ptr [ebx+6], dx      //恢复被改了的向量
     pop ebx
     jmp @@exitasm //到exitasm处
    @@Ring0:    //Ring0,这个也是最最最核心的东东
      mov al,$34    //写入8253控制寄存器
      out $43,al
      mov ax,value //写入定时值
      out $40,al    //写定时值低位
      mov al,ah
      out $40,al    //写定时值高位
      iretd         //返回
   @@exitasm:
   end;
end;
最核心的东西已经写完了,大部份读者是知其然不知其所以然吧,呵呵,不过不知其所以然也然。下面我们就试着用一下这个过程来做一个类似于“变速齿轮”的一个东东吧!
先加一个窗口,在窗口上放上一个trackbar控件把其Max设为20,Min设为1,把Position设为10,在这个控件的Change事件里写上:

SetRing(strtoint('$'+inttostr(1742+(10-trackbar1.Position)*160)));

因为windows默认的值为$1742,所以我们把1742做为基数,又因为值越小越快,反之越慢的原理,所以写了这样一个公式,好了,这就是“变速齿轮”的一个Delphi+ASM版了(只适用于win9X),呵呵,试一下吧,这对你帮助会很大的,呵呵。

版权说明:
您可以随意复制、分发、下载此文档。但未经本人同意,您不可以截取、改动本文片断,或用本文谋取任何形式的利益。


网络游戏外挂制作之我所见(1)

在几年前我看到别人玩网络游戏用上了外挂,做为程序员的我心里实在是不爽,想搞清楚这到底是怎么回事。就拿了一些来研究,小有心得,拿出来与大家共享,外挂无非就是分几种罢了(依制作难度):1、动作式,所谓动作...
  • mprogramer
  • mprogramer
  • 2003年04月04日 09:16
  • 3114

网络游戏外挂制作之我所见(7)

在本章中,我们主要来研究一下封包的制作和发送,同样,我们所采用的方法是Delphi+winsock2来制作。在以前说过在Delphi中只封装了winsock1,winsock2需要自已封装一下,我在此...
  • mprogramer
  • mprogramer
  • 2004年02月22日 23:14
  • 3247

网络游戏外挂制作之我所见(4)

以前介绍过的动作式,本地修改式外挂是真正意义上的外挂,而今天本文要介绍的木马式外挂,可能大多像木马吧,是帮助做外挂的人偷取别人游戏的帐号及密码的东东。因为网络上有此类外挂的存在,所以今天不得不说一下(...
  • mprogramer
  • mprogramer
  • 2003年04月04日 09:15
  • 1947

网络游戏外挂制作之我所见(3)

上回我们对动作式外挂做了一个解析,动作式是最简单的外挂,现在我们带来看看,比动作式外挂更进一步的外挂——本地修改式外挂的整个制作过程进行一个详细的分解。  具我所知,本地修改式外挂最典型的应用就是在“...
  • fsc2988877
  • fsc2988877
  • 2007年01月17日 02:58
  • 862

网络游戏外挂制作之我所见(3)

上回我们对动作式外挂做了一个解析,动作式是最简单的外挂,现在我们带来看看,比动作式外挂更进一步的外挂——本地修改式外挂的整个制作过程进行一个详细的分解。    具我所知,本地修改式外挂最典型的应用就是...
  • mprogramer
  • mprogramer
  • 2003年04月04日 09:15
  • 2565

网络游戏外挂制作之我所见(6)

    网络游戏的封包技术是大多数编程爱好者都比较关注的关注的问题之一,在这一篇里就让我们一起研究一下这一个问题吧。    别看这是封包这一问题,但是涉及的技术范围很广范,实现的方式也很多(比如说AP...
  • mprogramer
  • mprogramer
  • 2003年05月19日 21:32
  • 1671

网络游戏外挂制作之我所见(2)

上回对五种类型的外挂做了一个大体的概括,大家对这几种外挂都有了一定的了解,现在就依次(制作难度)由浅到深谈谈我对外挂制作的一些认识吧~~~~首先,先来谈一下动作式的外挂,这也是我第一次写外挂时做的最简...
  • mprogramer
  • mprogramer
  • 2003年04月04日 09:15
  • 2647

网络游戏外挂制作之我所见(5.5)

我的文章名字没有叫《网络游戏外挂制作之我所见(6)》是因为本文六以后研究的方向就是网络数据封包的内容了,而本文将要介绍的是windows 2000/Xp下实现加速形外挂的制作。在win2000里,我们...
  • mprogramer
  • mprogramer
  • 2003年04月21日 08:58
  • 1682

网络游戏外挂制作之我所见(系列文档1-5)

本技术文档和开发工具均来自Internet,仅交流学习技术使用,请在观看24小时之后,自行忘记内容,如果您喜欢本贴,请支持正版游戏盗版外挂,或请回复顶之,谢谢。 ===================...
  • fsc2988877
  • fsc2988877
  • 2007年01月17日 02:47
  • 1598

网络游戏外挂制作技术浅谈

网络游戏外挂制作技术浅谈2007-01-27 21:05外挂无非分以下几种(依制作难度):1、动作式,所谓动作式,就是指用API发命令给窗口或API控制鼠标、键盘等,使游戏里的人物进行流动或者攻击,最...
  • shaozhanyu
  • shaozhanyu
  • 2013年10月23日 16:27
  • 533
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:网络游戏外挂制作之我所见(5)
举报原因:
原因补充:

(最多只允许输入30个字)