从刷机包或者已经root的手机中提取基带固件

原文地址 http://www.oppoforums.com/threads/reconstructing-find-7-a-lowlevel-driver-for-analysis-radio-wlan-etc.14596/
原文标题 重建Find7 底层驱动供分析(Radio, WLAN等)

NON-HLOS.bin 实际就是一个FAT16格式的磁盘映像。
有两种方法取得
1. 从刷机包 update.zip中解压缩
2. 从root的手机中获取 (下面以 OPPO Find7为例)

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
adb shell
rm /sdcard/NON-HLOS.bin
exit

获得NON-HLOS.bin之后,就要挂载这个磁盘映像

su
mkdir mountpoint
mount -o loop NON-HLOS.bin mountpoint
cp -r mountpoint modem
umount mountpoint

现在在modem目录下就有初步提取的底层驱动的文件了

如何合并这些底层驱动为一个可调试的elf
1. 下载 Revskills (http://revskills.de/downloads/revskills.zip) http://revskills.software.informer.com/download/
2. 打开 RevSkills, 选择 Extraction -> Images -> Android: MDM9K Radio Reconstruct(Pro)
RevSkills

3. 选择你感兴趣的 b00 (比如modem.b00)

4. 提取过程中,如果遇到空缺的文件,会报告错误。你可以创建一个大小为0的空文件,文件名就为那个丢失的文件。然后重试。

最后你将得到一个类似于 modem.elf的文件,可以放入IDA Pro中分析。

PS. If you wish to reinsert a hacked version of a driver then you need to extract the executable sections you modified from the (previously merged) ELF file and save them into a drivername.bXX file, replacing the XX by the two digit executable section index inside the ELF file (NULL sections count!).

The best way to do this is to use the linux readelf binary to parse the ELF header, find the file offsets and section index of the section you wish to extract, and then use the dd binary to cut the section out of the ELF file.

另外,在gsmhosting论坛上看到有人修改了modem.elf,但是有校验和,不通过

http://forum.gsmhosting.com/vbb/f83/android-mdm9k-radio-patching-trouble-1764110/

其中提到一个mkELF.py 也可用于将 modem.bxx 合并成 modem.elf , 这样就不需要RevSkills了

发表评论

电子邮件地址不会被公开。 必填项已用*标注