原本我一直以为加速外挂是针对某个游戏而写的,后来发现我这种概念是不对的,所谓加速外挂其实是修改时钟频率达到加速的目的。
以前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),呵呵,试一下吧,这对你帮助会很大的,呵呵。
21 个解决方案
#1
嗯,呆会去试试。
#2
呵呵,好是好!可我的系统是winxp的!
#3
里海哦
#4
我写一篇补充吧,XP/2000可以通过的程序
#5
强烈关注,赶快出第六篇。
#6
支持...期待下一篇...:)
#7
想知道封包捕获和修改的思路.
期待ING.
期待ING.
#8
支持...期待下一篇...:)
想知道封包捕获和修改的思路.
想知道封包捕获和修改的思路.
#9
好厉害啊,
#10
接下来应该才是真正的外挂知识了吧,期呆
最好能有个好点的源程序.呵呵
最好能有个好点的源程序.呵呵
#11
看来没了
关键时候就黄了
关键时候就黄了
#12
快点出封包捕获和修改的好文啊。
#13
还有六嘛,不要急~
#14
: mprogramer(微程)
等你的六和以后的文章多日,怎么不发表了呀
等你的六和以后的文章多日,怎么不发表了呀
#15
是啊
#16
学习
#17
快来第六篇啊
#18
: mprogramer(微程)
等你的六和以后的文章多日,怎么不发表了呀
等你的六和以后的文章多日,怎么不发表了呀
#19
唉
等啊.
等啊.
#20
mark
#21
mark
#1
嗯,呆会去试试。
#2
呵呵,好是好!可我的系统是winxp的!
#3
里海哦
#4
我写一篇补充吧,XP/2000可以通过的程序
#5
强烈关注,赶快出第六篇。
#6
支持...期待下一篇...:)
#7
想知道封包捕获和修改的思路.
期待ING.
期待ING.
#8
支持...期待下一篇...:)
想知道封包捕获和修改的思路.
想知道封包捕获和修改的思路.
#9
好厉害啊,
#10
接下来应该才是真正的外挂知识了吧,期呆
最好能有个好点的源程序.呵呵
最好能有个好点的源程序.呵呵
#11
看来没了
关键时候就黄了
关键时候就黄了
#12
快点出封包捕获和修改的好文啊。
#13
还有六嘛,不要急~
#14
: mprogramer(微程)
等你的六和以后的文章多日,怎么不发表了呀
等你的六和以后的文章多日,怎么不发表了呀
#15
是啊
#16
学习
#17
快来第六篇啊
#18
: mprogramer(微程)
等你的六和以后的文章多日,怎么不发表了呀
等你的六和以后的文章多日,怎么不发表了呀
#19
唉
等啊.
等啊.
#20
mark
#21
mark