大部分游戏的主线任务需求都在任务遍历的属性中存放的,而《天涯明月刀》的任务需求与任务遍历是分开存放的。
首先我们搜索任务要求的打怪数量,用DWORD并不能得到任何的结果,于是我们尝试其他的数据类型,发现除了文本型都没有得到打怪数量的结果。于是我们在得到的4个文本型结果中进行筛选和分析(如图)
在这4个结果中其中第一个结果和另外三个地址相差较大,我们用OD对这个比较特殊的结果下访问断点,游戏很快断下(如图)
我们继续分析ecx的来源,来源于头部的[edx],执行到返回后得到+13C偏移(如图)
继续向上分析edi的来源,执行到返回得到来源于[eax](如图)
而继续向上分析则到了VM的代码段,我们在0531A76D 处下F2断点,得到eax的值为040BDB08(如图)
这看起来很像是一个基地址,因为之前得到的基地址和这个地址相差不大。
于是我们在这个地址上下硬件访问断点,游戏断到了其他的位置,也得到了基地址040BDB08(如图)
这样就得到了任务需求的公式[[040BDB08]+13C]
我们数据窗口中跟随这个公式,并用ASCII型查看,发现这里就是主线任务的需求描述(如图)
由于其中的汉字是UTF-8的,所以并不能正常的显示,而[040BDB08]+140则是描述的结束地址。
接下来我们只需要通过文本分割来将字符串分割开就可以正确的判断任务的需求了。