假设我有一个无法执行的二进制文件(例如,它在我没有其中之一的设备上运行),但是我可以反汇编它。我可以获取有关该体系结构的文档。 (在我的情况下,这是MIPS little endian。)但是二进制文件的导入量很少,字符串等也很少,所以看起来好像已经打包了。 (编辑:我的意思是说,打开包装时无需访问原始设备。)

评论

您可以尝试使用QEMU附带的一种用户模式仿真器来运行它...如果您对它有更多了解,这可能会有所帮助,可能像IDA这样的反汇编程序可能会有所帮助,也许它是免费版本可以使用的一种类型。另外,我不确定您所说的“静态拆包”是什么意思

Ida Pro和Bochs模拟器似乎是一个不错的选择,请参阅此处的教程。

@Remko:Bo Bochs只模拟x86,因此不太可能在这里提供帮助

@ cb88,我有IDA Pro的副本。我的意思是我想解压缩二进制文件,但没有最初打算使用的设备。好像QEMU + mipsel是路要走;我现在正在下载debian-mipsel。

如果qemu系统仿真过于错误或难以取出数据,您也可以使用gentoo mips和静态qemu用户模式仿真器在chroot中进行此操作。 gentoo.org/proj/zh-CN/base/embedded/handbook/?part=1&chap=5

#1 楼

在过去我看到的30多种嵌入式设备固件中,我很少看到它们使用任何专有技术。通常只是gzip / LZMA或他们正在使用的类似压缩文件(尽管有时带有修改或剥离的标头)。

因此,作为第一步,我将尝试使用binwalk之类的工具来搜索已知的压缩算法。如果这样做没有帮助,请尝试使用查找加密常量的工具,例如“查找地穴”或“签名搜索”。这仅在加密是软件实现的情况下才有效。如果它是一个更复杂的设备(例如机顶盒),并且具有硬件加速的解密引擎和用于存储密钥的OTP内存,那么您将很不幸运,而没有运行时访问权限(除非它们大大破坏了通过

最后,您可以尝试找出它们是否使用某些专有算法,并使用QEMU或gxemul模拟该算法,或者使用高级语言编写自己的解压缩器。 >

评论


这是一个好主意。我运行binwalk时,除了它是ELF外,什么都没有发现(即,它仅报告了file(1)报告的内容)。标志搜索也没有找到任何东西。我想下一步是QEMU。

–EfForEffort
13 Mar 26 '13在4:31

#2 楼

在《 The Ida Pro Book》中,Chris Eagle演示了一个名为ida-x86emu的插件的使用,该插件可用于通过模拟IDA数据库中的执行来静态解压缩二进制文件。看看这个;它是开源的,而且非常易于使用。

评论


不幸的是没有帮助,因为这是MIPS二进制= [

–EfForEffort
13 Mar 26 '13在4:23

#3 楼

几种可能的方法:



标识打包程序


获取平台的标准打包程序(例如,UPX),检查是否为
如果它是标准包装机,那么它可能已经被证明是有据可查的,甚至更好,例如UPX,它可以自行包装,并且是开源的。



识别算法


好的+广泛打包器算法(NRV,LZMA,JCAlg,ApLib,BriefLZ)并不多。通常可以通过它们的体型或常数很容易地识别它们。 (我在Kabopan的纯python中实现了其中的几个)
如果您可以轻松识别打包/加密算法,那么您可能可以找到静态拆包的干净实现



动手



如果您仍然不知道该算法,并且它显然是自定义算法,请阅读同一平台的另一个打包程序(例如,阅读UPX Mips二进制文件及其源代码),以便使您熟悉平台上使用的类似(打包程序)技巧。
然后寻找可能的压缩算法(可能看起来不同的代码,人们很少弄乱它们,并以您喜欢的语言重新实现算法,然后从外部进行解压缩(查找参数,应用算法,修改/重构二进制文件)。 ApLib没有任何标头或参数(甚至没有大小):该算法只需要一个指向压缩缓冲区的指针,因此有时仅仅盲目地尝试对二进制文件的任何偏移量进行检查,并检查我们是否获得了不错的解压缩缓冲区(不要太小,也不应该很大,不能超过00s)。

#4 楼

我的一般回答是“通过针对打包的二进制文件模拟自我修改操作”。因此,例如,这将包括消除大多数封隔器承受的压力。这样做将需要“静态跟踪”通过打包程序的执行流,该打包程序的代码可能会进行自我修改。仅压缩/加密。可能是需要更复杂的拆包策略的情况,例如我的论文《拆包虚拟化混淆器》 1.
中所述。