时时勤拂拭,勿使惹尘埃

TOC

Categories

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,手机将会再次重启。
手机启动后,调出SYSDUMP菜单,下滑找到RUN FORCED CP CRASH DUMP,并点击,手机将再次重启,并进入RAM加载模式。

同时按住POWER键和VOLUME DOWN键超过10秒将手机关闭并再次开机,开始dump过程。
重新打开SYSDUMP菜单,并点击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默认并不能正确解析

需要添加module:
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]