你们中是否有人知道在已编译的文件中识别算法的技术,例如通过测试某些模式的反汇编?
我所拥有的罕见信息是库中有一些(未导出)代码可以解压缩 Byte[] 的内容,但我不知道它是如何工作的。我有一些我认为以未知方式压缩的文件,看起来这些文件没有任何压缩头或尾。我假设没有加密,但只要我不知道如何解压缩,它对我来说毫无价值。
我拥有的库是用于低容量目标的 ARM9 二进制文件。
编辑:这是一种无损压缩,存储二进制数据或纯文本。
你们中是否有人知道在已编译的文件中识别算法的技术,例如通过测试某些模式的反汇编?
我所拥有的罕见信息是库中有一些(未导出)代码可以解压缩 Byte[] 的内容,但我不知道它是如何工作的。我有一些我认为以未知方式压缩的文件,看起来这些文件没有任何压缩头或尾。我假设没有加密,但只要我不知道如何解压缩,它对我来说毫无价值。
我拥有的库是用于低容量目标的 ARM9 二进制文件。
编辑:这是一种无损压缩,存储二进制数据或纯文本。
你可以去几个方向,使用 IDA Pro 之类的静态分析,或者加载到 GDB 或模拟器中并按照这种方式执行代码。他们可能正在对数据进行异或运算以隐藏算法,因为已经有许多好的无损压缩技术。
解压缩算法涉及紧密循环中的显着循环。您可能首先开始寻找循环(递减寄存器,如果不是 0,则向后跳转)。
鉴于它是一个小目标,您很有可能手动解码它,尽管现在看起来很难,一旦您深入研究它,您会发现您可以自己识别各种编程结构。
您也可以考虑将其反编译为更高级别的语言,这将比汇编更容易,但如果您不知道它是如何编译的,仍然很难。
http://www.google.com/search?q=arm%20decompiler
-亚当
通过查看程序集完成的逆向工程可能存在版权问题。特别是,从版权的角度来看,这样做来编写解压缩程序几乎和自己使用程序集一样糟糕。但后者要容易得多。因此,如果您的动机只是为了能够编写自己的解压缩实用程序,那么最好只移植您拥有的程序集。
根据我的经验,大多数时候文件是使用普通的旧 Deflate 压缩的。您可以尝试使用 zlib 打开它们,从不同的偏移量开始以补偿自定义标头。问题是,zlib 本身添加了自己的头文件。在 python 中(我猜其他实现也具有该功能),您可以将 zlib.decompress -15 作为历史缓冲区大小(即 zlib.decompress(data,-15))传递给它,这会导致它解压缩原始压缩数据, 没有 zlib 的头文件。