您的位置:首页 > 其它

YJX_rxjh_16_2.5.9

2016-05-13 22:51 267 查看
2.5.9  F1~F10技能栏 功能CALL分析

【02:00】猜测/假设,分析 上节课得到的指令地址 位于什么地方,大概的情况是什么样子的

  【05:00】找上层的CALL,看看 本CALL有哪些参数

  【06:00】重复按下 F1~F10技能栏中的技能/物品,重复断下 查看 参数EAX的值

  【06:40】又出现一个基址

  【07:20】刚才是用 鼠标操作 F1~F10技能栏,现在使用 键盘操作 F1~F10技能栏,刚才找到的CALL(已经对它设置了断点) 并不会断下来

  【07:23】OD反汇编窗口,双击CALL指令 进入相应的CALL函数中

    【07:27】转到 另一个调用本CALL的函数中  【07:31】这里才是 键盘操作 F1~F10技能栏-->调用 F1~F10技能栏对象CALL 的地方

      【08:00】分别按下 F1/F2,测试/观察 函数参数的区别

    【08:20】通过这里来找的话,就比较复杂,这里要 往上寻找 ECX(EBX)的来源 (ZC: 但是一般可以先猜测一下,这里的ECX是哪种对象,然后验证一下。如果所有的都猜测错误的话,就要老实的往上查找EBX的来源了)

    【08:40】移到函数头部来看一下,这个要相对复杂一些  【08:49】找到了 EBX的来源 ==> 上层CALL的ECX的值 --> 本函数头部设置断点的话,立马就会断下 --> 【09:15】通过断下来的堆栈窗口,来到上层CALL,【09:25】继续找ESI的来源【09:33】这里有一个ECX的值来自基址 --> 此过程相对复杂一些

      【10:58】此时,看到 键盘操作 找到的 ECX来源[0x144C590] 和 鼠标操作找到的ECX来源 相同 (ZC: 而且 我觉得还是需要再设置断点,验证一下 是否正确)

【12:18】应该说 含有常量0x144C590的指令不止一个,我们来搜索一下 (ZC: 就算不知一个,你搜索它们 又有何用?要干嘛?)

  【13:55】ZC: 这里的 偏移+0x23C 我忘了是什么了... 看到【18:20】貌似是一个某类型的对象

【15:20】ZC: 终于明了 他 保存所谓的“特征码”的用途了 : 一般来说 游戏更新之后,基址之类的地址会变,函数的地址也会变,但是一般 函数里面的实现代码不会变(或者说 只会少数几个变 不会每个都变),于是在游戏更新之后 我们就可以用过“查找命令序列”的方式 来定位我们以前找到的关键的指令位置,省的每次都要从头开始分析。

  【15:43】注意没有 键入"dword ptr ds:",这个用不着加的

  【16:10】另外一种 特征码 搜索的方式,是根据 常量 来搜索:OD反汇编窗口 --> 右击 --> 查找 --> 所有常量 (ZC: 这个方式 他就开了一个对话框 没有真正使用 ...)

  【16:25】或者是使用 : OD反汇编窗口 --> 右击 --> 查找 --> 二进制字串

    【16:37】ZC: 他 这里键入的是 汇编指令的 机器码...

  【17:00】一般来说,CALL 绝对地址 不能最为 特征码 来用于搜索,∵ 游戏更新,它也会被更新掉(ZC: 貌似 CALL相对地址也不行,也可能会受更新的影响。CALL寄存器 的话,应该可以吧?会不会 更新前是 CALL寄存器 更新后变成CALL相对/绝对地址了?)

【17:15】实现 我们找到的CALL的调用

  【19:03】ebp / esp ==> 栈底指针 / 栈顶指针

  ZC:搜索的资料:

  “
    ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
    EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部
  ”

1、

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