YJX_rxjh_15_2.5.8

2.5.8  F1~F10技能栏数组基址+偏移

【01:30】观察到 技能栏有两个,今天我们找技能栏1的F1~F10

【01:55】∵ 数组的地址 在32位的编程中 是4字节,数组结构 打住如下 ... ...

【03:15】技能栏中每一格放的 可能是对象的ID,也可能是对象的首地址。(ZC: 我倒没想到可能是对象的ID,我的思维方式需要变通啊,不能一根筋 需要有多种的想法啊... ! !)

【04:45】F1技能格 放空,CE找0  【05:00】这里 CE的搜索范围(内存扫描选项)是"32字节",扫不出来的话 扩大范围选"全部" 

  【05:50】F1技能格 放入 动作/物品/技能 等对象  【06:50】CE 再次扫描 数值>0

  【07:20】F1技能格 移除 放入的对象  【07:40】CE 再次扫描 数值==0

  【08:23】移动角色

  【10:35】CE 再次扫描 未更改的数值

  ZC: 然后 灵活的 反复上面的步骤

  【12:15】看到CE中扫出了连续的只相差1byte的地址。【12:35】F1技能格 放入/移除 对象时它们改变的步调一致

    【12:56】我们任选一个(ZC: 个人觉得 任选 是不太对的吧,至少应该看看 是否是属于 同一个 DWORD吧... 或者 从低位开始 一个一个的检查过去),CE 访问改地址的代码

    【16:40】比较像数组的汇编指令

      【17:15】一个经验: 一般是要有 mov指令的,别的指令一般不可能是。∵ 从不同的代码来分析 难易程度是不同的(ZC: ∴ 一般选 mov指令? 这样分析 比较简单?)

    【18:10】CE中 再选一个地址,看看刚才是否出现的指令和刚才一样(他 猜想应该是一样的)

  【21:40】edi+0x3d8 是F1~F10技能格数组的基址(ZC: 那这里的edi里面存储的应该也就是 某个类型的对象喽)

  【19:55】ZC: 感觉视频里面的CE搜索的时候 是按照byte来搜索的啊... 可以看到【22:05】处0xD957069存放的已经不是0了,但是0xD957068还是被列了出来。∵我觉得 从0xD957068开始的DWORD的值肯定!=0 ∴ 0xD957068不应该被列出来啊...

  【22:08】CE再次 打开 当前已经打开的进程,这样CE就卸载了当前的进程了

 

【23:45】OD查找,前几个都比较难找,这一个居然 直接在上一条指令中看到了 基址...(ZC: 是不是 基址,应该可以用 CE搜索一下基址中的值,然后看看搜索结果中列出来的地址是否为绿色)

  【24:50】这里出现的基址,就是上一课中找到的“角色基址”  【25:05】看到上一节课找到的“角色基址” 不是这个值...

  【26:33】得到的公式 查看 游戏中真实的情况,是吻合的  【27:30】调整游戏中F1~F10技能栏的情况 再来验证一下  【27:50】再次验证

 

【28:20】找 F1~F10技能栏 对象访问CALL,以普攻CALL为例 都是先访问数组对象 -->具体对象 --> 有相关属性 区分是动作还是使用物品 --> 再调用具体的CALL

  【28:48】F1~F10技能栏 数组首元素 内存访问断点 ==> 不行,随时都会断下 ==> 需要借助 CE,下节课再讲

 

【29:30】CE 这次 换一种方法来用

  【??:??】F1~F10技能栏 数组首元素 显示访问该地址的代码

  【31:13】按下F1,新出现2个汇编指令

1、

2、

 

posted @ 2016-05-13 16:23  DebugSkill  阅读(160)  评论(0编辑  收藏  举报