我拥有用于​​系统的固件,并且正试图解密其中的一些固件,只是为了了解其功能。没什么非法或类似的东西,例如复制它的解密副本之类。区别于其他二进制文件的方法;

2.可能不知道如何加密;

3.可能未“正常”加密,并且可能特别如此。

问题是,该文件包含一些未加密的代码,但我不确定100%可以代表哪种操作码字节,因为它

全ARM驱动的设备,但我没有公开说它的名字。这是否意味着它的固件将是ARM ISA /操作码的某种变体(因为它是ARM处理器的机器代码)?如果是这样,我应该在哪里开始解密,如果可能,我应该继续确定什么版本的ARM,ISA(指令集=体系结构)等?

固件具有魔力文件开头的数字(只是说出公司的名称),但是之后它具有未加密的字节,然后是更多的幻数,然后是加密字节,然后是更多的幻数,然后是更多未加密的字节,等等,等等。区分加密部分,因为每个字节都有一个完全无用的ASCII字符,而文件的其他部分则没有,并且位于后面的段中。这清楚地表明这些是不规则的加密字节范围。

评论

通常,人们会发布他们正在使用的硬件,在这里,这可能会吸引做过类似事情的人们的良好答案。环顾四周,您会发现很多问题甚至都提供了可下载固件的链接。就目前而言,您可以获得的唯一答案可能是“对它运行binwalk和signrch,看看会发生什么”。如果是ARM,则很可能运行某种linux,这反过来又使您有可能要处理某种squashfs。

“如果是ARM,则很可能运行某种Linux”什么运行某种Linux?此处的固件是用于启动计算机其余部分的固件。 SquashFS是一个文件系统,应该如何帮助解密固件?如果有的话,解密固件将使其余的硬件得以逆向工程,因此在某种程度上有点像网关黑客。

#1 楼

哇,可以确定固件格式




过去常常使用Intel HEX和bin Flash内存转储
专用IC或ISP的硬件编程器。 HEX是非常具体的Intel_HEX(* .hex)文本文件,易于识别。另一方面,BIN转储很难识别。如果您可以看到其中的任何令牌或可以对其进行反汇编,并且代码有意义,那么它可能是二进制内存转储。如果已加密,则说明您不走运。

elf或obj格式

这些是类似于PE的较新对象格式。十六进制视图中的ELF看起来像这样:

7f 45 4c 46 01 02 01 00 | 00 00 00 00 00 00 00 00 | .ELF...


OBJ非常依赖于目标平台,如果它来自Intel,MS或Linux,... >

文件系统转储

某些设备实现了自己的编程接口,并使用固件作为光盘映像,因此该文件是某个FileSystem的转储文件,其中固件以某些文件的形式写入(s)。您必须标识FileFormat类型(通常按引导扇区的第一个512字节)。然后将其中的文件解压缩,然后从头开始重新开始。如果您采用USB密钥并以1:1的格式写入文件系统转储,然后尝试从支持各种文件格式的OS访问它,有时会有所帮助。您还可以使用某些HDD实用程序(例如PQ-magic)或任何能够识别FS类型的功能。


解密

您需要对二手IC甚至更好的模拟器进行反汇编/ emulator一些设备SDK也包含模拟,因此请尝试将固件加载到其内存中并尝试运行它以测试其是否有意义。要进行反汇编,您还需要分析代码,以查看其是否...


[Notes]

,您至少应发布文件扩展名和十六进制视图文件的开头

[编辑1]对命令的响应+一些附加信息

究竟是从头开始还是从头开始?仍然可以是:
-bin内存转储
-任何打包/编码的文件(甚至是特定的文件系统)


识别打包/编码的结构.avi)格式。请注意,可能没有ID字符串存在。基本上,您正在寻找文件中的十六进制编码长度或偏移量,这些长度或偏移量将加起来等于文件大小或下一个块结构,其长度在特定块偏移量处或在单独的表中。不要忘记它可以是LSB或MSB展位,首先不要承担任何责任。长度/偏移量通常经过编码16/32/64位(2/4/8 BYTE)还尝试查找重复模式(如果存在某种类型的块头)。 />某些FS在偏移处具有特定ID,因此请进行查找(例如FAT32,...)。大多数FS使用FAT + DIR表,因此请查找以下内容:



这就是MDOS文件系统中DIR表的外观。它是保存光盘所有文件/目录的结构。每个文件应具有编码的名称,类型(扩展名),起始扇区,长度。



E5 hex = 229 dec通常标记可用目录空间(在许多FS系统中)

因此,如果您知道目标系统中应存在的任何文件名,则可以寻找它来查找DIR表...



这就是FAT的方式表看起来像在MDOS中。 FAT保存有关光盘每个扇区/群集的信息。在这种情况下,它是12位,因此每个值的长度为1.5字节!一些值将扇区标记为系统/保留(不可用),坏,空闲,或者如果存在任何其他值,则它是连接到该扇区的下一个扇区的索引,如链接列表中一样。在进行解码时,请记住,字节序可能很小或很大。


识别bin内存转储

在这种情况下,文件是您手臂OS的内存转储。这意味着您应该寻找程序的特定部分,例如:


中断表
特定的程序标记(它输出的内容...)
图形

最后两个非常简单,因此我仅添加有关中断的信息。大多数处理器上的中断在内存中的位置都是固定的,因此对于每个中断,几乎没有保留字节。通常在该位置存在一些跳转指令,该跳转指令应导致中断处理程序例程,该例程应以中断指令的特定结尾结尾,例如:retiretn或通过设置/重置特定寄存器来标记已处理的中断...

因此,请在垃圾箱内查找包装紧密的跳转指令,如果找到,请检查其计数和距离是否与CPU数据表匹配。您也可以检查中断地址附近是否有中断返回。如果是的话,那么您便拥有了所需的一切。中断表的偏移量通常是固定的……因此,您应该轻松地从目标设备内存映射中的bin转储中找出起始位置。



评论


扩展名为.bin。开头的十六进制视图是该公司的名称,该名称占用50多个字节,并且可以通过ASCII,Unicode文本进行标识。

–堆满了
2014年12月12日17:33

@stackfullofheaps添加了[edit1]来回答,因为评论太多了

– Spektre
2014年12月13日在9:48

我从来没有真正想到过固件可以用作文件系统/磁盘。

–堆满了
2014年12月13日在17:27

@stackfullofheaps某些设备没有连接功能,因此升级SD卡是唯一可用的选项。也有一些文件格式像Garmins地图文件一样直接包含FAT ...因此您也应该始终考虑该选项

– Spektre
2014-12-13 20:52



我要反向工程的设备具有硬盘和完整的操作系统,因此我将排除文件系统闪存桥,但可能还不完全。

–堆满了
2014-12-13 21:43