网易首页 > 网易号 > 正文 申请入驻

逆向工程物联网固件解析part 2

0
分享至

现在我们已经将所有段加载到适当的地址,我们可以开始逆向工程了。

但为了高效地做到这一点,我们需要更多地了解 Xtensa 架构,包括:

1.指令中的参数顺序

2.条件跳转的执行细节

3.编译器调用约定

4.堆栈组织

首先要探索的是指令中的参数顺序。例如:MOV R1, R2. 您可以在所有架构中找到此类指令,但这可能意味着将 R1 复制到 R2 或将 R2 复制到 R1。因此,了解指令中源代码的位置以及目标寄存器的位置至关重要。您可以在 GitHub 上找到Xtensa 指令集描述。

至于该MOV指令,在Xtensa中,表示将R2复制到R1。因此,第一个参数将是大多数简单指令(例如数学相关指令)中的目的地。例如,指令addi a14, a1, 0x38意味着 a14 = a1 + 0x38。

但对于存储数据的指令,情况则相反。例如,该指令s32i.n a5, a1, 0x10意味着 的值a5必须存储在地址 处(a1 + 0x10)。

要学习的第二件事是条件跳转的完成方式。有两种方法可以做到这一点:

1.使用专用指令进行比较操作,设置标志寄存器,然后进行条件跳转。

2.使用一条指令一次性执行所有这些操作。

Xtensa 执行后者:beqz a10, loc_400E1C54

使用单个指令来检查是否a10等于零,然后它要么跳转到loc_400E1C54,要么不跳转。

第三步是检查编译器使用的调用约定:将参数传递给函数的方式以及如何返回值。

Xtensa 以一种非常不寻常的方式传递参数。参数在调用指令之前放入寄存器中。但它们在函数中出现的寄存器与调用之前所在的寄存器不同:

以下是如何在汇编程序级别将参数传递给函数的示例:

这里我们有三个论据:

a10 是目的地址

a11 是源地址

a12 是要复印的尺寸

然而,一旦代码进入memcpy函数,这些值就会自动分别传输到a2、a3和a4寄存器中。

同样的技巧也用于返回值。在memcpy函数内部,该值存储在寄存器中a2,但从函数返回后,该值出现在a10.

返回的样子如下0:

这就是检查返回值的样子:

benz.na10在从调用返回时检查寄存器的值。

最后,有必要了解堆栈是如何组织的。

Xtensa 使用 a1 寄存器来创建堆栈帧。每个函数都以入口指令开始:entry a1,0xC0,其中0xC0是堆栈帧的大小,即函数需要用于堆栈变量的堆栈量。

通常,这些函数从初始化堆栈变量开始:

寄存器中的零值a5被写入基于a1寄存器的堆栈变量中。

在获得有关 Xtensa 架构的所有必要知识后,我们终于可以开始逆向其代码了。

与 ARM、MIPS 和 PowerPC 相比,Xtensa 不是最流行的架构,并且没有完整的功能列表。因此,IDA处理器模块会存在一些我们需要克服的限制。

IDA 中 Xtensa 处理器模块的主要限制是:

函数参数没有自动注释

堆栈帧不会自动创建

一些 ESP32 函数属于 IROM,因此存在对硬编码地址的调用

部分Xtensa指令未反汇编

让我们讨论一些克服这些挑战的技巧。

5.1. 函数参数的类型系统和注释

从 IDA 7.7 开始提供 Xtensa类型系统。在 IDA 中拥有可用的类型系统非常重要,因为它使逆向变得方便。特别是,它允许您导入 C 结构的定义并指定 IDA 使用的函数原型,以便在传输函数参数的指令附近放置自动注释。

但是,如果您没有类型系统,还有一个解决方法。

首先,让我们看看有类型系统时函数是什么样子的:

屏幕截图 13. 当有可用的类型系统时函数的外观

函数原型设置有参数的名称和类型,以便 IDA 可以使用此信息在调用站点注释参数:

屏幕截图 14. 函数原型

但 Xtensa 不会有这样的事情。另一种方法是使用 IDA 中的可重复注释功能。如果您在函数的开头设置可重复的注释,它将显示在所有调用站点上。

屏幕截图 15. 设置可重复注释

屏幕截图 16. 可重复的注释显示在所有调用站点上

因此,我们可以使用此功能来定义函数参数:

屏幕截图 17. 使用可重复注释功能定义函数参数

调用站点将如下所示:

屏幕截图 18. 调用站点

您可以在注释中选择寄存器名称,IDA 会在代码中突出显示它。因此,您可以轻松找到参数值。

5.2. 恢复堆栈帧

要恢复堆栈帧,您需要手动指定堆栈大小,然后通过在每个与堆栈一起使用的指令处按K 键来显示 IDA 的使用位置。

让我们探索一下config_router_safe函数,例如:

屏幕截图 19. config_router_safe 函数

很明显这里的栈帧大小是 0xC0。我们在函数的堆栈设置中使用该值(Alt+P):

屏幕截图 20. 使用 0xC0 值(堆栈帧大小)

