免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:5.游戏逆向-pxxx-分析和偷解密功能的代码(call)

如下图,通过ida的分析可以看出 qword_7FF7E117F370 进行了三层加密,然后得到了一个qword_7FF7E117F390

然后通过对qword_7FF7E117F390进行解密最终得到了qword_7FF7E117F370

如下图使用CE验证qword_7FF7E117F370的值,是正确的的,这个E34FFFFB8E4634F6是加密的

然后通过第一次解密得到了 qword_7FF7E117F380,注意前面的可能会不一样,因为基地址的问题导致游戏中的内存地址与ida中的内存地址对不上,看后几位后几位就可以了

然后第三层解密就得到了 qword_7FF7E117F370,之前找GName的时候,论坛中的大神用的就是 qword_7FF7E117F370这个地址,为什么用它,而不用qword_7FF7E117F390的原因也就知道了

然后第三层解密就得到了一个内存地址,这个内存地址就是保存GName的地址

也就是下图红框的结构

如下图红框使用CE进入上图v4的内存,可以看到符合TStaticIndirectArrayThreadSafeRead特征,也就是符合TNameEntryArray的特征,TNameEntryArray是TStaticIndirectArrayThreadSafeRead别名,但是它里面的数据也都是加密的需要进行解密,这里面的就是游戏中所有的字符串

注意如下图红框,内存里的Chunks在最后,并不是在第一个,这个应该是游戏开发人员把顺序改了,所以如果ptr解密出来的结果不是一个内存地址就改一下顺序,这三个总有一个是

解密之后的值

下图红框的这些都是字符串列表

现在进入第一个地址,也就是0x1E1870E0000,如下图它也还是字符串列表

再进入,这里进入的还是第一个,也就是0x1E189BD0000,如下图红框,就可以看到字符串了

使用代码解析字符串,需要一点算法,也就是需要实现下图红框里的GetItemPtr

下图红框的值需要去ida里找,operator[]这个函数没法找,但是它在AddZeroed函数中用到了

上图红框里的值下图红框里的函数中用到了

如下图红框,然后AddZeroed在ida中找到过,所以直接去看就可以了

下图红框的15984就是

使用上图红框的值

如下图还原的算法

效果图:


img

更多推荐