上期教程我们简单地解析了一个封包,具体来说就是使用装备的主要包。通过分析,我们得到了这个包的结构。回顾上期的内容,我们讨论了加三这个偏移。这个偏移表示装备在装备数组中的位置,也可以理解为装备的路由器或者装备类型。这个装备类型可以是鞋子、武器或者宠物,也可以称为装备输出领域的下标。通过宠物的格子来看,使用下标来描述更加精确。虽然宠物格子可能属于同一类型,但根据下标可以更准确地确定它是武器、衣服还是鞋子,或者表示它具有的属性数量。
进一步说,背包中的物品在背包数组中有两个下标:一个是装备数组中的下标,另一个是背包数组中的下标。另外,0011这个值表示了我们要使用的装备的指令包类型或风暴类型ID。有时我们也称之为包子令或态度,这个术语有很多种。只要理解其含义即可。
接下来,我们要解密的是一个更加复杂的包,它用于使用背包中的药品。这个包可能用于恢复魔力值、生命值或者其他特殊的药品,我们将在本期的教程中继续讨论。
这个包我们也需要分析一下。首先,我会先测试一下这个包。我们需要取消掉其他的断点,因为在之前的分析过程中我们设置了很多断点。现在我们取消这些断点,在这里设置一个新的断点。这个断点应该是用于药品类对象的使用。
药品类对象的使用不会像装备一样走主包的位置,因为装备走的是法宝位置。我们选一个药品来测试,比如飞行精华。我们右键使用这个药品,看看是否会走到我们设定的断点。的确,它走到了这里。那么,它应该有一个偏移来表示它的下标或者其他信息。现在,我们先记录下这个包的十个字节。ESI寄存器中有十个字节,我们先记录下来,然后等会再进行分析。第一个提取到的包,我们看一下它在哪个格子。它的下标应该是第三个。我们找一下是否有数字三。确实有一个数字是三,那么再加上01234,再加四,这个偏移可能就是下标。但是,这里的偏移是两个字节,而之前的下标都是一个字节。这个下标可能不太一样,我们需要打个问号。接着,我们使用了同类的飞行精华,下标为五,实际上是第六个格子。我们再次右键使用一下,看看现在的包是什么情况。我们复制下这十个字节的包,然后再跑起来,做一个比较。两个包都是使用了同一个物品,但实际上背包位置不同。通过比较,我们可以确定这个下标的含义。但这个时候的下标确实很奇怪。之前在使用装备时,我们发现下标是一个字节的,但现在这个结构设计中使用的是word,占据了两个字节。然而,经过我们的测试,发现它确实是下标,只是这个结构设置的不同。除了下标之外,我们还能确定什么呢?除了下标之外,其他的部分为什么会不同呢?我们数一下,012345678A,大概是加AA这个偏移,然后我们找一下GSI高亮看一下它应该是什么。这一段不同了,它超过了十个字节。因为这个包的大小只有十个字节,所以后面的部分并不是这个包的内容,所以它是否不一样并不关我们的事。然后,我们看一下还有哪些位置。加三这个位置表示的又是什么呢?它的值都是固定为一的,这可能是它的数量吗?但是看起来不太像。我们使用一下回程的随意门再来区分一下。如果它是数量的话,这个只有一个,那么这个有98个,这个有99个,它就比较好区分了。接着,我们使用如意令9991哈,它大概是在第十五个位置。该地区无法使用这个东西。再使用神源的这个,它是9000多个,但实际上可以使用9997。如果我们再把这个包抓出来做一个比较,只要十个字节就行了。这个如意令,我们试一下,如果是数量的话,这两个不一样,它也不像是数量,这是下标吧。这个下标是正确的,但是这个后面是什么呢?这个可能就是物品的类型,我猜测的话。前面两个类型是一样的,所以这里都是9F94。但是现在我们使用的这个就不是了,加四这个地方是幺四。我假设这里是下标加六了。然后是DIOR,第二就是这四个字节了,是吧?这四个字节极有可能是什么?我们先把这个结构跟他说明一下,它是什么呢?前边这个ESI这里有一个0021嘛,它这个零零呢没有写上去啊,因为是一个前缀的零。到了这里字节类型来写的时候呢,他就是2100,这里占两个字节。然后占两个字节之后呢,加三这里有一个字节,然后加四,这里开始了有两个字节。我们看这里,我们给它写上偏移。这里是加零命的位置,这里是加零二的位置,有一个字节。这里是加零三的位置,加0303呢也是一个质检啊。零三过来的就是我们的加4+4。这里的偏移有两个字节,后边这里是加零六。那么这里106这里,那么这里呢它是四个字节,是一个什么?这是一个DIOR的一个数字。我们根据这里来。那么这里呢,它是一个word标记,这个也spite,这里呢,它也是BT,这里也是word都能起来的。你看这里,这里就是我们标记好前缀零之后,这里它是两个字节吧。加入这里,你看加日这个偏移,这里这里是多少,是一个字节。然后加三这里是一个字节,是吧?加三这里是一个字节。而且在这里的话,这个一好像它是固定的啊。这个目前来看的话,它可能是一个类型。在目前来看的话,它是固定唯一的。那么在前面这个是我们的包子令类型。这个我们也说了,有很多种叫法,或者是包的分类也可以啊。你叫他指令也可以,或者是A方分论啊,分类分类的id也可以。反正这个叫法是很多的。也就是说这个一个字节的,我们把它调换过来的话,它实际上是多少呢?它是0021,就是21这个数字啊,这个是16进制的。那么这个二幺呢,它代表的就是指定类型,也是我们的八路的分类分类id,你怎么叫都可以。好然后这一个字节呢,加上这一个字节呢,我们暂时不知道。目前来看的话,它都是为零的几个指令,也是固定为零的。这样子的话,它是固定为零,这个零的意思呢我们也不知道。那么也需要因为他的这个数值比较多,我们都需要慢慢的去跟。那么这个夹角四呢又是什么呢啊?这里有个一四是吧,那么这里是三国加四,这里是下标啊,这个是下标对吧,这个我已经退了。嗯这个一四的话是在下标是二零十六进制的,我们把它调换一下,实际上就是00X14,那么十进制的话就是二零好。那后面这个是四个字节的,四个字节的,我们也要跟他调换一下啊,前他后边的这个是他的高16位是吧,那么我们就把它调转过来排序,然后零零第33C啊,这就是他d word这个形式,因为这个呢我们抓起来的时候是字节级,要转换成16进制的时候,它前后我们要倒置啊,要倒置好。那么这个这个的话,我猜测可能是可能是物品的id,而且是物品的分类id,就这个究竟是一个什么类型的分类的一个id,极有可能是因为你看前边我们使用的,他如果是物品的GD的话,那么这两个它不可能是一样的,因为这个一个是第四个,一个是第六个的那个什么飞行精华。如果他是分类id的话,那么这里他可能是什么九五或者是九六啊,他肯定与前面那个是不一样的。所以说这个的话啊,大概率的他可能就只是一个分类的id啊,他不是那个基于id,我们说的如果是那个物品的id的话,那双胞胎长得一模一样的,那么他的身份证都不是一样的是吧,物品id的话,它相同类型的物品,它这个物品这两个值都都是不一样的,那个我们才叫物品id是吧,就算是双胞胎,他的身份证编号也不一样啊。那么所以说这里呢,他只他只能是物品的一个分类的一个小D,就是物品是属于哪一类啊,分类的,当然这个我们也需要进一步的分析来确定。那么现在我们的一个分析的话,他能够确定的是哪两个地方保指令,这个与我们上期教程分析的,你看上一节课啊,这里如果是0011的话,是使用背包装备的一个bar的类型,一个bar的指令。那么现在呢使用的是0021,那么表示是使用的什么,使用的是物品,使用的是物品好。那么这几个呢,嗯这两个质量目前是固定的,我们也暂时也不知道这个是下标,我们知道了。那么后边的这个呢我们先分析一下,也就是这四个字节的这个d word,你看这里标记的是d word,我们来看一下它来自于esp加一零,这里还有一个esp加8USP,加80ALL呢写到了加三这个位置,L加三是什么意思。反正这里一个加八,一个加一,那么如果这个参数一的话,那么这个就是参数四了是吧,这个参数一个参数三应该是我们来看一下,你看这里的话都是上层的参数,可能是参数一,可能是参数二,这个可能是参数三,那么具体是不是我们看一下前边的,你看这里这一段的话,他是做一个做了一个屏障的,这个可能它里面这个函数里面,RET后边没有带没有带数字,没有做屏障,那么所以说这个谱写他减了四,这里加了四,那么这里平常,那么本来参数一是ESP加四是吧,但这里呢你看这里让ESP减了四,所以说这个应该就是参数一参数参数三啊,我们的推测的话基本上应该是正确的。那么所以说我们要找的话,要到它的上层库里面去找啊,要返回到这个上一层,你看这个是D33C吧,第33C就是我们要找的那个找到这个字,你看反过来之后D33C是吧,那么这个我们物品的分类id我们要给他打一个问号是不是我们还不知道啊,那么我们可以跟到上一层去找,你看上一层的话,参数一参数参数三是吧,这个D33C,那么也就是这个数字就是物品的分类id,继续往前走,找到这个ESP加二八了,那么ESP加二八的话,可能又是再上一个啊,这个获得一个参数了,我们直接到堆栈里面去找0123,这样数D33C是吧,又是这个扩的第三个参数,我们就找到这里来了,是不是就找到这里了。之后,我们高亮显示之后。那么这里呢,来源于ESI加C,那么ESI可能是一个对象了。对象加C这个地方啊,那么如果是对象的话,我们根据呃背包的那个数组来读一下就行了。关键点可能就在这里了,关键点在这里先打个问号,先把这一行给我复制一下。如果我们猜测是正确的话,那么这个ESI可能极有可能就是我们的背包对象啊,我们看一下是不是这样的。如果不是对背包对象的话,我们还需要进一步的分析。如果是背包对象的话,我们基本上就能确定他是一个物品的分类id。我们找到前边的背包数组的那个公式,去找一下背包数组机制嗯,背包数组加载地址,角色。再看一下,这里用这个应该比较好一点,我们把它拷贝一下好。我们在解密最高的时候,我们要用到的就是他,那么刚才的是多少格了?背包的格子数量,我们已经在这里已经知道了,它的下标的话,刚才这个包是多少格?是不是第20个啊?这里那它的下标的话就是0X14,转换成十进制的话就是20,实际上他是第20一个,因为下标是从零开始的。我们带进这个公式去啊,这里就是第二次,我们把这个对象给读出来看一下啊。啧啧,这是第20一个,20一个。我们在6×2这边转过去看一下,那么这就是那个对象。那么这个对象取出来之后,我们在63那边加C来看一下。假设不对啊,他这里是14C08,假设这个地方如果我们要找的诶,是这个D33C才对的,我们这里面去找看有没有D33C,幺四不是二零吗,16+4啊,应该是一四嘛,我看一下,这是0X114啊。刚才,20是十进制了哦,对我们好像写错了是吧,这个地方我们应该加一十,因为里边他是认的是16进制。这一点我忘了看一下,那应该是指向这个地方的,指向这个地方就是反正就是指向再重新来一遍。反正就是这个对象在内存四里面来看一下,诶的确就是哈是吧,加塞这个地方的确就是那个对象的分类id。那么现在我们基本上能够确定了,是不是我们背包又多了一个属性?我们把它总结到前边来,那么这次下表,呃下角那之前还有一些属性,那么加C加0C这个地方是物品分类id啊,而不是物品id,物品id它是不一样的。我们再看一下背包前边有哪些分析啊,嗯背包的话浅的分析背包属性分析,后边应该有一些名字,这里有个名字,名字的话它是调用的虚函数吧,背包加背包加一八,这个地方确保对象给他总结一下,加摇把,这是获取名字,这个是偏移。我看背包属性里面还有哪些东西好像没有,除了这个名字好像没有分析到其他的,比如说数量什么的,好像是没有分析的。第N个看一下有没有其他的这个背包数组地址,这角色对象的,这个角色对象的加二零哦,这里有一个背包格子加二零,这里可能是叠加物品数量,这个我们也写到这里,给他总结一下。好二零,这里是叠加物品的数量,好这个写好了之后,到时候反正我们可以把这些数据收集一下好了。那么本期教程我们暂时就分析到这里。比较关键的这个数据,我们已经分析到了,就是这一个地方啊,DIOR这个地方呢,就是我们不是物品id啊,这个我们猜错了,因为物品id我们刚才说过多次了。你看第三格和第五格的话,它是同一类的物品,如果是物品id的话,这后边这个呢它是不同的,但是在这里呢它是相同的,所以说呢他这个人啊应该是分类id,那么什么时候需要用到这个物品的id,应该还有一个物品的id。分类id的话,它在使用物品的时候是可以用的嗯,但是如果是出售物品的话,他可能就需要这个呃物品ID了。当然如果是有背包的格子呢,它也能够变相的代替这个分类啊,这个物品id因为某一格的嘛它是唯一的,就是说物品id的话是唯一的。这里我们要说一下这个物品分类id的话,它是多个同类的物品,这个都是相同的啊。如果是物品id,如果是物品id呢,它是唯一的,就像身份证一样,是是唯一的,就说两个同类的物品,它的物品id都是不相同的,就像我们人的身份证一样。分类id呢它只要是同一类的物品,它就相同了,所以说这个是分类id啊,这是物品id。当然这个呢都是我们自己定义的一个概念,你可以加上你自己的一个理解或者是你自己给他取一个名字也可以啊。好那么本期呢我们暂时分析到这里,后边这个什么零一的话,我后面有时间我们再分析再分析。最重要的应该就是这个分类id了,这个零一的话,因为它比较固定,固定的话我们可以直接用,就像前面这个包指令一样,它应该是一个小的一个分类,但具体是什么作用暂时不太清楚,因为我们也没有一步一步的逆向往前找,找它的来源。只要去找到它的来源的话,一般呢我们就能够知道啊,这个零和后边这个一它的一个意义了。但是这个立项的话,他是非常非常的花时间的,我们一步一步的去找啊,对不对,非常花时间啊。这个堆栈呢我把它也拷贝出来,堆栈我们是在这个位置这样一层一层的一直找到这里啊,一直找到这个地方来才把他给找到哈,所以说这也是一个关键的数据。在分析这个B站的时候都是第3D33C,这个是分类id,我们一层一层的跟到跟到这里的时候是不是才找到我们的这一段代码,这个ESI了。我们现在已经把这个可以把问号去掉了,他就是我们的背包对象。好我们已经确定了,而这个呢就是我们的物品一定要加上分类,而不是物品是物品id的话,它是唯一的,我们反复说过这个问题。物品分类为问号了,可以取消掉啊,确定。那么后面的话我们会安排时间对这个铭文包括了做一个合格。把他的字节码给提取出来,字节码是什么呢,就是我们刚才所抓取的诶,他按照他的包的长度来抓取的,抓取的这个数据,这个就叫字节码。如果我们抓取到了之后,我们实际上根本就不用去修改它里面的什么属性,是不是要使用某一类的物品,我们直接把这个字节码填进去,把它写死,它一般也可以用。但是某些关键点,比如说这个下标啊,他可能不一样,我们需要修改一下。那么其他的这些我要使用的哪一个物品,那么我们基本上嗯也可以不用修改啊,比如说你是使用的飞行精华,那这个呢登录id都是固定的啊,是不是你直接用就行了。但是呢你要使用的时候,如果我们是编程的话,那你需要去骗你一下背包,先知道这个飞行精华它所在的下标是多少啊,知道了之后把这个下标填到这个主播里面,把这个包一发,那你就能够使用这个物品。到时候我们要实现这些功能的话就非常方便的。那么之前呢我们也做过测试了,基本上八九十%的功能吧,比如说出售物品啊或者是呃减物啊攻击怪物啊使用技能呢应该都要经过这个UF6哈。第一名这个主播这里当然他可能有小部分不经过这里,我们说了这个铭文包的话,我当时给他编号是零一,他可能有铭文包零二也是有可能好。咱就暂时就测试到这个地方。