游戏加速外挂分析以及制作

  原理:加速外挂其实是修改时钟频率达到加速的目的

首先我们建立一个过程,这个过程就是本程序的核心部份:
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做为基数,又因为值越小越快,反之越慢的原理,所以写了这样一个公式,好了,这就是“变速齿轮”

你可能感兴趣的:(游戏,windows,byte)