【问题标题】:Identifying Algorithms in Binaries识别二进制文件中的算法
【发布时间】:2010-10-08 09:03:24
【问题描述】:

你们中是否有人知道识别已编译文件中算法的技术,例如通过测试一些模式的反汇编?

我所拥有的罕见信息是库中有一些(未导出)代码可以解压缩 Byte[] 的内容,但我不知道它是如何工作的。 我有一些我认为以未知方式压缩的文件,看起来这些文件没有任何压缩头或尾。我假设没有加密,但只要我不知道如何解压缩,它对我来说一文不值。

我拥有的库是用于低容量目标的 ARM9 二进制文件。

编辑: 这是一种无损压缩,存储二进制数据或纯文本。

【问题讨论】:

  • 你在 linux/unix 机器上,也许使用 cygwin?那么你有没有在文件上尝试过“file”命令?
  • ...关于我可能会添加的压缩文件。见en.wikipedia.org/wiki/File_(Unix)
  • 不,我使用的是 Windows,但我在这些示例中使用了 Trid。

标签: algorithm compression reverse-engineering


【解决方案1】:

解压缩算法涉及紧密循环中的显着循环。您可能首先开始寻找循环(递减寄存器,如果不是 0,则向后跳转)。

鉴于它是一个小目标,你很有可能手动解码它,虽然现在看起来很难,一旦你深入研究它你会发现你可以自己识别各种编程结构。

您也可以考虑将其反编译为更高级别的语言,这将比汇编更容易,但如果您不知道它是如何编译的,仍然很难。

http://www.google.com/search?q=arm%20decompiler

-亚当

【讨论】:

    【解决方案2】:

    通过查看程序集完成的逆向工程可能存在版权问题。特别是,从版权的角度来看,这样做来编写解压缩程序几乎和自己使用程序集一样糟糕。但后者要容易得多。因此,如果您的动机只是为了能够编写自己的解压缩实用程序,那么最好只移植您拥有的程序集。

    【讨论】:

    • 嘿,我在欧洲,这样做是为了实现互操作性。这里是合法的。
    【解决方案3】:

    您可以尝试几个方向,使用 IDA Pro 之类的静态分析,或者加载到 GDB 或模拟器中并按照这种方式执行代码。他们可能会对数据进行异或运算以隐藏算法,因为已经有许多好的无损压缩技术。

    【讨论】:

      【解决方案4】:

      根据我的经验,大多数时候文件是使用普通的旧 Deflate 压缩的。您可以尝试使用 zlib 打开它们,从不同的偏移量开始以补偿自定义标头。问题是,zlib 本身添加了自己的头文件。在 python 中(我猜其他实现也具有该功能),您可以将 zlib.decompress -15 作为历史缓冲区大小(即 zlib.decompress(data,-15))传递给它,这会导致它解压缩原始压缩数据, 没有 zlib 的头文件。

      【讨论】:

        【解决方案5】:

        执行此操作的可靠方法是反汇编库并读取解压缩例程的生成汇编代码(可能在调试器中逐步执行它)以查看它在做什么。

        但是,您也许可以查看压缩文件的magic number,从而确定使用了哪种压缩方式。例如,如果用DEFLATE压缩,前两个字节将是十六进制78 9c;如果与bzip242 5a;如果是gzip1f 8b

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-13
          • 2015-04-16
          • 1970-01-01
          • 1970-01-01
          • 2014-11-28
          • 1970-01-01
          • 2010-11-29
          相关资源
          最近更新 更多