从视觉上看,什么也不会发生,但是如果您通过按 Ctrl+K 转到该函数的堆栈帧,您会注意到堆栈空间现在已分配:

屏幕截图 21. 分配堆栈空间

接下来要做的是使用entry指令指定堆栈移位。在此之前,我们建议启用堆栈指针可视化,如下面的屏幕截图所示:

屏幕截图 22. 启用堆栈指针可视化

现在,代码应该如下所示:

屏幕截图 23.启用堆栈指针可视化后的代码

000是当前堆栈指针移位值,我们需要将其移位0xC0。为此,请将光标置于入口指令处,然后按Alt+K以查看以下窗口,您可以在其中指定新旧堆栈指针之间所需的差异:

屏幕截图 24. 将当前堆栈指针值移动 0xC0

作为此操作的结果,代码将如下所示:

屏幕截图 25. 移动当前堆栈指针移位值后的代码

现在,如果您开始在与寄存器一起使用的每条指令处按Ka1,IDA 将创建堆栈变量:

屏幕截图 26.IDA 创建新的堆栈变量

还可以编写 IDA 脚本来自动执行这些操作。

5.3. 调用 IROM

调用位于 CPU 的 IROM 部分而不是固件中的某些低级 API 的情况并不少见。在这种情况下,固件仅与包含定义的 IROM 函数地址的特殊链接器定义文件链接。

在逆向期间,IROM 函数调用如下所示:

屏幕截图 27. IROM 函数调用

40058E4C是 IROM 内的地址。但不可能知道固件调用了哪个函数。因此有必要检查 ESP32 工具链以查找链接器定义。

ESP32 芯片的 IDE 是Espressif IDE。在 IDE 文件中搜索 IROM 地址,我们会找到:C:\Espressif\frameworks\esp-idf-v4.4.2\components\esptool_py\esptool\flasher_stub\ld\rom_32.ld

屏幕截图 28. ESP32 ROM 地址表

这些值可以轻松转换为枚举数据类型:

屏幕截图 29. 将值转换为枚举数据类型

然后,我们需要导入 IDA,以便将 enum 应用于 IROM 地址值:

屏幕截图 30. 将枚举应用于 IROM 地址值

如果我们在 IROM 地址附近添加可重复的注释,它将使所有内容更容易阅读:

屏幕截图 31. 在 IROM 地址附近添加可重复注释后的代码

5.4. 无法识别的指令

经常发生的情况是,处理器模块已针对指令集的某些特定变体实现。然后制造商制造出具有 99% 兼容指令集的新 CPU,其中包含 10 多个新指令,这是最初没人想到的。因此IDA、Ghidra和Radare等工具可能无法反汇编一些新指令。

克服这一挑战的正确方法是扩展处理器模块并添加对新指令的支持。这需要对反汇编器 API 有深入的了解,而这些 API 并不那么容易理解。

让我们讨论一种可能的解决方法,用于解决以下情况:尽管存在一些无法识别的指令,但您只想让 IDA 创建函数。假设 IDA 不知道 RER 指令,并且在包含 RER 操作码的情况下无法创建该函数:

屏幕截图 32. 如果函数包含 RER 操作码,IDA 无法创建该函数

您可以按P多次。除了控制台窗口中出现错误外,不会发生任何事情:

屏幕截图 33. 控制台窗口中的错误

但是,这并不意味着 IDA 无法创建遵循 RER 指令的指令。您可以跳过 RER 指令的三个字节,然后创建代码:

屏幕截图 34. 跳过 RER 指令的三个字节后创建代码

接下来,您可以选择从输入到最后的整段代码retw.n,然后按P:

屏幕截图 35. 选择从 Entry 到 retw.n 的整段代码

之后,IDA 将创建该函数:

屏幕截图 36.IDA 创建一个函数

通常,反汇编程序无法识别的扩展指令在逆向过程中不会产生太大差异。可能导致问题的是执行调用、跳转或加载/存储等操作的新指令,因为代码流丢失并且对数据的引用丢失。

对于涉及逆向工程物联网固件的项目来说,在转向业务逻辑之前研究未知的硬件架构至关重要。尽管逆向工程师可能需要几周的时间来学习该架构,但从长远来看,这种深入的研究有助于提高进一步工作的速度。

参考及来源:https://www.apriorit.com/dev-blog/reverse-reverse-engineer-iot-firmware

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中专“数学天才”姜萍,该散去了

中专“数学天才”姜萍,该散去了

刁博
2024-06-30 16:51:56
湖南女子走错房间,误与双胞胎哥哥发生关系,意外怀孕……

湖南女子走错房间,误与双胞胎哥哥发生关系,意外怀孕……

极品小牛肉
2024-06-18 21:17:24
网红夹包哥连中13刀遇害!凶手发声回应,警方:不是因为感情问题

网红夹包哥连中13刀遇害!凶手发声回应,警方:不是因为感情问题

林大师热点
2024-07-02 18:18:05
事发上海虹桥站!知名博主爆料:短途被出租车拒载,直接锁车门加速走了?官方回应:处置

