文章目录
- 打开NPC
- 交任务
- 接任务
打开NPC
来到明文封包call头部,点击NPC,然后断下。这里最好新建一个1级的小号,去分析,这样周围没有其他玩家会少很多干扰项。
返回上层,这个call应该就是我们要的选择NPC的call
但是我们再次点击NPC时,发现这个call并不断,那么说明这个call并不是选择NPC的call,可能是选怪call或者其他的选择call
这个call的作用应该是点击之后将选择的NPC在上方出现一个血条。那么我们应该在这个出现血条的状态下,再去点击NPC
此时会返回到一个call,和之前的选择call很像,但是注意eax的值是不一样的。接着来分析这个call的参数。
这个call实际上是在明文封包call的第一层返回地址处,也就是明文封包发送call。
其中rcx是个基地址,这个是和之前走路的rcx同为一个基地址。r8是包长,rdx是结构体,也就是包内容。
00000000011FF050 75 00 6D 25 00 10 00 00 00 00 00 00 00 00 00 00
这里就要来分析下封包内容了。我们可以结合组包的汇编代码来分析包内容每个字段的长度。
00007FF64E1713C6 | 66:894424 40 | mov word ptr ss:[rsp+0x40],ax |
第一个0075,其实也就是eax的值,这个是封包的头部,用来区分发送的封包类型。根据汇编可以知道长度是WORD。
00007FF64E1713B9 | 895424 42 | mov dword ptr ss:[rsp+0x42],edx |
接下来的四个字节dword长度,应该是NPC的ID,后续的全部为0。
打开NPC,只需要知道一个数据,就是打开的NPC是谁。所以有效的数据就只有一个ID
打开NPC 长度6
+0 0075 WORD
+2 NPC-ID DWORD
交任务
接着再来分析交任务
来到明文封包call头部,点击交任务。
接着返回上层。这个位置和之前的call还是很像。rcx是基地址,r8是包长,rdx是包内容,那么我们只要分析包内容就可以了。
包内容:
00000000011FE350 72 00 A1 05 00 00 FF FF FF FF 00 00 00 00 00 00
分析结果:
交任务 长度0A
+0 0072 WORD
+2 05A1 任务ID DWORD
+6 FF FF FF FF DWORD 有可能是需要选择的任务奖励
一般来说交任务只需要任务ID,所以后面的8个F分析不出来也无所谓。如果想要知道某个字段的具体含义,可以去追寄存器的来源。
接任务
接着再分析下接任务
下断,然后点接受任务
返回上层,还是一样的结构,只不过eax变成了0x71,代表封包类型的变化
00000000011FE300 71 00 A2 05 00 00 01 00 00 00 00 00 00 00 00 00
分析结果:
接任务 长度0xE
+0 0071 WORD
+2 05A2 任务ID DWORD
+6 01 DWORD
+A 00 DWORD
上面分析的都是明文发包call,调用的时候只需要再往上返一层,调用功能call即可。
Github:https://github.com/TonyChen56/GameReverseNote
完整代码: