欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]某道游戏任务二叉树组分析

[原创]某道游戏任务二叉树组分析

一:先把分析好的任务结构图放出来

其中有两点要说:
    1.任务的对象组成了一个数组,比如里面的任务一、任务二
    2.任务一、任务二各自指向了一颗树
    3.对于这两颗树
        a)右子树里面放了任务的属性名字,比如任务类型、提示等等,太多图中没有画完
        b)左子树,就是对应属性的数据,比如任务类型的具体数据、提示的具体数据
二:从什么地方入手
1.假设我们需要写一个游戏,一个游戏任务包含哪些部分了,大致如下:
    a.        任务ID,主要发给服务端进行交接做任务的
    b.        任务类型,一个任务是杀怪任务还是传对话任务(跑环,让你到某个NPC旁边)
    c.        任务描述,这个没什么好介绍了
    d.  任务数量
    e.        任务提示
    f.        杀怪或者打怪任务计数器
2.        这里我们从任务描述入手(需找王老板)

3.重新打开游戏,会发现,其中0e1c4b60这个文本又变回来了

4.这个地址0e1c4b60,就是我们重点研究的对象了
三:开始分析
1.对地址0e1c4b60,下硬件写入断点

2. 这里被断下,但是在系统,但是在msvcr80中

其中EDI的信息,就是我们在CE中搜索到的

3.Alt+ F9到,游戏领空,其中ECX和上面系统领空地址一样, E1C4B58

4.继续往上一层,Alt+ F9,就在函数00666e30中,中间单步一遍,发现,上面eax的来源一个call

单步一遍发现,中间call  006D8920,中返回了步骤3中的eax和ecx的值

5.现在要重点分析006D8920,这个是thiscall,通过eax返回

esi 来源,是函数006d8920这个函数局部变量赋值:

我们要找到类似 lea  xxx, dword ptr [esp + 18]

6.现在需要分析call 005107f0,中怎么对ecx进行操作的
第5步中的 esp + 18对应的地址 在call 005107f0中的操作是,mov [eax + 4], ecx

所以需要取ecx的来源,根据分析ecx = [esp + 18], [esp + 18] = eax

所以需要取eax的来源, eax来着call, 004d7ae0

7.现在需要分析call 004d7ae0,这个也是这个游戏中一个通用的二叉树, 这个函数也对应我在上面贴出的第一图中的树
我们需要关注eax的来源,所以进入call 004d7ae0中查看,来源于edi:

其中EDI来自循环中活动,上图中004d7b1B ~004d7b00就是这个循环代码,是个Do-While循环,用c语言描述如下:

这个循环参与运算所有的数据来源于esi,需要取esi的数据,所有数据来源于ecx

这个ecx来自上层的的ecx,向上一层:

需要继续往上,查找ecx的来源


需要继续查找,ecx的来源,来源edi

需要查找edi的来源,往上查找来源[edi]

需要查edi的来源,上面的图在call  665e80中,这个比较重要,他有一个循环,循环        中的数据来源ebx,其中初始值:edi = [ebx + 4],以后每次加4

我这里把他翻译成c语言看,顺便也把基地址打印出来了,这里便是任务对象数组了

8.找到基地址
其中,ca06e0,便是基地址了

附上运行后的结果:

三:总结下
    1.分析上面的数据是个苦逼的过程,只所以写下是为了再次整理一遍,下次遇到类似问题时候能够快速解决
    2.分析数据时候,需要从程序的设计角度去看问题,一定要明白自己在干什么
    3.从逆向的角度来看一个游戏,一般分为三层,数据层、显示层、交换层
    i.数据层,客户端从服务端请求来的数据或者自有数据
    ii.显示层,比如场景、角色面板之类的
    iii.一块逻辑代码,取数据层的代码,然后经过一系列操作放到显示层上去,玩家可以看到
    iv.一般逆向,都希望拿到数据层的数据,这块东西是最靠谱的
   4.逆向时候一般比较惬意的分析过程是这样的: 显示层 -> 交换层 -> 数据层
    i.如果在交换层VM,数据层都是加密数据,就可以加大逆向的分析的难度
ps
   1. 一直在互联网上取东西,今天贡献一点,希望本文对有些人有用
   2. 本文仅仅是为了技术交流而作,如果冒犯了您的权益,请通知我删文

上传的附件 1.jpg
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
19.png
20.png
21.png
22.png
23.png
24.png
25.png
26.png
27.png
28.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功