固件逆向剖析过程当中的东西和技能 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

固件逆向剖析过程当中的东西和技能

申博_安全防护 申博 81次浏览 已收录 0个评论

hex editor的运用

hex editor是一款运用简朴的十六进制编纂东西,能疾速对数字举行十六进制转换操纵,它运转于windows平台,它能够或许编纂xml文件举行修正二进制数据。软件支撑Undo、插进去、掩盖、搜刮、对照等编纂形式。

十六进制转换操纵是个庞杂的历程,在此我们引荐hex editor,这对固件逆向剖析能够很有用。说实话,至今我都还没能找到我抱负中的十六进制编纂东西。我愿望有一些剖析内容能够直接被显现为二进制文件,为任何给定的大众架构找到有用的字节码,可视化熵(包罗字节码),许可做条记和高亮显现,列表字符串等等。

在实践中,我倾向于运用HxD来做一些基础的事情,运用wxHexEditor来做条记和高亮显现,以下所示:

固件逆向剖析过程当中的东西和技能

目前市场上有许多十六进制编纂东西,以是你挑选运用哪一个将取决于小我偏好,发起你多试几个。

固件中的文件是不是被加密?

你能够会碰到以某种体式格局加密的固件文件,碰到这类状况,起首,你须要相识是全部文件被加密,照样某个数据库被加密。若是文件是加密的,你能够还想疾速相识它的加密实行状况。

这些剖析事情是很难在字符行中一行一行手动剖析的,你最好实验从更高层周全相识文件的字符行。

盘算出熵变是相识任何给定字节序列的紧缩或加密体式格局的一种异常好的要领,若是盘算的结果是高熵,则文件能够被加密或紧缩。若是盘算的结果是低熵,则文件是不会被加密或紧缩。然则,纵然熵变被盘算出来,你也不轻易辨别出来。

在此,发起你运用可视化东西,这有助于疾速检察熵,以下是一些我用过的异常有用的战略。

binwalk – e

binwalk有一个内置的熵盘算器,它可输出一个2D图形,能很好地将熵可视化。然则,由于它是2D图形花样,可数据的一些细微差别能够会被丧失。

这是STM32F4体系指导加载递次的熵图。第一个16kb主如果裸机Thumb字节码(以及它多是经由迥殊紧缩和优化的),这使得熵盘算相对较高。但它离1还很远,显着没有加密。末了的12kb主如果0xFF字节——因而盘算出的熵异常低,以至靠近于0。

固件逆向剖析过程当中的东西和技能

以上是一个大型(大于100mb)固件文件的熵图,在某种水平上它是加密的。文件熵的盘算结果异常靠近1,这申明它是高熵,不外由于没法到达1,能够注解加密不敷抱负。

binvis.io

binvis.io是一款不错的全彩二进制可视化东西,只需你不介意把它们上传到他人的服务器上,它在较小的文件上运转得异常好。

Binvis的脱机形式

另有一个(异常不发达的)C#项目也被称为binvis ,它好像在很久以前就住手研发了。它与上面说的与binvis.io没有任何关系,但关于离线剖析和大型文件,它确切能更好地举行剖析。

迥殊是,RGB画图。只管不像binvis.io输出那样华美,但关于疾速检察文件中是不是存在任何显着的反复形式或较低熵的地区异常有用。

固件逆向剖析过程当中的东西和技能

以上的示例是针对某个大型路由器品牌的加密固件文件的剖析历程,很显着,“加密”能够没有到达应有的“加密”水平。若是你看到固件中的反复形式被假定为以某种体式格局加密,你现实上能够正在检察XOR,其密钥局部能够经由过程统计剖析相对轻易地得出。若是你不太荣幸,你多是在ECB形式下检察相似AES的内容。

加密照样紧缩?

已有人写过关于《运用“数学”要领辨别加密和紧缩构造》的文章,你能够细致浏览。

裸机?

上述大多数东西都异常合适运用适用于具有恰当操纵体系的SoC的固件,但偶然你会剖析裸机MCU的固件。在这类状况下,你须要斟酌其他战略来剖析固件。

数据表

若是你能获得数据表,只祝贺你,你的剖析基础上就算胜利了。不要低估一个不错的数据表的代价。数据表能够会包罗1000多页的编程以及中心处理器的内容。

偶然数据表是不公然的,偶然是被加密的,偶然它们是放在芯片制造商的官方网站上,下载便可。用于查找数据表的资本多是:

· Google:没有甚么比Google更好的搜刮引擎了。

· 相似Yandex.ru的网站:Yandex是俄罗斯收集具有用户最多的网站,不要低估非英语搜刮引擎和论坛的威力。

· Alibaba:大局部芯片在这里有卖的,一些列表将链接到你能够没法在其他任何地方找到的数据表,你也能够经由过程直接与供应商攀谈来猎取数据表。

