查看: 147|回复: 1

[转载图文] 010 数据结构逆向—链表

[复制链接]

29

主题

37

帖子

1

精华

VIP

Rank: 16

学币
360
荣耀
0
rank
200
违规
0

鬼斧神工

发表于 2020-6-9 01:39:47 | 显示全部楼层 |阅读模式
                                                                                        文章目录

    • 逆向周围对象链表
    • 总结

之前我们已经通过人物的血量找到了人物的属性数组,接下来学习一下链表。逆向周围对象链表  这一次要找的目标是人物周围的对象链表,包括人物周围的NPC和怪物等等。找这个数据结构的突破口有很多,可以通过人物本身,也可以通过NPC和怪物。
  这里还是以人物血量为突破口,之前我们已经用人物血量去找到了属性的数组,但是同一个突破口通过不同的访问代码可以逆向分析出不同的数据。

010 数据结构逆向—链表

010 数据结构逆向—链表
  和之前的方式一样,用CE找到当前的人物血量,然后在这个位置下硬件访问断点

010 数据结构逆向—链表

010 数据结构逆向—链表
  点击当前的人物血量

010 数据结构逆向—链表

010 数据结构逆向—链表
  断点断下,[eax+8]是人物的血量,追eax的数据来源,eax来自[esi+0xC],继续往上追esi
血量=[esi+0xC]+8

010 数据结构逆向—链表

010 数据结构逆向—链表
  esi来自于ecx,返回上层找ecx

010 数据结构逆向—链表

010 数据结构逆向—链表
  ecx又来源于ebx
血量=[ebx+0xC]+8

010 数据结构逆向—链表

010 数据结构逆向—链表
  ebx来源ecx

010 数据结构逆向—链表

010 数据结构逆向—链表
  ecx来自[esi+C]
血量=[[esi+C]+0xC]+8

010 数据结构逆向—链表

010 数据结构逆向—链表
  在这里查看一下血量的值,每一次断点断下,存储血量的地址和esi的值都会不断发生变化。
  这个地方的地址一直发生变化说明是已经来到了一个数据结构,如果这个地方单纯的存放的是人物血量的话,就是基址+偏移的方式,不会发生改变。
  继续往上追esi

010 数据结构逆向—链表

010 数据结构逆向—链表
  esi来自[eax]
血量=[[[eax]+C]+0xC]+8
  eax这个时候只有两个值在发生变化,而且偏移表达式的地址,不管断下多少次都没有发生改变。
  从这个地方的变化说明esi的值不来源于eax,也就是说当前的代码不是顺序执行的,有可能是进到了循环里面。
  那么就有必要分析一下当前的这段代码

010 数据结构逆向—链表

010 数据结构逆向—链表
  这里有一个向上的跳转是当前的循环尾部,jmp跳转的目标地址是循环头部,中间的代码相当于是循环体了。

010 数据结构逆向—链表

010 数据结构逆向—链表
  esi不来自循环体外的eax,也就说明是来自循环体内的[esi],esi再往上找还是没有发现来源,说明当前的这一句代码一直在循环取值。
  如果和数据结构联想到一起的话,很明显这个地方是一个单向链表,C++代码如下
class Node
{
public:
    Node<T> *next;
    T data;
  上面这段代码就是通过对Node节点的循环遍历,来找到想要的目标节点。跳出循环体外

010 数据结构逆向—链表

010 数据结构逆向—链表
  esi来源于[eax],eax就是当前的链表头,这里可以对当前的链表进行取值
第一个对象血量:[[[[eax]]+C]+0xC]+8
第二个对象血量:[[[[[eax]]]+C]+0xC]+8
第三个对象血量:[[[[[[eax]]]]+C]+0xC]+8
  我们已经找到了链表的数据结构,这个时候就没有必要继续往上追了,意义不大。剩余的对象属性各位可以自己去分析
总结  对于链表的逆向来说,需要时刻关注追数据过程中每一步的数据结构变化,特别是变化比较明显的那一种。识别链表的标识在于是否有汇编代码在遍历当前的链表不断进行取值,例如:
mov eax,[eax];
  最后,附上Github地址,里面有游戏下载链接和相关工具,需要请自取:
https://github.com/TonyChen56/GameReverseNote


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
嘿嘿

0

主题

21

帖子

0

精华

初级会员

Rank: 4

学币
12
荣耀
0
rank
0
违规
0

    发表于 2020-7-1 01:07:48 | 显示全部楼层
    看了LZ的帖子,我只想说一句很好很强大!
    学逆向论坛-免费的逆向学习论坛
    微信公众号
    快速回复 返回顶部 返回列表