我目前正在研究一种用于打包(仅存储,无压缩)不同文件类型以进行传输的文件格式。使用了某种非常简单的“加密”,到目前为止我还没有任何运气。不过,我确实知道确切的(部分)纯文本。
这是我第一次反转任何东西,所以很可能我遗漏了一些明显的东西!
我已经计算出格式的完整结构:
- 带有一些信息的标题
- 所有“打包”文件连接起来,填充到 mod4 并“加密”
- 每个文件的位置、大小和 md5 的文件列表
此外,每个 md5 后跟一个 32 位分隔符(在每个块和每个文件上都相同,值 = 2)然后跟随一个 32 位“密钥”,至少这是我的猜测,因为这些 32 位在文件列表中的每个块上都是相同的,但是每个存档文件都有自己的“密钥”。我确实知道某些文件(全是黑色 .png)的确切内容,并且可以在“密文”文本中找到它们,多个 png 中的每一个都被“加密”完全相同,所以我认为它不可能是任何东西过于复杂。
我可以创建多个具有完全相同内容的档案。如果它们被区分,唯一改变的是数据块和 32 位“密钥”。用于创建存档的软件确实在其配置文件之一中保存了一个键值,并在每次创建存档时更改它,但此键是 7 位,而 32 位键(如果读取为 LIT 32 位 int)是完全不同的 9数字。由于文件已满,因此它们是 mod4=0,我尝试使用“密钥”对每个 32 位块进行异或,但这并没有导致已知的纯文本(例如 png 标头数据)。
没有向这些文件的接收机器发送(或在创建存档之前接收)额外的数据,所以我假设解密密钥必须是原始文件的一部分。
由于反转格式的整个过程非常困难,但进展也非常有益,我只是希望得到一些我遗漏的指示或明显的东西,而不是彻底的解决方案,因为这是拼图的最后一部分:D
- 文件列表中带有 md5 的密钥
- 加密的 png
- 纯文本 PNG
谢谢