OllyDbg简价
:
OD窗口 分为4部分
1、反汇编窗口
2、寄存器窗口
3、数据窗口
4、堆栈窗口
Alt+B:断点窗口
F7: 单步步入 F8:单步步过
ctrl+f9: 执行到返回
数据窗口
DU 地址 使用 UNICODE 格式转储 (统一的字符编码标准,采用双字节对字符进行编码)
DC 地址 使用 ASCII 格式转储 ASCII 码的字符集
DB 地址 十六进制 byte 格式转储 显示Byte格式
DD 地址 使用堆栈格式转储 显示DWORD格式 4Byte
DA 地址 转储为反汇编 显示反汇编代码
表达式 计算
DD [[[[95E800+1c]+24]+8a4]+0C]+0*4 物品对象
DU[[[[[[95E800+1c]+24]+8a4]+0C]+0*4]+68]+0C 物品名字
接下来我们用 OD与CE来找一下对象血值,血值上限
注意 血值地址每次都会变化,实践时记得重新用CE找过
dd 04F7398C 血值
dd 04F7398C+4 魔力值
dd 04F7398C+18 血值上限
dd 04F7398C+1C 魔力值上限
// 角色对象 血值,魔力偏移
对象+3C X坐标
对象+40 h坐标
对象+44 Y坐标
对象+25C 当前血值
对象+260 当前魔力值
对象+274 血值上限
对象+278 魔力值上限
游戏的基址:游戏的基址其实就是类实例对象指针指向的地址;这个地址只要游戏不更新就是固定的,是一个常量;
在这里我举个例子
比如有个游戏类定义如下:
type
GameObj=class
Blood: integer;//血值
Magic: integer;//魔力值
BloodMax: integer;//血值上限
MagicMax:integer;//魔力值上限
x :single; //X坐标float
h :single; //h坐标
y :single; //Y坐标
grade :integer;//等级
end;
var
role:GameObj;
44D999:
Ctrl+G : 转到44D999:
dd [450bd4]+4 :血值
dd [450bd4]+8 :魔力值
dd [450bd4]+C :血值上限
dd [450bd4]+10:魔力值上限
dd [450bd4]+14: X坐标
dd[450bd4]+18:H坐标
dd [450bd4]+1C:Y坐标