您的位置:首页 > 其它

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、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: