识别二进制文件中的算法

时间:2009-02-18 15:45:48

标签: algorithm compression reverse-engineering

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

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

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

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

5 个答案:

答案 0 :(得分:3)

您可以通过IDA Pro之类的方式进行静态分析,或者加载到GDB或模拟器中,并按照这种方式执行代码。他们可能会对数据进行异或,以隐藏算法,因为已经存在许多良好的损失较少的压缩技术。

答案 1 :(得分:2)

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

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

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

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

- 亚当

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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