最近很多朋友在问我外挂是如何实现用空格飞行的?解答了许多遍。我想不如写成篇文章这样也许更方便点。
由于我已经把游戏删除了。这里现在就有399版的一些资料,因此下文我就用399版的一些地址做一例子吧。
首先可以通过不断起落分析出飞行的控制地址为:H00459181有了JE XXXXXX一个条件转移语句。意思是:当满足PF=1标志位为1的时候(即在游戏中起飞)跳转到飞行地址。否则执行正常地址。因此我们就可以在这里做手脚了。可以将他改为保持执行飞行地址(JNE)或者干脆给个空指令(NOP)都可以实现基本的飞行。但是在这里更改后只能用↑↓键来控制飞行,因此这个时候我们可以有两个操作方法:
方法一、用模拟键盘。用SPACE和Z来替换↑↓就可以了。
方法二、这个比较烦琐。就是通过进一步分析找到实际的飞行地址。在399这个版本中这个地址是56C6590 在这里我们可以看到是个加法语句这里我们需要补习一些功课:
加法指令 ADD(Addition)
格式: ADD OPRD1,OPRD2
功能: 两数相加
说明:
1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.
OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.
2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.
3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.加法指令适用于无符号数或有符号数的加法运算.
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
说明:
1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数.
2. OPRD1和OPRD2均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的,但不允许两个都是存储器操作数.
3. 加法指令运算的结果对CF、SF、OF、PF、ZF、AF都会有影响.以上标志也称为结果标志.
4. 该指令对标志位的影响同ADD指令.
好了,有这些知识做为铺垫我想大家知道改怎么做了。对改变相加方式是他保持飞行状态,即PF总给系统一个1就可以了。这样系统就会总判定你是处于飞行状态了。因此可以用空格控制飞行咯。