zdyz181 发表于 2023-1-27 09:17

电信光猫,四川X邑固件的一点分析结果。

本帖最后由 zdyz181 于 2023-1-27 09:27 编辑

机缘巧合,拿到了四川X邑光猫的一个新版固件。
CPU是博通方案的。具体型号这里不做阐述了。
但肯定不是BCM68580:lol,目前网络上出现的BCM68580源码也只有威虎太岁大神发布过。
然而我级别太低,无法和威虎太岁大神对话。。。
flash为TSOP 48 nand。
经过简单的分析。现将一些分析结果部分贴出。
欢迎诸位大佬批评指正。
0——127分析:第一行:54494D47473431314243393601000000本行定义了是什么固件,应该是包含了设备型号等。TIMGG411BC96



第二行:4567定义了固件头大小。



第二行:8   9   A   B,固件中是013C0014,转换成10进制20,709,396。



选中128定位到20709396,正好到了下一个UBI的开头。说明第一个UBI+的选择范围是128-20709523


那么第一个UBI的选择范围是:128——20709503,通过CRC32的校验(这里不在复述CRC32的校验规则),得知选择范围正确。

至此,第一个ubi文件顺利提取。

第三行0——3是有意思的计算:例子中是013C0094,刚好比第二行89AB大了一个固件头。十六进制是80的大小。



第三行4567,直接定义了第二个UBI+的大小。定位方法:1.先定位到13C0094(这里是第二个UBI的开头)再从当前位置,往下定位01440014。正好到了squashfs的开头。
再次校验CRC32。依然正确。



至此,第二个ubi文件顺利提取。

下面开始提取squashfs


第三行:12   13   14   15,定义了从0——第一个squashfs的大小。



028000A8=41,943,208,从0定位到41,943,208,正好是squashfs的开始。



第四行:0——3定义了第一个squashfs的大小。例子固件是4BF000,转换十进制是:4976640。定位到028000A8,再定位4BF000,正好到第二个sqshfs的开始。



第四行的89AB标注了第二个squashfs的开始。



例子固件是02CBF0A8。定位到02CBF0A8正好是第二个squashfs的开始。



第四行的CDEF定义了第二个squashfs的大小。
例子固件的大小是007FCF17,转换十进制是8,376,087,
先定位到02CBF0A8然后选择当前位置,往后7FCF16,正好到固件结尾,
因为需要减去1。


最后还有固件头的CRC32校验。这里不做复述。
至此,整个固件的结构清晰的展现在我们眼前。
按照常规的方法,我们需要解开UBI文件,或者squashfs文件。添加好内容。再封回去,校验好文件大小和CRC32。就可以WEB刷机了。
但是问题来了:
1.按照目前我的水平,无论如何也解不开这个UBI。。。。
即使算对了PEB,页大小也不行。
这一步即是难点也是重点,因为他是rootfs,
这一步走不通,下面无从谈起。

2.squashfs解包比较简单。binwalk -e 就可以了。封回去也比较简单。用的XZ压缩。

3.经过后期用beyond4把UBI和rootfs分区对比。发现虽然有很多重合的地方。但是内容和大小也是大相径庭。。。

总之,走到这里我已经黔驴技穷
如有熟悉博通的大佬或者博通的开发者看到,麻烦指点迷津。
页: [1]
查看完整版本: 电信光猫,四川X邑固件的一点分析结果。