美文网首页
通过当前血找二叉树(一)

通过当前血找二叉树(一)

作者: DF_Sky | 来源:发表于2019-06-22 11:06 被阅读0次

我就是个菜逼 很菜的那种 就是做个记录 以后忘了可以复习下 也顺便分享下自己的学习思路方法

因为天龙八部人物信息是二叉树结构,所以通过CE没办法直接跟到基址,会进入一个循环,所以我们通过OD来跟踪
还是要先通过CE找到当前血地址

搜索当前血地址 发现只有3个选项 我们通过打坐改变血值 发现只有一个地址的值 在跟着变化
这样我们就省事了 直接在OD跟这个来源就行了

image.png

然后在OD里面 DD这个地址 下一个写入断点 也就是说当 这个地址被写入的时候就断下 然后我们跟踪来源


image.png

下断后 我们继续通过打坐 改变血值 这样就会断下

断下后 我们删除硬件断点 不然会一直断下


image.png

然后 点击删除 我们刚刚下的那个断点 然后按F9 或者点那个运行按钮 让游戏运行起来 断太久游戏可能会断开

断下后 我们要看断下的上一行代码 才是我们需要的地方


image.png

mov dword ptr ds:[ecx+0x2CF0],eax
吧eax 写到 [ecx+0x2CF0] 我们发现eax就是我们的血值 大家可以转成10进制看下
也就是说 [ecx+0x2CF0] 就是当前血 我们可以自己坐下标记 或者直接在OD中注释
这时候 我们就要找ECX的来源
往上翻 找ECX 在哪里被赋值

我们发现往上翻第三行发现 有这样一句代码
014B5658 8B4E 04 mov ecx,dword ptr ds:[esi+0x4] ;
也就是说 ECX来源[esi+0x4]
这时候 血地址是这样的 [esi+0x4]+0x2CF0
我们继续往上翻 到子程序头部

image.png
014B546A 8BF1 mov esi,ecx
发现 esi来源于ecx (一个小提示: ecx一般会来源一个全局变量,也就是说他不是在函数内部赋值的 ecx的赋值会在调用这个函数的地方)
这时候 血地址是这样的 [ecx+0x4]+0x2CF0
014B5440 55 push ebp 我们一直看到这行 也就是头部 也么有看到对ecx赋值的地方
正如上面所说 ecx来源于一个全局 或者 程序集变量 也就是说 他是在调用这个函数的地方赋值的
所以这时候 我们要在头部下断点 继续跟ECX的来源
014B5440 55 push ebp 也就是在这句代码处 下断 然后我们改变当前血 就会断下来
image.png
我们直接在反汇编窗口中跟随
image.png
我们看上一行 也就是
01777414 E8 27E0D3FF call Game.014B5440 这个地方是调用 刚刚那个函数
这个 014B5440 正是我们刚刚 那个头部地址
我们继续找ECX来源于哪里
发现 上面就有一句 01777412 8BCB mov ecx,ebx
他来源于ebx 这时候血地址就是 [ebx+0x4]+0x2CF0
我们就要继续找ebx的来源 往上看
image.jpg
发现这样一句代码
017773BC 8B9E B4010000 mov ebx,dword ptr ds:[esi+0x1B4] ;
这时候血地址就是 [[esi+0x1B4]+0x4]+0x2CF0 image.png
017773A8 FF50 48 call dword ptr ds:[eax+0x48]
017773AB 8BF0 mov esi,eax
我们发现esi来源eax
这时候我们的血地址就是 [[eax+0x1B4]+0x4]+0x2CF0
按照上面的套路 我们可能会往上看eax来源于哪里
但是这里不是这样的
需要注意的是 eax一般是函数的返回值 也就是call执行完的返回值 会赋值给eax
所以 这时候 我们要看他上面是否有执行call 如果有 我们要进call内部 找eax的来源
发现上面刚好有一句 call dword ptr ds:[eax+0x48] 但是这好像不是个固定地址
所以我们要下断 游戏断下后 然后F7进入call内部 找eax来源
其实这里call内部就是在遍历附近对象二叉树
而我们这里在这里调用二叉遍历 其实是在遍历周围环境 包括人物怪物Npc 箱子 采集物等 因为我们是在跟踪人物信息 我们自己其实也在这个二叉树结构内
这也就是为什么 我们会通过CE跟不到基址 进入一个循环
进入这个call内部
image.png
天龙的这个 就是标准的二叉树遍历
不懂的网上百度搜一下 我也不懂 百度随便看了下
给大家搜了个 通俗易懂的例子 但凡学过编程 且入门了
https://www.cnblogs.com/VectorZhang/p/5603358.html 应该是看得懂的
先到这里 下一节 分析二叉树结构

相关文章

  • 通过当前血找二叉树(一)

    我就是个菜逼 很菜的那种 就是做个记录 以后忘了可以复习下 也顺便分享下自己的学习思路方法 因为天龙八部人物信息...

  • 通过当前血找二叉树(二)

    上一节我们找到了二叉树遍历的地方这节我们详细来分析下这个二叉树我们可以在头部下断 然后单步调试 一步步走 分析01...

  • 之字形从上到下打印一棵二叉树

    之字形从上到下打印一棵二叉树 思路 通过2个栈交替保存当前行和它的下一行的数据 通过两个变量记录栈的当前索引和下个...

  • 面试题34:二叉树中和为某一值的路径

    题目:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。 思路:通过前序遍历树 如果当前节点...

  • XGBoost详解

    Prerequisite: CART回归树 CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点...

  • golang leetcode 1103. 二叉树寻路

    思路: 通过当前label计算父节点 题目限制 1 <= label <= 10^6完全二叉树每一层的节点和节点开...

  • 二叉排序树BST

    概念 BTS: 对于任何一个非叶子节点,左子节点都比当前节点小,右子节点都比当前节点大 平衡二叉树和满二叉树,完全...

  • JavaScript数据结构11——线索二叉树的遍历

    线索二叉树包括了 将一个二叉树转为线索二叉树 建立一个头结点,形成循环双向链表 遍历二叉树 控制台输出 当前到达节...

  • 平衡二叉树

    题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路法一:每次判断当前树的左右子树高度差,然后判断子树的子...

  • 搜索二叉树的实现

    定义二叉树的节点:包含左节点,右节点和当前结点的值 节点之间的比较方法:通过自定义的Comparator或默认的C...

网友评论

      本文标题:通过当前血找二叉树(一)

      本文链接:https://www.haomeiwen.com/subject/zuumqctx.html