若是找不到数据表,最少须要找到进口点和固件应加载的地点。你能够经由过程谷歌搜刮、浏览论坛、浏览源代码或其他一些意想不到的角落找到谜底。若是你的目标芯片有东西链,那末个中也能够有源代码,这也能够致使你朝着准确的偏向行进。

将裸机二进制文件加载到IDA中

剖析裸机时,IDA仍然是最有用的(也是最通用的)逆向剖析递次。关于怎样运用裸机二进制文件,相干文章许多。然则,通常状况下,剖析裸机二进制文件时,你须要晓得加载地点和进口点。

加载地点是正在实行二进制文件的内存中的地点,进口点是处理器最先实行的二进制文件中的地位。

一样,你须要记着正在剖析的固件的情况,相识内核及其特征对剖析会有很大资助。若是你正在检察运转在Cortex-M上的某些内容,你能够会发明自身异常熟习的infocenter.arm.com网站。

以下,我将运用裸机ARM二进制文件为例举行申明,由于裸机ARM异常罕见。

让我们看看STM32F405的体系指导加载递次,若是你已提早装置好了,就能够或许自由自在的举行内存接见了。由于STM32数据表都是在线的宣布的,以是我们能够经由过程google找到STM32F405的数据表。

固件逆向剖析过程当中的东西和技能

数据表显现,指导加载递次位于“体系内存”中,但详细是在那边?

依据上图的提醒,体系内存位于0x1fff0000。

因而,将0x1fff0000到0x1fff77ff之间的一切内存逆向剖析到一个文件以后,我们就能够或许举行一些疾速的完整性搜检,顺带搜检一下内里有无字符串。

