#1 - 2023-1-26 18:51
nusfb
我爱好收藏但不会编程,以往都是收藏别人提取好的,前两天看到一篇报道里这款游戏的图片,搜不到解包就试着解解看,碰到png打不开一冲动就提问了,没想能在 xu_zh 大佬的帮助下成功解密了!趁着兴奋劲写好了网页,把资源上传到了 GitHub,第一次弄,有什么可以改进的地方还请大佬指出!像素小人及其他的动画之后会添加。(不知道为什么网页版唯独10400读不出,我用同样是3.8.x的 jar 版查看器就能打开)
仓库地址:https://github.com/memo-db/pixel-heroes-spine
在线查看1:https://pixel-heroes-spine.pages.dev
在线查看2:https://pixel-heroes-spine.vercel.app
在线查看3:https://pixel-heroes-spine.netlify.app
您可以在线查看,或将仓库 clone 到本地,使用现代浏览器打开 index.html 文件即可查看 Spine 动画。点击表头的id/c/r可按角色id/内容评级/“我”的评分进行排序。
--------原文--------
本月新出的手游《马赛克英雄》角色不错,我想提取 Spine 动画来收藏。
游戏资源不用另下都在安装包里,安装包下载(800MB),但png图片加密了,有大佬解答吗?我传了一份单角色的资源(600KB),有兴趣的可以点击下载。
https://files.catbox.moe/rdm56x.zip
仓库地址:https://github.com/memo-db/pixel-heroes-spine
在线查看1:https://pixel-heroes-spine.pages.dev
在线查看2:https://pixel-heroes-spine.vercel.app
在线查看3:https://pixel-heroes-spine.netlify.app
您可以在线查看,或将仓库 clone 到本地,使用现代浏览器打开 index.html 文件即可查看 Spine 动画。点击表头的id/c/r可按角色id/内容评级/“我”的评分进行排序。
--------原文--------
本月新出的手游《马赛克英雄》角色不错,我想提取 Spine 动画来收藏。
游戏资源不用另下都在安装包里,安装包下载(800MB),但png图片加密了,有大佬解答吗?我传了一份单角色的资源(600KB),有兴趣的可以点击下载。
https://files.catbox.moe/rdm56x.zip
测了一下意外的发现还真的能用(
https://https://files.catbox.moe/h7ovs9.png
根据异或运算的特性A^0=A,A^A=0以及结合律,可以知道既然密文是原文^密钥,那么原文^密文=原文^原文^密钥=密钥
具体来说
背景知识:png图片的文件结构,或者说数据格式要求头部一些字节是确定的,直接百度搜一下有很多大佬解析过,这样就相当于知道了一部分原文,由此结合密文反推加密方式和密钥是比干瞪眼或者暴力简单很多的
经验:这种给游戏图片加密的方式(大概是出于性能之类的考虑?)通常不会很复杂
直觉:把原文和密文摆在一起瞪眼,第0、4字节完全相同,第1、5字节都满足异或7。最符合直觉的方式就是4字节一组的异或加密
尝试&验证:算出密钥,写一下解密程序,得到的结果文件头里面包含有sRGB这样的字段,符合正常png图片特征。还有些步骤之前提了就不重复了orz
https://files.catbox.moe/pltixt.zip
另外针对10102这一个例子,它结束加密的边界在PLTE块的数据段,这一段的内容我不是很了解,而且图片之间不一致,没有可比对的原文
简单点可以直接暴力,生成边界在一定范围内的所有图片,然后人工看哪个能打开。稍微复杂点就验证一下CRC校验的结果
但这太蠢了,让我再研究下
从目前给我的文件来看,倒数第5个字节的值就是异或加密边界的位置(问就是干瞪眼看出来的),倒数第4、第1字节的值和key是相同的,怀疑是把key异或了某个常数存在最后,但倒数第3字节不符合这个规律,我得再想想
改进后的代码:
另外为了方便使用(和调试)我加了一个交互,输入文件名回车(不含.png后缀)会尝试解码该文件,直接回车会尝试解码当前文件夹下所有文件
屑,中间两字节不是异或8而是带进位的加8
0x915+0x8 = 0x91d
...
0x5fd+0x8=0x605
不过其实已经利用原文^密文反推密钥了,结尾这4字节用不用也无所谓了
仓库地址:https://github.com/memo-db/pixel-heroes-spine
在线查看1:https://pixel-heroes-spine.pages.dev
在线查看2:https://pixel-heroes-spine.vercel.app
在线查看3:https://pixel-heroes-spine.netlify.app