万能遍历大法之超激斗之已接任务

2021-01-28 05:56:26 李良人 60

飞郁网络培训有限公司

随着游戏行业和游戏模式的发展,游戏数据的设计和编写也越来越规范化,在逆向分析时也不会像某些野路子游戏那样无迹可寻。比如很多大公司开发的游戏,虽然在代码流程,加密解密,封号检测方面各有千秋,但是在整体数据框架上却大同小异。下面我们就以超激斗梦境的已接任务为例,来看看任务数据的分析方法。

对于任务数据来说,我们可以使用的突破口很少。分析怪物我们可以从选怪,打怪,血量,名字坐标,ID等方向入手,但是任务,我们只有任务名字描述,任务需求以及任务标志上入手。任务标志,只有一部分游戏会设置,比如幻想神域。而任务需求,很多游戏有要放在UI中存放,比如天涯明月刀。这样我们首选的入手方式就只剩任务名字和描述了,也就是说我们要扫描字符串。

(由于之前的用的账号已经被停封,所以这里只能提供一些关键代码和分析思路)

首先我们通过CE对任务的名字进行扫描,三种编码方式尝试过后,我们发现该游戏的主要编码是UNICODE。选取扫描到的结果,并对其进行修改(这里要注意的是,我们要通过字节集添加结束标识符00的方式来过滤掉有后缀的字符串,保证扫描的准确性,减少不必要的修改操作)。修改之后,发现其中的一个可以改变游戏内的本地显示。

xdbg64中对这个地址下访问断点,游戏可以断在以下位置。

飞郁网络培训有限公司 

在遇到两个寄存器相加时,我们首先要想到的就是这个数据可能是一个结构体数组,其中一个寄存器来源于数组的起始地址,而另一个则是下标乘以结构体的大小。

恰好上面的两条代码验证了这一猜测,这里整理出的公式为r9+rax*1D4+44

我们先去分析R9,返回后可以得到R9来来源于一个+64偏移

飞郁网络培训有限公司 

继续向上分析RCX,又出现了两个寄存器相加的情况add rcx,qword ptr ds:[rdi+68]

RCX又来源于R8*74,说明这里又是一个结构体数组,而数组的起始地址则是RDI+68,整理后如下

[[[RDI+68]+n*74+64]+m*1D4+44 任务名字

这里的n始终为零,怀疑是主线任务的标志,由于账号等级过低无法验证。

继续分析RDI的来源,在返回后的某个CALL里面得到了+200偏移

飞郁网络培训有限公司 

接着分析RAX,可以很快在上面的CALL里面得到基地址

飞郁网络培训有限公司 

这样我们就得到了一个完整的公式,如下

[[[[[7FF715811148]+200]+68]+0*74+64]+m*1D4+44

通过对第一个结构体数组的观察和分析,我们得出这只是一个任务库的遍历,并不能对我们当前的已经任务进行判断,所以我们还需要去分析m的来源。

顺着最开始的位置向上追,返回后可以得到来源于两个寄存器相加,之前分析的第二个数组也在附近

飞郁网络培训有限公司 

这里的R11来源于上面的RDI+78,和下面的RDI+68是同一个RDI,也就是说这里不用继续追了,直接套用基地址+200的公式就可以。

回头来看RSI,发现RSI既有可能来源于上面eax,也有可能来源于下面的+24

飞郁网络培训有限公司 

 

飞郁网络培训有限公司 

如果是来源于eax,则数值为0,这显然是不对,那么就一定来源于下面的RSI+24,而整个的这一片代码是在一个循环里面,说明这其实也是一个结构体数组,而数组下标RSI的数值则每次递增1

下面就是对整个的数据进行观察和分析了,并最终得出以下公式

[[[[7FF715811148]+200]+68]+n*74+64 任务库起始地址

n可能代表任务类型   0为主线任务

[[[[7FF715811148]+200]+68]+n*74+6C 任务库任务数量DOWRD

[[[[[7FF715811148]+200]+68]+n*74+64]+m*1D4+4 任务ID

[[[[[[7FF715811148]+200]+68]+n*74+64]+m*1D4+44]+0 任务名字UNICODE

[[[[[[7FF715811148]+200]+68]+n*74+64]+m*1D4+98]+0 需通关副本UNICODE

[[[[[[7FF715811148]+200]+68]+n*74+64]+m*1D4+118]+0 任务要求UNICODE

=================================================================

 

[[7FF715811148]+200]+78 当前任务数组起始地址

[[7FF715811148]+200]+80 当前任务数量DWORD

[[[7FF715811148]+200]+78]+n*24+4 任务ID DWORD

 

这就是已接任务的分析过程,也是现在大部分游戏的一个分析模式,先取任务库,在对传入库中的下标分析,得出已接任务ID。万能遍历大法,就是如此简单。

黑眼探光明,逆向寻真理!欢迎来飞郁网络培训进行交流。

本篇文章仅供交流学习使用,请勿用于商业用途,多谢支持。


电话咨询
QQ客服