汇编指令
汇编指令的一般结构:
mov ecx,[rsi+07E0]
命令 结果去向,数据来源
操作码|数据1|数据2
操作码一般长度为1-3字节
寄存器和访存
x86寄存器
x86架构下只有16个寄存器
rax r8
rdx r9
rcx r10
rbx r11
rsi r12
rdi r13
rsp(特殊用途) r14
rbp r15
访问内存
一般使用中括号内既是访问内存地址
[01350CB0]
[rax]
[rax+10]
规定
寄存器和中括号可以在任何位置使用
一条指令中最多有一处访存
代码注入方式
AOB(array of byte)
原理:一般游戏的更新不是修改已有代码时,代码的只是位置发生变化,那编译到程序中的汇编命令的操作码间的相对位置就不会发生变化,这时将操作码视作数据来定位,使用 准确操作码|地址|地址|准确操作码|地址|地址... 的模糊方式来找到准确的注入点
特殊标签:
绝对地址->其后的指令位于内存的这个位置
普通标签:
其后的地址位于内存的某个位置->标签获得对应的地址
cheatengine
直接寻找数据
直接通过游戏变化查找对应的变化数据
间接寻找数据
同类数据
受同一指令影响的数据
寻找指令
已知数据
连续内存区域
辅助信息查找
tutorPW
- Step 5: Code finder (PW=888899) 冻结指令
- Step 6: Pointers: (PW=098712) 寻找指针
- Step 7: Code Injection: (PW=013370) 指令注入
- Step 8: Multilevel pointers: (PW=525927) 多层指针
- Step 9: Shared code: (PW=31337157) 注入程序编写