未知压缩算法

逆向工程 文件格式
2021-07-05 23:33:36

我得到了压缩的数据,但我找不到压缩算法。数据是我知道布局的更大文件的一部分,所以我设法找出了一些东西。我知道的:

  • 我没有加载数据的二进制可执行文件,我只有不再支持旧压缩算法的更新版本。我用很多方法折磨它,它只是不包含相应的代码
  • 它被压缩了(100% 确定)
  • 它可以自制,因为后来更换了(见下文)
  • 到目前为止没有神奇的数字
  • 这并不简单:
    • deflate(错误的标题)
    • lzma(错误的标题)
    • gzip(错误的标题)
    • Quantum(错误的标题)
    • Microsoft CAB(错误的标题)
    • Bzip2(错误的标题)
    • 邮编(错误的标题)
  • 包含数据的文件中给出了未压缩的大小,该文件布局完全相反,不包含任何线索
  • 它可能已加密,但由于速度要求不太可能
  • 如果它是加密的,它会在序列开头给定相同的数据输入时给出相同的输出(通过猜测位于附近的一些未压缩数据)
  • 它是从 2001 年开始的,从那以后就被 deflate 取代了
  • 其中一些数据只输出 ASCII 而没有其他内容(我从容器文件的布局中知道)并且每次的压缩率约为 0.30(compressedSize/uncompressedSize)
  • 遗憾的是,我没有任何之前/之后的数据

编辑:十六进制有 32 个第一个字节:b9daed36cb64bedb61b9dd2cb72afd8ee565b0dd2ea00f0afda2c36eb25b0016

我制作了其中几个数据的直方图,它们都匹配特定的模式。显然 2 的幂正在发生一些事情,但我看不出是什么。

任何人都知道它可能是什么?我可以做些什么来收集更多信息?它看起来是基于 Lempel-Ziv 吗?如果是,我怎么能扭转它?

1个回答
  • 首先,你忘了lzo。AFAIR 它是在 1996 年发明的。
  • 其次,压缩数据可能没有对应的标准头(这使得所有“不正确的头”错误不一定是真的)。
  • 第三,直方图看起来不像压缩为一块的数据的直方图,它可能有一些内部结构(可能是在它们之前有大小的斑点?)。

我建议编写脚本,对部分数据运行不同的解压缩算法并观察结果。