YJX_rxjh_22_3.2.4
2016-05-18 16:26
288 查看
走路功能集成到函数
(a)、走路CALL 状态开关分析
(b)、分析状态开关 基址+偏移
(c)、完成走路CALL函数Walk(x,y)
【00:45】走路CALL基本都已经分析完毕,还是没有找到精确的走路CALL。换一个思路,从 走路CALL的状态开关来分析
【01:00】∵ 我们发现,它有一点特殊,光用CALL 它是不能实现的
【01:08】什么是 “状态开关”?
【01:20】假设角色 有某个属性,这个属性就是一个状态值
b:1 表示 走路
b:0 表示 站立(不走路)
或者是 相反 0表示走路 1表示站立,当然 也可能是其它的一个标志位
但是,用 0/1 布尔值真/假 的可能性 要大一些
【02:25】CE,我们先假设 站立时 b==0 。但是为0的值太多了,搜索起来肯定很慢,于是我们先让角色跑起来(此时 b的状态假设为1)
【03:20】“1”,“精确数值”,“4字节”,“全部”。“内存扫描选项”一定要选“全部”,这样搜索到的可能性要大一些
【03:55】让角色停下来,CE搜索 0
【04:22】CE 反复操作 搜索 1/0
【05:10】CE搜索 重新来过
【06:45】最后的结果,大约就是这几个地址了
【07:35】还要用 CE找 当前坐标 目的地坐标
【07:50】找坐标的目的 为了 通过 改这个状态 看它能否实现走路("精确数值"、"浮点"、"简化"、"全部")
【08:47】CE搜索的 设置改成 "精确数值"、"浮点"、"完整(默认)"、"全部" (ZC: 这里 居然也没有填写 小数部分...这样能扫的到正确的结果?)
【10:08】他说 这样找出来的地址是不准确的 (ZC: 你明知道 还这样弄? 想蒙一把?)
【10:25】手动添加 上节课找到的 x坐标 (浮点数,这里的 0x1F78 不是“偏移量”。 ZC: 这里0x1F78是否放入“偏移量” 其中的区别,貌似不太理解,实际测试一下再说...)
【10:50】这里 设置成了指针,应该是直接看这个地址里面的值(ZC: 而非指针指向的地址的值) (点击 "移除"按钮)
【11:05】复制上面的 浮点数值 来搜索 "完整(默认)"的浮点数 (ZC: 为何不直接搜索 精确的 4byte值?)
分析出来 大概哪些个是目的地址,哪些个是当前地址
【13:30】用CE修改 “当前X”和“目的地X” 的值(最后一个 没有修改,∵前面的改了 它就自动改变了... ZC: 为何会这样?它们的地址不同啊,游戏里面有机制 会统一它们的值?)
【13:55】CE修改 几个 走路/站立的“状态开关”的值
【14:00】有2个值 改变不了,使用CE的“锁定”功能,把它们的值都锁定为 1 。但是 角色 还是没有移动... 【14:17】将所有的“锁定”全部去掉。看来 这几个值还没有找进去(ZC: 就是“状态开关” 没有找对的意思吧?)
【14:40】"0"、"精确数值"、"字节"、"全部" (ZC: 再次找“状态开关”)
【15:12】角色 走路 时,CE找"1" 【15:30】角色 站立 时,CE找"0"
【17:58】最后找到这几个结果 【18:15】把这几个值添加进来
【18:25】看到 以"06"开头的,感觉上就是偏移 可能最后2个不是很重要
【19:00】看来 “目的地X”变成494的2个地址关系比较大,就修改第1个“目的地X”
【19:12】把找到的“状态开关” 全部改为1,前面的几个修改还不成功 当最后一个修改为1之后 角色就开始跑起来了 前面的几个地址的值也变成1了。于是可以确定 “目的地X”和“状态开关” 的地址了
【20:10】ZC: 为何能确定0x0146DFF8是一个基址?前面搜出来的时候是绿色?翻了前面的【12:27】还真是绿色的...它 记性这么好?还是有什么诀窍?
【20:40】现在 测试,角色又不动了...
【21:15】∵ “当前X”已经是 -120.???了,它实现了一个“瞬移”的...
【22:08】CE中,再来改一下 【22:20】最后一个“目的地X”修改之后,“当前X”就立即变成19.???了(ZC: 又瞬移?)
【22:28】直接将 最后2个 “状态开关” 改为1(前面2个没有改它),角色就跑起来了,前面2个的值也自动变成1了...
【23:43】确定了 2个关键的“目的地X” 和 2个关键的“状态开关”
【25:00】汇编fcomp指令,这是一个浮点数的比较
【28:22】这个我们留到用OD来查找。0x06600168 用OD来查找 目的地坐标基址
【28:50】CE中 分析 2个关键的“状态开关”。 EBX是上节课找到的基址0x065FEC8C
【31:25】用汇编指令看,是用DWORD比较 是否为1... 偏移0x14F4
【31:45】最后1个“状态开关” 的比较指令,是用的byte进行比较的(ZC: 看来确实CE应该搜索byte)。0x14F8是偏移。【32:00】EBX的值也是0x065FEC8C (ZC: 这里还有一个[ESI+1C] 就直接无视了?∵它没有EBX?)
【33:53】ZC: “这也是对0x14F8进行写入” 这能直接看出来?不用验证一下?
【34:12】第1个“状态开关” 的指令分析
【34:25】它是一个数组访问方式(ZC: 他一眼就看出来了...)
【35:20】讲解:为什么这个值 要置0
【35:50】ZC: 这个语句明明是置1啊...???
【36:13】到底它是置0还是置1,等会我们实践一下就知道了
【36:25】第2个“状态开关” 的指令分析
【36:58】应该是置0虽然我们搜索到的时候是置1的,但是是它跑起来的时候才是1,在跑之前 值应该是1,感觉好像是这样,也有可能是全置1
1、
2、
(a)、走路CALL 状态开关分析
(b)、分析状态开关 基址+偏移
(c)、完成走路CALL函数Walk(x,y)
【00:45】走路CALL基本都已经分析完毕,还是没有找到精确的走路CALL。换一个思路,从 走路CALL的状态开关来分析
【01:00】∵ 我们发现,它有一点特殊,光用CALL 它是不能实现的
【01:08】什么是 “状态开关”?
【01:20】假设角色 有某个属性,这个属性就是一个状态值
b:1 表示 走路
b:0 表示 站立(不走路)
或者是 相反 0表示走路 1表示站立,当然 也可能是其它的一个标志位
但是,用 0/1 布尔值真/假 的可能性 要大一些
【02:25】CE,我们先假设 站立时 b==0 。但是为0的值太多了,搜索起来肯定很慢,于是我们先让角色跑起来(此时 b的状态假设为1)
【03:20】“1”,“精确数值”,“4字节”,“全部”。“内存扫描选项”一定要选“全部”,这样搜索到的可能性要大一些
【03:55】让角色停下来,CE搜索 0
【04:22】CE 反复操作 搜索 1/0
【05:10】CE搜索 重新来过
【06:45】最后的结果,大约就是这几个地址了
【07:35】还要用 CE找 当前坐标 目的地坐标
【07:50】找坐标的目的 为了 通过 改这个状态 看它能否实现走路("精确数值"、"浮点"、"简化"、"全部")
【08:47】CE搜索的 设置改成 "精确数值"、"浮点"、"完整(默认)"、"全部" (ZC: 这里 居然也没有填写 小数部分...这样能扫的到正确的结果?)
【10:08】他说 这样找出来的地址是不准确的 (ZC: 你明知道 还这样弄? 想蒙一把?)
【10:25】手动添加 上节课找到的 x坐标 (浮点数,这里的 0x1F78 不是“偏移量”。 ZC: 这里0x1F78是否放入“偏移量” 其中的区别,貌似不太理解,实际测试一下再说...)
【10:50】这里 设置成了指针,应该是直接看这个地址里面的值(ZC: 而非指针指向的地址的值) (点击 "移除"按钮)
【11:05】复制上面的 浮点数值 来搜索 "完整(默认)"的浮点数 (ZC: 为何不直接搜索 精确的 4byte值?)
分析出来 大概哪些个是目的地址,哪些个是当前地址
【13:30】用CE修改 “当前X”和“目的地X” 的值(最后一个 没有修改,∵前面的改了 它就自动改变了... ZC: 为何会这样?它们的地址不同啊,游戏里面有机制 会统一它们的值?)
【13:55】CE修改 几个 走路/站立的“状态开关”的值
【14:00】有2个值 改变不了,使用CE的“锁定”功能,把它们的值都锁定为 1 。但是 角色 还是没有移动... 【14:17】将所有的“锁定”全部去掉。看来 这几个值还没有找进去(ZC: 就是“状态开关” 没有找对的意思吧?)
【14:40】"0"、"精确数值"、"字节"、"全部" (ZC: 再次找“状态开关”)
【15:12】角色 走路 时,CE找"1" 【15:30】角色 站立 时,CE找"0"
【17:58】最后找到这几个结果 【18:15】把这几个值添加进来
【18:25】看到 以"06"开头的,感觉上就是偏移 可能最后2个不是很重要
【19:00】看来 “目的地X”变成494的2个地址关系比较大,就修改第1个“目的地X”
【19:12】把找到的“状态开关” 全部改为1,前面的几个修改还不成功 当最后一个修改为1之后 角色就开始跑起来了 前面的几个地址的值也变成1了。于是可以确定 “目的地X”和“状态开关” 的地址了
【20:10】ZC: 为何能确定0x0146DFF8是一个基址?前面搜出来的时候是绿色?翻了前面的【12:27】还真是绿色的...它 记性这么好?还是有什么诀窍?
【20:40】现在 测试,角色又不动了...
【21:15】∵ “当前X”已经是 -120.???了,它实现了一个“瞬移”的...
【22:08】CE中,再来改一下 【22:20】最后一个“目的地X”修改之后,“当前X”就立即变成19.???了(ZC: 又瞬移?)
【22:28】直接将 最后2个 “状态开关” 改为1(前面2个没有改它),角色就跑起来了,前面2个的值也自动变成1了...
【23:43】确定了 2个关键的“目的地X” 和 2个关键的“状态开关”
【25:00】汇编fcomp指令,这是一个浮点数的比较
【28:22】这个我们留到用OD来查找。0x06600168 用OD来查找 目的地坐标基址
【28:50】CE中 分析 2个关键的“状态开关”。 EBX是上节课找到的基址0x065FEC8C
【31:25】用汇编指令看,是用DWORD比较 是否为1... 偏移0x14F4
【31:45】最后1个“状态开关” 的比较指令,是用的byte进行比较的(ZC: 看来确实CE应该搜索byte)。0x14F8是偏移。【32:00】EBX的值也是0x065FEC8C (ZC: 这里还有一个[ESI+1C] 就直接无视了?∵它没有EBX?)
【33:53】ZC: “这也是对0x14F8进行写入” 这能直接看出来?不用验证一下?
【34:12】第1个“状态开关” 的指令分析
【34:25】它是一个数组访问方式(ZC: 他一眼就看出来了...)
【35:20】讲解:为什么这个值 要置0
【35:50】ZC: 这个语句明明是置1啊...???
【36:13】到底它是置0还是置1,等会我们实践一下就知道了
【36:25】第2个“状态开关” 的指令分析
【36:58】应该是置0虽然我们搜索到的时候是置1的,但是是它跑起来的时候才是1,在跑之前 值应该是1,感觉好像是这样,也有可能是全置1
1、
2、
相关文章推荐
- JAXB - XML Schema Types, Defining Subtypes
- 查漏补缺1
- stm32F107VC通过模拟SPI方式读取LIS3DH三轴加速度传感器数据
- NFMI
- Saiku AdminConsole
- J2SE(十八)Object之Clone
- [sensorhub]MT6752/32平台sensor hub KK和L版本配置方法
- Android 基于Message的进程间通信 Messenger完全解析
- Microsoft Azure系列之六 如何为Azure 云服务分配保留IP地址
- iOS学习之—— NSMakeRange
- 图像识别常用的三角函数公式总结!
- 【Bugly干货分享】关于 Android N 那些你不知道的事儿
- LeetCode 345 Reverse Vowels of a String (in java)
- 散热器
- 自己写一个java.lang.reflect.Proxy代理的实现
- Java代码优化(长期更新)
- hdu 4667(凸包)
- docker等容器技术在云中如何定位
- 面试题22
- R语言︱SNA-社会关系网络—igraph包(社群划分、画图)(三)