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、
【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、
相关文章推荐
- STM32 ADC注入通道的使用
- 记忆信息的三级加工模型
- 更换本地的yum源为阿里云提供的镜像
- Java 连接池的工作原理 **
- leedcode(9),Reverse Linked List(python)
- CentOS 7 安装 fcgiwrap时提示 FastCGI library is missing 的问题
- git使用
- 指针学习一
- 体系结构之质量属性
- Windows Server 2008 R2 Acitve Directory域服务器安装与配置
- jQuery 判断是否选中
- shell script 交互式脚本,可以读取命令行参数、选项,用户输入数据
- 大搬家
- Redis之事务简单小例子
- 看图说说JVM新生代垃圾收集器
- Android Studio代码自动补全突然消失
- opecv2.4.9 samples编译问题解决
- 使用ASP.NET State Server实现多应用程序间共享Session State
- 自定义控件
- 自制奇葩vb面试题,看你能对几道