$ strings -n5 stm32f405.bin
s F
1`hC1hA
rAh
CA`b{
pGZHJ
!1Ccs
[…snip…]
a`hK!Aa`h
[email protected]
[email protected][email protected]!
beta1

相当多字符串都是无用的,只要以下的这些对剖析有用。

$ strings -el stm32f405.bin
@Internal Flash  /0x08000000/04*016Kg,01*064Kg,07*128Kg
@OTP Memory /0x1FFF7800/01*512 e,01*016 e
@Option Bytes  /0x1FFFC000/01*016 e
@Device Feature/0xFFFF0000/01*004 e
STMicroelectronics
STM32  BOOTLOADER
STM32F2STM32
"11

我们还能够搜检代码编译的目标是甚么,以及甚么是字节递次。为此,我们能够再次运用binwalk。

binwalk有一个内置的操纵码扫描器,它运用-Y标记激活。它不实行通例的binwalk把戏字节扫描运动。相反,它只是运用Capstone引擎搜检一切重要体系构造的有用指令并申报它找到的内容,包罗有若干一连有用指令,体系构造和字节递次。若是你只想对正在检察的某些固件举行疾速的搜检,这是异常有用的。

以下显现的就是binwalk运转在一个STM32F405指导加载递次的历程:

$ binwalk -Y stm32f405.bin
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             ARM executable code, 16-bit (Thumb), little endian, at least 1079 valid instructions

然则,须要注重的是,binwalk -Y只是卖力搜检文件是不是包罗有用字节码的一种简朴要领。它没有通知你任何关于固件自身的有用信息,只会通知你内里有无有用的字节码。

独一的有用信息是让我们晓得,字节码是从偏移量0处最先的,Capstone引擎能够将字节读取为有用的LITTLE-ENDIAN(低字节序)Thumb代码。本示例中,我们获得了1079条有用指令,这是相当多的代码。然后,我们能够将这个逆向剖析装载到IDA中。

译者注:Capstone是一个轻量级的多平台多架构支撑的逆向剖析框架。支撑包罗ARM,ARM64,MIPS和x86/x64平台。

iOS/macOS内容过滤器内核UAF破绽剖析和观点证实

LITTLE-ENDIAN(小字节序、低字节序),即低位字节排放在内存的低地点端,高位字节排放在内存的高地点端,与之对应的是:BIG-ENDIAN(大字节序、高字节序)。

在IDA中翻开文件,你将看到经常使用的弹出窗口。此时IDA不会为你处理任何问题,因而你须要将“处理器范例”更改成“ARM Little-endian [ARM]”,然后单击“设置”。

若是你想删除ARM代码,而且只运用Thumb代码,你能够实行以下操纵:

点击“处理器选项”,弹出“ARM特定选项”窗口。

点击“编纂ARM架构选项”按钮:

在“ARM架构选项”窗口中,将“ARM指令”设置为“否”。保存Thumb申明,按下“OK”“OK”“OK”,此时,IDA将再次提醒你,此次请求你设置装备摆设内存。

由于我们已晓得指导加载递次的地点是0x1FFF0000,因而我们能够在ROM肇端地点字段中输入0x1FFF0000。别的,我们还须要设置“加载地点”来反应这一点,以是你也应当把0x1FFF0000放在那边。

单击“OK”,能够会弹出一个小窗口,提醒你能够运用Alt+G组合键在ARM和Thumb指令之间切换。偶然候这也是一个很好的技能,但不是很直观,我如今给你树模一下。

加载二进制文件后,若是单击一个地点(比方,在此示例中,它是0x1FFF0000处的二进制基数),然后按Alt + G,将弹出“Segment Register Value”窗口。

0x1的“值”透露表现这一地点以后的代码(0x1FFF0000)将被视为Thumb代码,这意味着,ARM处理器状况寄存器中的“T”标记,会将“T”标记设置为1,以透露表现正在实行Thumb代码,而且标记0透露表现正在实行ARM代码。

注重:CODE16也会放在谁人地点中,其作用就是提醒你。若是将它设置为0x0,它将被视为ARM处理器状况。在这类状况下,CODE32也将会放在谁人地点中。

你能够稍后在文件中单击任何其他地点并将值设置为0x0,并在该地点以后的代码将被视为ARM。但无论怎样,我们不愿望如许做,我们愿望一切内容都被视为Thumb,以是它被设为0x1。

进口点在那边?

这一步,我们也要用到IDA。

我们能够经由过程检察中缀向量表来肯定进口点,只须要晓得表中的哪一个元素是重置向量便可,由于重置向量就是我们的进口点。重置向量是当装备重置时,CPU将最先实行代码的地点。

STM32F405具有Cortex-M4内核,因而我们能够运用Google查找Cortex-M4向量表。在Cortex-M4装备通用用户指南中,我们能够发明以下内容。

另有这个:

这很风趣,让我们先记着它们。

这个有用的表显现偏移量0x0处的指针是初始客栈指针地位,偏移量0x4处的指针是重置向量,偏移量0x8处的指针是弗成掩码中缀的,重置向量是处理器在启动时最先实行代码的地点。

在IDA中,我们能够将地点0x0、0x4、0x8等处的数据界说为“ DWORD”。DWORD全称Double Word,是指注册表的键值,每一个word为2个字节的长度,DWORD 双字即为4个字节,每一个字节是8位,共32位。右键单击地点0x1FFF0000处的字节,然后单击“ DWORD”,末了在0x1FFF0004处实行雷同的操纵。

看看我们从下图中获得了甚么,我自身也添加了批评。这些看起来很公道。0x0偏移处的初始客栈指针值指向一个SRAM的内存块。我们相识该内存块,是由于我们在数据表中读取了它。

重置向量0x1FFF3DA1也有意义,如今让我们跳到IDA中的谁人地位。要么高亮显现并按下“Enter”,要么右键单击并挑选“跳转到操纵数”。

请注重:在Thumb形式下,重置向量的最小有用位加了1。以是,现实的重置向量要减去 1。

注重,此时IDA“stripe”(在顶部)完全是芥末色的,这意味着到目前为止文件中没有任何内容被界说。以是,我们的目标就是要对它们举行界说。

点击复位向量减1后的地点,按“C”,IDA将最先逆向剖析。

这看起来很公道,已界说了许多子例程,以是在 IDA “stripe”中有相当多的蓝色。关于向量表中的其他唯一指针,继承雷同的操纵,你将看到更多的蓝色涌现。

如今,你能够最先相识固件庞杂的内部事情道理。

让我们疾速地看一下这个子例程,以资助你继承剖析。在这个子例程中,你能够看到值0x40023C04被加载到R0中,然后0x45670123和0xCDEF89AB被顺次写入0x40023C04的内存中。

图中赤色凸起显现的地点指的是将要接见的内存,它没有映照到IDA文件中。因而,以后IDA文件中没有映照0x40023C04的内存。实在你不须要映照它,但能够须要在数据表中查找它的用处。

经由过程检察STM32F4数据表,我们能够看到0x40023C04指的是Flash接口寄存器内存段中的某个地点。

固件逆向剖析过程当中的东西和技能

而且0x40023C00基址的偏移量0x4指的是闪存密钥寄存器(FLASH_KEYR):

能够看到,数据表中有0x45670123和0xCDEF89AB值,它们是解锁Flash掌握寄存器的密钥。这就是这个子例程的作用。

IDA剧本

在逆向剖析时期,你能够会须要一些有用的IDA剧本,你能够在运用IDA中的嵌入式固件时运用它们。IDA Python嵌入式东西包就是对照有名的IDA剧本,它能够让固件的逆向剖析变得更轻易。但一般来说,在谷歌上搜刮你正在运用的特定芯片能够会比运用剧本东西来得更直接高效一些,这会为你节省了许多时候。有许多特别的代码,能够资助你从新构建种种新鲜芯片的固件。

总结

本文讲了逆向剖析的许多要领,但不论哪一种要领,你都要先搞清楚你正在运用的固件的情况。不要甚么都依靠binwalk。若是有疑问,请运用分歧的搜刮引擎。末了,你要醒目对十六进制字节的剖析。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明固件逆向剖析过程当中的东西和技能
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址