📄 游戏外挂制作材料v5.5.9.htm
字号:
<p align="center"><font size="3" color="#666666"><b><blink>二、算术运算指令
ADD 加法. ADC 带进位加法. INC 加 1. AAA 加法的ASCII码调整. DAA
加法的十进制调整. SUB 减法. SBB 带借位减法. DEC 减 1. NEC 求反(以
0 减之). CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
AAS 减法的ASCII码调整. DAS 减法的十进制调整. MUL 无符号乘法.
IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
AAM 乘法的ASCII码调整. DIV 无符号除法. IDIV 整数除法.
以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或
商回送AX,余数回送DX, (字运算). AAD 除法的ASCII码调整. CBW
字节转换为字. (把AL中字节的符号扩展到AH中去) CWD
字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE
字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>三、逻辑运算指令
AND 与运算. OR 或运算. XOR 异或运算. NOT 取反. TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL 逻辑左移. SAL 算术左移.(=SHL) SHR 逻辑右移. SAR 算术右移.(=SHR)
ROL 循环左移. ROR 循环右移. RCL 通过进位的循环左移. RCR
通过进位的循环右移. 以上八种移位指令,其移位次数可达255次.
移位一次时, 可直接用操作码. 如 SHL AX,1. 移位>1次时,
则由寄存器CL给出移位次数. 如 MOV CL,04 SHL AX,CL</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>四、串指令 DS:SI
源串段寄存器 :源串变址. ES:DI 目标串段寄存器:目标串变址.
CX 重复次数计数器. AL/AX 扫描值. D标志 0表示重复操作中SI和DI应自动增量;
1表示应自动减量. Z标志 用来控制扫描或比较操作的结束. MOVS
串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS
串比较. ( CMPSB 比较字符. CMPSW 比较字. ) SCAS 串扫描. 把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS 装入串. 把源串中的元素(字或字节)逐一装入AL或AX中. (
LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串. 是LODS的逆过程.
REP 当CX/ECX<>0时重复. REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复. REPC
当CF=1且CX/ECX<>0时重复. REPNC 当CF=0且CX/ECX<>0时重复.</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>五、程序转移指令
1>无条件转移指令 (长转移) JMP 无条件转移指令 CALL
过程调用 RET/RETF过程返回. 2>条件转移指令 (短转移,-128到+127的距离内)
( 当且仅当(SF XOR OF)=1时,OP1循环控制指令(短转移) LOOP CX不为零时循环.
LOOPE/LOOPZ CX不为零且标志Z=1时循环. LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
JCXZ CX为零时转移. JECXZ ECX为零时转移. 4>中断指令 INT
中断指令 INTO 溢出中断 IRET 中断返回 5>处理器控制指令 HLT
处理器暂停, 直到出现中断或复位信号才继续. WAIT
当芯片引线TEST为高电平时使CPU进入等待状态. ESC
转换到外处理器. LOCK 封锁总线. NOP 空操作. STC 置进位标志位.
CLC 清进位标志位. CMC 进位标志取反. STD 置方向标志位. CLD
清方向标志位. STI 置中断允许位. CLI 清中断允许位.</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>六、伪指令 DW
定义字(2字节). PROC 定义过程. ENDP 过程结束. SEGMENT 定义段.
ASSUME 建立段寄存器寻址. ENDS 段结束. END 程序结束.
当然不是所有的指令都能用的上的,我在这里全部写出来是为了让大家认识一下,方便大家以后的学习,我归纳了一下常用的指令,这些指令大家一定要熟练掌握才可以啊。</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>MOV
数据传送指令 PUSH,POP 堆栈指令 CMP 比较指令 LEA 取地址指令
XOR 异或指令 JE,JZ,JMP...(所有的转移指令)</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>一些工具的使用</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>用到的工具包括Fi2.9,Wasm8.9
,UltraEdit</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>一、 Fi2.9
因为现在软件为了保护,另外也为了减少程序的大小,都采用了加壳技术。有人问了"壳是什么呢",在自然界中,我想大家对"壳"这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为"壳"了。
现在我们已经知道"壳"是用来保护程序的,那我们要分析游戏程序,必须先把他的这层壳退掉,我们称之为"脱壳",这个很容易的,因为现在网上有很多的脱壳软件可以脱壳,不过在脱壳前我们必须先知道程序用什么加的"壳",Fi就是这样一个软件,操作很简单,将要分析的软件和Fi放在同一个目录,然后直接运行Fi,在按回车就OK了。
二、Wasm8.9
这是一个用来反汇编程序的软件(反汇编,就是把机器代码转变为汇编代码)。操作很简单,
图一(打开文件) 图二(简单介绍)
首先打开文件,进行反汇编操作,然后选择"串式参考"找到在程序中出现的内容,定位到该地址,进行分析,分析完成,进行修改,加亮当前要修改的指令,然后看"当前指令在文件中的地址偏移",记下这个值。</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>三UltraEdit
是一个功能强大的编辑软件,能直接修改程序的16进制指令代码。</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>实例解析</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>下边以金庸的随地逃为例进行解析。</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>首先将金庸的Loginp.exe文件和Fi放在同一个目录,然后运行Fi,可以看到屏幕如图
可以看到程序用UPX加过壳了,所以首先进行脱壳(由于该文件用UPX加壳后进行了修改,用现成的工具无法脱壳,鉴于会员当前水平的考虑,这个文件的脱壳方法以后讲给大家听,我们直接提供一个脱过壳的文件给会员用于会员的学习),脱过壳之后,运行Wasm进行反汇编,然后点"串式参考",找到"次处非逃离点"如图</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>程序如下(请打开MagicWin)</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>:00616376
6681B8EC470000AD65 cmp word ptr [eax+000047EC], 65AD<---此处比较是否为逃离点
:0061637F 7577 jne 006163F8 <---不是就跳走</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>* Referenced by a (U)nconditional
or (C)onditional Jump at Address:|:0061636D(C)|:00616381 8BC3 mov eax,
ebx:00616383 E8D4D1FFFF call 0061355<----一个随机处理判断是否逃跑成功:00616388
84C0 test al, al:0061638A 7440 je 006163CC <----不成功就跳走:0061638C
66C743530600 mov [ebx+53], 0006:00616392 B81E000000 mov eax, 0000001E:00616397
E80CC9DEFF call 00402CA8:0061639C 890424 mov dword ptr [esp], eax:0061639F
DB0424 fild dword ptr [esp]:006163A2 DB2DDC656100 fld tbyte ptr
[006165DC]:006163A8 DEC9 fmulp st(1), st(0):006163AA D80550666100 fadd dword ptr
[00616650]:006163B0 DB2DDC656100 fld tbyte ptr [006165DC]:006163B6 DEC1 faddp
st(1), st(0):006163B8 DD9BF8D06500 fstp qword ptr [ebx+0065D0F8]:006163BE 9B
wait:006163BF C6435201 mov [ebx+52], 01:006163C3 8BC3 mov eax, ebx:006163C5
E8924E0000 call 0061B25C:006163CA EB3F jmp 0061640B</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>* Referenced by a (U)nconditional
or (C)onditional Jump at Address:|:0061638A(C)|:006163CC A11CA36700 mov eax,
dword ptr [0067A31C]:006163D1 8B00 mov eax, dword ptr [eax]:006163D3 33C9 xor
ecx, ecx</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>* Possible StringData
Ref from Data Obj ->"発瞒ア毖"|:006163D5 BA5C666100 mov edx,
0061665C:006163DA E83D9BF7FF call 0058FF1C:006163DF 8A8368010000 mov al, byte
ptr [ebx+00000168]:006163E5 04F9 add al, F9:006163E7 2C02 sub al, 02:006163E9
7320 jnb 0061640B:006163EB 33C9 xor ecx, ecx:006163ED 33D2 xor edx, edx:006163EF
B0DE mov al, DE:006163F1 E8C6AE0100 call 006312BC:006163F6 EB13 jmp 0061640B</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>* Referenced by a (U)nconditional
or (C)onditional Jump at Address:|:0061637F(C)|:006163F8 A11CA36700 mov eax,
dword ptr [0067A31C]:006163FD 8B00 mov eax, dword ptr [eax]:006163FF 33C9 xor
ecx, ecx</blink></b></font></p>
<p align="center"><font size="3" color="#666666"><b><blink>* Possible StringData
Ref from Data Obj ->"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -