我正在尝试反汇编 qualcomm QDSP6 调制解调器文件。根据 ELF 头,应该有 26 个部分(modem.b00-b25)。但是在转储设备后,b.16、b.17、b.25 丢失了,导致无法使用 IDA 打开文件。
该设备是阿尔卡特 4060-A。我可以通过 USB 下载模式完全访问手机的 emmc,还尝试通过 ADB 转储相同的调制解调器分区。同样的结果,分区缺少这 3 个部分。即使在十六进制编辑器中读取原始解压文件,也没有提到这 3 个精灵部分
有什么建议?
我正在尝试反汇编 qualcomm QDSP6 调制解调器文件。根据 ELF 头,应该有 26 个部分(modem.b00-b25)。但是在转储设备后,b.16、b.17、b.25 丢失了,导致无法使用 IDA 打开文件。
该设备是阿尔卡特 4060-A。我可以通过 USB 下载模式完全访问手机的 emmc,还尝试通过 ADB 转储相同的调制解调器分区。同样的结果,分区缺少这 3 个部分。即使在十六进制编辑器中读取原始解压文件,也没有提到这 3 个精灵部分
有什么建议?
您应该使用readelf -a modem.b00. 它将显示哪些部分FileSiz的字节数为零。缺少的大概就是这些了。
然后您可以ELF通过modem.bNN在正确的偏移量处加载每个部分来组合原始文件,如输出中的Offset字段所示readelf -a。
不知道你用的是哪个rom,我是从xdadev下载的
使用unzip. 然后modem.img使用7z以下命令提取文件:
7z -omodem x modem.img
然后modem/image是modem.bNN文件。其中:b04、b17、b18 和 b25 缺失。在查看时readelf -a modem.b00,我可以看到那些正是带有FileSiz == 0.
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
NULL 00000000 00000000 00000000 00000374 00000000 00000000 -- b00 ELF header
NULL 00001000 8d500000 8d500000 00001c68 00002000 00001000 -- b01 hashes, signature, certs
INTERP 01c47280 c1cbe280 89cbe280 00000001 00000001 R 00000001 -- b02
LOAD 00003000 c0000000 88000000 00001540 00001540 R E 00001000 -- b03
LOAD 00005000 c0004000 88004000 00000000 00001000 RW 00001000 --
LOAD 00005000 c0008000 88008000 0002c160 0002c160 RW 00001000 -- b05
LOAD 00032000 c0038000 88038000 0005e340 0005e340 RW 00001000 -- b06
LOAD 00091000 c00c0000 880c0000 00200000 00200000 R E 00001000 -- b07
LOAD 00291000 c02c0000 882c0000 00280000 00280000 R E 00001000 -- b08
LOAD 00511000 c0540000 88540000 00033a2c 00033a2c RWE 00001000 -- b09
LOAD 00545000 c0574000 88574000 000b0a2c 000b0a2c R E 00001000 -- b10
LOAD 005f6000 c0630000 88630000 000f78b4 000f78b4 R E 00001000 -- b11
LOAD 006ee000 c0728000 88728000 00df81d0 00df81d0 R E 00001000 -- b12
LOAD 014e7000 c1540000 89540000 00062fe0 00062fe0 RW 00001000 -- b13
LOAD 0154a000 c15c0000 895c0000 004fbb93 004fbb93 R 00001000 -- b14
LOAD 01a46000 c1abd000 89abd000 00208a83 00208a83 RW 00001000 -- b15
DYNAMIC 01c47284 c1cbe284 89cbe284 00000078 00000078 RW 00000004 -- b16
LOAD 01c4f000 c1cc6000 89cc6000 00000000 000ddc64 RW 00001000 --
LOAD 01c50000 c1da4000 89da4000 00000000 010b9000 RW 00001000 --
LOAD 01c4f000 c2e5d000 8ae5d000 00013e00 00013e00 RW 00001000 -- b19
LOAD 01c63000 c2e71000 8ae71000 00079648 00079648 R 00001000 -- b20 .. zlib
LOAD 01cdd000 c2eeb000 8aeeb000 00947000 00947000 R 00001000 -- b21 .. q6zip
LOAD 02625000 c3833000 8b833000 00013000 00013000 RW 00001000 -- b22 .. delta
LOAD 02639000 c3847000 8b847000 0008e000 0008e000 RWE 00001000 -- b23
LOAD 026c8000 c38d6000 8b8d6000 0006ecb4 0006ecb4 RW 00001000 -- b24
LOAD 02737000 c3945000 8b945000 00000000 01bbb000 RW 00001000 --
其他注意事项:
我很快会在我的 github 帐户上发布 delta 和 q6zip 部分的解压工具。
可在此处找到 qualcomm 六边形文档,需要免费注册。Hexagon V62 程序员参考手册中描述了指令集。
对于解压缩 RO 或 RW 部分,我建议使用源中的实用程序。q6zip_ro_uncompress.py 或 rw_decompress_file.py
解包的通用方法 - 不存在,即使在一个芯片组上,算法,如添加 q6zip,或 RO 字典大小可以改变。所以,最好有相同版本的来源。
我无法给出更准确的答案,因为当我正在解压缩少数 RO 部分时,RW - 解压缩时出现错误。
unpack 在 Linux 上更好。和源需要重新编译。
我还建议尝试将设备切换到下载模式,然后转储内存。虽然我不确定是否会有所有未打包的块,但值得一试。
我现在用 MDM9230、TCL(alcatel) Y900NB 也有类似的问题,我什至不知道使用的是什么版本的 dlpager((而且我也无法解压它。(我没有硬件,我只是使用 SW) )
原则上,以上所有只是泛滥,我只想问问威廉·亨格维尔德,也许他会说更多,但需要代表 50 发表评论,所以需要回答))