【issue 已解决】关于4399造梦西游的存档保存

本文最后更新于:2020年4月20日 中午

2019.10.05更新:issue已解决,但因为某些原因本站不提供解决方案与相关步骤

背景

我在一次偶然的尝试中抓包发现,当我点击造梦西游的保存存档按钮时,他会提交一个包,证明flash的数据也是通过发post对存档数据进行云端同步的,于是我便想通过更改提交的数据来实现修改甚至实现复制存档等操作。

实战问题

当我尝试抓包时,很明显的发现了,当提交存档时,里面有个save包,而里面的数据
avatar

我通过对比分析大致可以读出index是存档的位置,title是你选的职业,uid应该是4399账号的uid,refer这个在headers里也比较常见,是这个flash的直链。data我猜测应该就是存档的数据,具体分析的话我也无从下手,所以便打算试试存档复制。即把账号A的数据复制到账号B。

当我继续往下看时却发现了两个不太友好的东西,一个是token,一个是verify这两个一看就知道是验证。token有点奇怪,这边竟然是空,让我有点摸不着头脑。至于剩下的参数我这边也给出答案,gamekey相当于是这个游戏的uid,同一个游戏是固定的,所以暂时不用管,同理gameid。session:-1暂时应该也不需要我们去研究。


avatar

在save前面有个包,根据链接我们猜测这就是获取token,结果是什么都没返回,也对应了我们之前的token是空。
但是到了这问题就出来了,token就算空吧,也有获取方法了,但verify完全一点头绪也没有。

自发研究

我先介绍一些我尝试并未成功的方法。

从头抓包

因为我点击保存后就这么四个包,所以我在想verify会不会在前面加载网页时就获取了,所以我尝试从头开始抓包。


结果当然是我失败了,并没有找到一点线索,其实理性分析也知道,verify是根据存档数据(data)以及index,title等综合加密的(我有尝试过修改任何单个数据,都未成功,所以得出结论verify是根据除自身外所有数据加密计算得出的)

寻找js

我尝试在网页中寻找js,看看有没有什么方法调用来计算出verify(这边的灵感来自于酷安一位大佬分析的抓取百度指数文章)。

可能是我本身水平不够吧,或者本来就不在页面js里,所以我并未成功找到相关内容。
如果有人看到这可以自行尝试一下

可能猜测

现在我的猜测可能就是这段verify计算是在flash内实现的(灵感来自于更早段时间我尝试抓取4399手机游戏盒登录包,里面也有一段验证和密码加密,最后我在论坛上看到了,包的数据是4399游戏盒内置的算法,需要通过逆向分析得出加密的key然后再利用base加密)。这边多提一句,4399游戏盒密码加密用到了DES加密的CBC规则,这个我也在实战中失败了,如果有懂得大佬请务必联系我。

所以现在我觉得需要实现的操作就是逆向flash得出里面的具体加密算法才能成功计算出verify。

收获

有用的包

抓包过程中我也收获了一些可能还算能用的上的包
avatar

比如这个get_list包,好像只需要cookie,uid和gameid即可获得游戏的存档信息。

还有一个包是点击存档后,会提交一个包访问云端的数据来读取data,也还算有用

其他收获

虽然我无法实现开篇想要的复制存档功能,但是我可以通过实现反复提交来实现:回档! 这个我也有试过很多次,verify不会随时间变化,只要抓一次包就可以一劳永逸,这也更加确定了前面说的verify是根据提交数据综合来计算的。

前景展望

如果如我猜测所想是隐藏在flash中,要是在将来能逆向攻破。那么根据包里的数据gameid和gamekey可以推出,我们可以将这个方法作用于所有4399需要登录的游戏中!并且实现任意更改存档内容,实现一些理论上不会出现的情况。

写在最后

这篇文章是我用来分享我在实际操作中遇到的问题以及获得的收获。如果你对这篇文章有所看法或有解决方法,欢迎给我寄送邮件,或者联系我的WeChat。
当这个问题解决后,我会在博客中写出我对应的解决过程,并将此篇issue的标题改为已解决。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!