2

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

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

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

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

4

5 回答 5

3

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

于 2009-02-18T19:10:07.653 回答
2

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

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

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

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

-亚当

于 2009-02-18T16:13:39.467 回答
1

做到这一点的可靠方法是反汇编库并读取解压缩例程的结果汇编代码(并可能在调试器中单步执行)以查看它在做什么。

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

于 2009-02-20T16:11:32.483 回答
0

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

于 2009-02-18T16:59:55.190 回答
0

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

于 2009-02-18T20:41:40.570 回答