LinuxJiaoCheng

LinuxJiaoCheng.com
Linux教程网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

使用IDApro逆向ARMM系核心的Bin固件(组图)

2022年12月23日 153点热度

使用IDA pro逆向ARM M系核心的Bin固件

​ 物联网和智能设备这两年还是比较火的,我们的手中或多或少都有了几个智能设备,比如手环,智能手表,或者门锁什么之类的东西,但是同学们在做逆向的时候,却有很多问题。要不然是根本拿不到固件,要不然是拿到了Bin之后看不懂,这篇文章带大家手把手调教IDA pro,让他逆向无符号的Bin文件。

一.意义

​ 先说一下逆向固件的意义把,一般来说,这种小东西都会和外界有交互,蓝牙linux源代码分析,WIFI,网络,4G,zigbee等等,我们逆向出他的协议就可以发现其中的安全问题。比如如果你逆向了一个手环的协议,发现它没有做身份验证或者验证不严谨,就可以批量的影响手环,或者你搞定了一个网络协议,可能发现一个网络的暴露服务,对云平台发起攻击,等等。

​ 我们当然可以从APP上入手去搞,但是这几年,随着APP加固的大面积使用,难度系数正在上升,而硬件上,特别是M系的MCU,为了成本,运算速度和功耗,很少有使用加密一类防御手段的。STM32系列可以使用设置RDP位的方式锁死固件读取,但是这样搞了之后,程序也就没有办法升级了,同时也带来了开发和调试时间上的消耗,面对整分夺秒的市场,使用的还是很少的。(实际上即便是开了防御也是有方法搞的。。。)

二.通过文件结构使IDA正确反汇编

​ 在开始搞之前,我们先了解一下文件的结构。

​ 大家熟悉的windows或者linux下的可执行文件,里面会包含一些函数信息,也会包含加载基址,段,架构等信息,但是嵌入式设备为了减小flash的占用,这一切统统没有。所以拖进IDA中之后是这个样子的。

6943702e00c0bdfc2985766cafa2709a.png

IDA会问你,他是什么架构的。

汇编软件中断程序_圣经经文汇编软件_linux反汇编软件

​ 我们可以通过查询芯片信息的方式或得到架构的信息(ARM架构当然是ARM啊),选择使用ARM小端序进行反汇编。

b1c67c9a3c4db2779c613d842058fb26.png

​ 确定进入之后,IDA还会问你一些信息。

207aedf8a15651db1adcf8c39fda0dc8.png

​ IDA会问你,RAM的位置,ROM的位置和加载基址。由于我们什么都不知道,直接按OK进入,等我们拿到了一些信息之后回来改。

​ 进去之后是这个样子的,先别慌,我们还要改一个东西。

​ M系使用的是ARM的Thumb指令集,所以需要先改为Thumb指令集汇编。按ALT+g,把里面T的值改为0x1.

cb1b0750bd565cd469b69ba4e9f352a8.png

之后就成了这个样子

汇编软件中断程序_linux反汇编软件_圣经经文汇编软件

我们先在0x00000000的位置按d,改变IDA的显示位数,到DCB。在0x00000004的位置也一样。

1bfe3c06567ea24152c8a2ab2f5f0903.png

这个时候就要对整个ARM M核心的启动流程有熟悉了,首先,0x00000000位置的值作为栈的SP指针,之后把0x00000004位置的值写入PC指针,也就是芯片上电之后开始的位置。

这个时候,就看出加载基质的作用了,由于加载基地址不明确,我们跳不到0x10001065中去。

我们可以在每个0x2对齐的位置去按C(因为Thumb指令是0x2对齐的),让IDA Pro强行反汇编。

按了几个之后红旗linux安装,就会发现整个调用的架构逐渐清晰起来了。

这时候,会发现一些位置的地址是红色的,表示超出索引

c6b3b51e174ad6a2a0c4ac9393eaa9a0.png

可以看出这两句使用BX的绝对跳转,加载基地址不会小于0x10000000,实际上就是0x10000000.具体加载基址的确定,还是需要研究人员对硬件和架构的熟悉linux反汇编软件,有很大程度是猜和试的成分。

圣经经文汇编软件_汇编软件中断程序_linux反汇编软件

比如上面的两句话,实际上就是0x00000004地址上的值跳转过来的,0x10001065和0x10001064相差0x1,这是一个历史遗留问题,但是不会产生影响,CPU会自动纠偏。凭借此就可以得出加载基址的位置。

去年KCON,有一个议题就是讲如何自动寻找加载地址,利用的就是固件中一些绝对的加载位置,有兴趣大家可以看一下。

确定了加载地址,我们重新载入之后,就可以看见正常的调用关系了。

5278f9508dd3c195942db8a2bf1a52d7.png

之后在还是按照上面的方法,进行操作,由于加载地址是正确的,就可以识别出很多的函数调用关系,我们按C强制让ida pro汇编的地方也会少很多。

里面还会发现一些红色的地址,这就要参考硬件的芯片手册确定意义了

d8b48fe208538b45ad5251c9a381f10a.png

有一些函数是硬件中断处理函数,由硬件触发,与主线没有调用关系,所以还是会发现一些没有反汇编的代码,手动按C汇编一下就行了。

但是其中的函数没有名字,是这个样子的,很难受

b9042a3a6435c0261b83dc5550713fca.png

linux反汇编软件_汇编软件中断程序_圣经经文汇编软件

