邮件常常用来远程交易,这样可以节省交易时间,并且降低数据的需求。邮件遍历的分析,一般是以邮件名字,邮件数量等为突破口。不过有些游戏的邮件名字并不存放在邮件对象中,或者在对象中也不会改变邮件的本地显示,而且也没有邮件具体数量的存放地址,比如《天涯明月刀》,所以我们可以通过当前选中的邮件为突破口,来查看周围是否有邮件相关的遍历信息。
首先我们通过CE扫描出当前选中邮件相关的信息,比如邮件对象,邮件ID等等。如果用未知初始值无从下手,可以考虑通过明文发包出观察邮件的ID。扫描后得到两个结果(如图)
在OD中观察第一个地址周围的内存,发现在-24偏移处有三个地址很像数组,通过重复打开邮件可以确定这里就是邮件数组(如图)
在选中邮件ID处下访问断点,发现这里只能断到VM代码段(如图)
所以我们在上面的数组处下访问断点,游戏断下后,我们发现这里并没有VM,可以得到+30偏移(如图)
执行到返回后可以得到基地址(如图)
接下来对邮件数组中的属性进行观察分析,得到如下公式
[429D3B4]+30 数组起始地址
[429D3B4]+34 数组结束地址
[[[429D3B4]+30]+n*4]+0 邮件ID1
[[[429D3B4]+30]+n*4]+4 邮件ID2
[[[429D3B4]+30]+n*4]+18 邮件名字UTF-8