Android(四)基带固件提取&解析
0x1 固件提取
0x11 Android固件提取
0x111 从刷机包 update.zip中解压缩
虽然可以直接从刷机包update.zip中直接解压出基带固件,但升级包中的固件是加密的,解密过程暂为了解。
0x112 Root提取
Android的
/dev/block/platform/*/by-name
目录下为分区表,其中modem分区即基带,dd备份到sdcard即可导出
$ adb shell
$ su
$ dd if=/dev/block/platform/msm_sdcc.1/by-name/modem of=/sdcard/NON-HLOS.bin
$ exit
$ exit
$ adb pull /sdcard/NON-HLOS.bin ./
NON-HLOS(NON High Level OS)即基带处理器的系统,与HLOS(High Level OS) Android对应;里面包含GNSS(Global Navigation Satellite System),如GPS,子系统的控制模块;还有mDSP(modem Digital Sigal Processor)等子系统的控制模块;网上有泄露的高通某些型号基带源码,可以自己编译。
而
NON-HLOS.bin
实际就是一个FAT16格式的磁盘映像,linux挂载磁盘映像方式如下:
$ su
$ mkdir mountpoint
$ mount -o loop NON-HLOS.bin mountpoint
$ cp -r mountpoint modem
$ umount mountpoint
其实只需后缀改为img,mac即可在finder中挂载:
该镜像具有完整文件系统,所以binwalk 工具也可以直接提取:
0x113 未root提取(三星)
虽然Shannon基带固件在可以在三星手机firmware中找到,但升级包中的固件是加密的,Amat Cama挖掘shannon基带漏洞的目的主要是满足pwn2own的要求,即找到能从OTA远程利用的基带漏洞,因此,在这里,Amat没有去挑战如何解密基带固件,而是想办法直奔主题,通过ramdump将已经解密的基带固件从内存中直接dump出来,具体流程如下。
在拨号盘上输入
*#9900#
调出工程模式的SYSDUMP菜单DEBUG LEVEL ENABLED
按钮,将debug level设定为HIGH
,之后手机将重新启动。
手机启动后,在拨号盘键入
*#9900#
重新调出SYSDUM菜单,将CP RAM LOGGING
设定为ON,手机将会再次重启。RUN FORCED CP CRASH DUMP
,并点击,手机将再次重启,并进入RAM加载模式。
同时按住POWER键和VOLUME DOWN键超过10秒将手机关闭并再次开机,开始dump过程。
COPY TO SDCARD(INCLUDE CP RAMDUMP)
按钮,将dump文件拷贝到SDCARD。这时在/sdcard/log
下将有一个名为pcrash_dump_YYYYMMDD_HHSS.log
的文件。0x12 iOS基带固件提取
参考:iOS黑客手册
iPhone4及以上直接解压ipsw文件即可
0x2 固件分析
0x21 Binwalk解包
推荐用binwalk解包,解析出来直接就是arm elf格式,ida可以直接加载
右边为文件格式
0x22 镜像解包
固件文件格式如下
IDA解析
而ida默认并不能正确解析
IDA processor module for the hexagon (QDSP6) processor
Hexag00n: A collection of reverse engineering tools for the Qualcomm Digital Signal Proccesor (QDSP6)
将插件文件放到ida如下目录:
加载文件时cpu类型选择Qualcomm Hexagon DSP v4 [QDSP6]