事发上海虹桥站!知名博主爆料:短途被出租车拒载,直接锁车门加速走了?官方回应:处置

上观新闻
2024-07-01 21:58:49
布朗尼将与湖人签下多年新秀保障合同 球迷热议嘲讽 能打脸质疑吗

布朗尼将与湖人签下多年新秀保障合同 球迷热议嘲讽 能打脸质疑吗

厝边人侃体育
2024-07-03 00:40:30
安徽绩溪县公安局党委委员、副局长兼治安管理大队大队长、一级警长胡林翼被查

安徽绩溪县公安局党委委员、副局长兼治安管理大队大队长、一级警长胡林翼被查

鲁中晨报
2024-07-02 16:59:03
为什么要少看中国历史?

为什么要少看中国历史?

黑噪音
2024-07-02 01:45:18
地方债务的手,伸向了孩子的营养餐,对外儿童援助,对内挪用克扣

地方债务的手,伸向了孩子的营养餐,对外儿童援助,对内挪用克扣

眼光很亮
2024-07-02 10:00:02
队记:克莱可能更在意追梦合同 后者承认毁了一个赛季并得到报酬

队记:克莱可能更在意追梦合同 后者承认毁了一个赛季并得到报酬

直播吧
2024-07-03 06:10:30
深夜!爆雷了!

深夜!爆雷了!

中国基金报
2024-07-03 00:14:22
太难了!建行将进行大规模的降薪10%?高级官员将大幅度削减工资

太难了!建行将进行大规模的降薪10%?高级官员将大幅度削减工资

火山诗话
2024-07-02 17:17:57
莫兰德换陶汉林!辽篮内线史诗级加强,韩德君或转型当教练

莫兰德换陶汉林!辽篮内线史诗级加强,韩德君或转型当教练

十点体坛
2024-07-02 21:32:08
93分59秒逃生!欧洲杯壮观1幕:终场哨响全队瘫倒,拼出奇迹

93分59秒逃生!欧洲杯壮观1幕:终场哨响全队瘫倒,拼出奇迹

叶青足球世界
2024-07-03 05:40:00
张馨予开启暑假暴走模式!连夜驱车从广州到西安,妈妈罕露脸好美

张馨予开启暑假暴走模式!连夜驱车从广州到西安,妈妈罕露脸好美

鑫鑫说说
2024-07-02 16:21:10
大S丑态曝光!具俊晔公布妻子居家状态,随意睡地板不顾形象

大S丑态曝光!具俊晔公布妻子居家状态,随意睡地板不顾形象

小seven的囧囧啊
2024-07-02 15:19:59
痛心!亚运会冠军宣布无缘巴黎奥运会,网友建议彻查

痛心!亚运会冠军宣布无缘巴黎奥运会,网友建议彻查

何老师呀
2024-07-02 16:59:43
越闹越大!37岁李敏镐最新广告:发腮严重,鼻子变矮已经肿无可肿

越闹越大!37岁李敏镐最新广告:发腮严重,鼻子变矮已经肿无可肿

娱圈小愚
2024-07-02 11:49:59
美国被困宇航员可能回不来了!美联航调查发现:责任全在印度

美国被困宇航员可能回不来了!美联航调查发现:责任全在印度

奇点使者
2024-07-01 18:42:11
杨颖真落魄了!在直播间谄媚讨好网红辛巴,后者让她“滚”引热议

杨颖真落魄了!在直播间谄媚讨好网红辛巴,后者让她“滚”引热议

每日新鲜事吖
2024-07-02 10:06:37
16岁时被强奸灌药性虐,成年被艳照门!希尔顿太惨?

16岁时被强奸灌药性虐,成年被艳照门!希尔顿太惨?

释凡电影
2024-07-02 21:00:03
2024-07-03 06:36:49
嘶吼RoarTalk
嘶吼RoarTalk
不一样的互联网安全新视界
7455文章数 10508关注度
往期回顾 全部

科技要闻

旧车比新车贵,比亚迪断了二手车贩子活路

头条要闻

欧洲杯-中卫双响土耳其2-1奥地利 进8强将战荷兰

头条要闻

欧洲杯-中卫双响土耳其2-1奥地利 进8强将战荷兰

体育要闻

世界第二打第三,成了一场英格兰模仿秀

娱乐要闻

未火先塌?流量的路子不好走啊

财经要闻

张军:房地产是经济收缩的受害者而非原因

汽车要闻

18.96万 奕派eπ007 540纯电四驱Pro上市

态度原创

手机
家居
游戏
旅游
军事航空

手机要闻

OPPO A3发布:售1599元起 抗摔耐磨还防水

家居要闻

江畔雅居 石质与木色的现代风

《地狱潜者2》开发者:下个补丁专注PC版的性能问题

旅游要闻

官宣!黄鹤楼公园等55家武汉旅游景区今起免预约!

军事要闻

泽连斯基称不排除通过中间方谈判的可能性 克宫表态

无障碍浏览 进入关怀版