怎么办呢?由于硬件的底层函数大部分都是标准函数,由芯片厂商提供,因此可以自己搭建一个和目标相同的开发环境,编译一个函数比较全的固件,之后使用bindiff进行函数查找。

我们先写一个函数比较多的程序,之后编译,得到axf文件,使用ida进行反编译

axf文件是有很多辅助信息的,拖入之后ida pro直接可以识别

ea8fac05b6c09c6858f36d5c073b0e90.png

反汇编之后,代码结构和函数名可以直接显示出来

e5b1a5191d7cce4964870276d1454e03.png

这个时候直接关闭,保存反汇编的结果

打开目标bin文件,恢复出函数结构之后linux反汇编软件,打开bindiff,加载之前保存的axf文件的反汇编结果

7fc22307fdc0a4d330c65a4b9d22921a.png

加载之后

linux反汇编软件_汇编软件中断程序_圣经经文汇编软件

可以看到函数名的对应关系

我们也可以简单看一下bindiff的匹配原理是什么,每个匹配的函数,bindiff都会给一个匹配理由

66d48081ee725a0f22973b71e0444619.png

这样我们就可以使用IDA PRO继续进一步的分析了,希望这篇文章抛砖引玉,可以让大家的研究出更多好玩的东西。

----------------分割线---------------------------------------

今天下载的NSA刚发布的ghidra 9.0,逆向ARM M也是同一个套路,只不过操作的键位不同。效果如下:

还算可以

但是他的diff功能更倾向于查找不同点,我暂时还没找到构建函数名索引,目前还是IDA Pro比较好用

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: ida 反汇编
最后更新:2022年12月23日

Linux教程网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux教程网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux文件恢复技巧,实用命令大揭秘 开源操作系统的分类及分类类的Linux操作方式 Linux安装实验报告:建议与注意事项 Linux操作系统——Linux移动端的发展史 Linux系统下解压xz文件的七步曲 Linux软件安装位置选择指南 linux 安装usb转串口驱动 USB的VID和PID号USB,区别在哪? linux安装bind Linux DNS服务器对比 linux cuda Linux CUDA:安装配置与应用实践 Linux中查看某个软件的安装路径(地址)命令 远程登录Linux服务器的技巧:Telnet命令详解 运维工程师简历范本(运维)(广州艾迪思电子科技有限公司) linux c and LinuxC编程精要 包和软件包管理器,就好比“App”和“应用商店”这样的关系 开源三剑客:Linux、PHP、MySQL评测 linux查看软件安装目录的方法和操作环境的教程方法 Linux文件恢复技巧 Linux查看软件安装目录及位置4种方法(Linux) 嵌入式工程师到底做些什么月薪有多少?月薪多少 修改Linux命令行字体大小的方法
Linux命令轻松查看系统版本Linux虚拟主机与Windows虚拟有哪些区别?怎么选Linux Kernel 4.0:开源世界的新篇章Linux命令大全用于检测与另一个主机之间的网络连接简洁明了:Linux安装虚拟机,轻松上手!自考《操作系统概论》博客中的知识归纳和总结Linux驱动解读Linux系统远程上传文件和目录命令应用命令参数CentOS搭建NTP服务器,详解步骤与注意事项Linux内核网络协议栈的细节介绍高效办公,红旗Linux桌面应用教程Linux内核链路层路径接收中断的条件下执行的范围释放技术潜能,掌握Linux版本命令腾讯的开源协议栈f-stack.pdf在DPDK技术峰会上推出的重要技术创新Linux RAID驱动:原理与应用解析嵌入式开发必备的基础知识-经典书籍推荐:linux多cpu 操作系统 2017年上海事业单位招聘考试:保研面试资料复习经验简洁易懂的标题:Linux安装targz,步骤技巧一览VMwareWorkstation15最新破解版含激活码,安装破解激活图文教程简洁高效:Linux防火墙配置攻略
Linux操作系统的种类,你了解几个? 轻松搞定Linux软件安装命令 基于Android5.1(Linux-3.10)模拟按键的操作 Linux文件时间统计:掌握文件时光机! 《LinuxShell核心编程指南》之自动化运维内容概述 创建jdkjdk的配置路径是否错误的安装目录 玩转Linux平台QQ游戏,畅享无限乐趣 网络上现成的资料格式:替换多个文件中的 麒麟信安服务器操作系统V3.4-5即将发布 中国凌乱的操作系统行业开始进入大整合时代? 【智传网优】linux系统镜像工具推荐克隆工具 掌握Unix环境高级编程与Linux程序设计的8大核心技能 红帽Linux:特点与优势揭秘 CentOS FTP服务器配置教程:安装vsftpd软件包,轻松搭建FTP服务 远程Linux主机上面的文件 编译Linux内核,避免常见错误 如何去制作深度Linux系统的启动U盘?刚入门Linux Linux内核报告:从BitKeeper到Git,迎来一个新的里程碑 集群系统下实现session统一的有如下几种方案 CentOS安装JDK:Java开发工具包对比指南!
标签聚合
操作 系统 命令 linux服务器 内核 linux系统 应用 虚拟机 操作系统开发 软件
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 80篇
  • 2023年8月 / 120篇
  • 2023年7月 / 121篇
  • 2023年6月 / 119篇
  • 2023年5月 / 124篇
  • 2023年4月 / 113篇
  • 2023年3月 / 107篇
  • 2023年2月 / 81篇
  • 2023年1月 / 159篇
  • 2022年12月 / 172篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxjiaocheng.com ALL RIGHTS RESERVED.

京ICP备16058923号-3