首页
社区
课程
招聘
[原创]中兴ZTE ZX279128S芯片固件解密
2023-4-23 23:10 22964

[原创]中兴ZTE ZX279128S芯片固件解密

2023-4-23 23:10
22964

最近家里的移动宽带到期了,闲置了一台H3-2S的光猫,原本我也有一台MIPS的友华光猫,固件修改后我自己也很满意了。但这台闲置的光猫是ARMv7l的,测试后发现性能更好一些(是MIPS的一倍多)。于是就想着也改改,加一些自启脚本,装frpc、alist、kms、aria2c、clash、甚至还能跑一点自己写的Java程序。

 

通过分析一通之后,我发现这个光猫的rcS相关的自启内容里一点破绽都没有,原本的alipay的dns也注释了,要加自启脚本就必须改rootfs里的rcS。由于系统里没有dd,但有nandump,我给dump出来,使用binwalk分析了一下,果然从kernel里解出了文件系统。整个固件的文件结构大概是这样的:中兴文件结构,占480bytes,然后是uImage头64bytes,然后会执行一段程序,解压gzip。gzip解压出来之后,解压的字节中又有一段程序,然后再解压一个lzma块,这个lzma块解压出来就是rootfs.cpio了。

 

这个cpio是没有任何压缩的。但我用python的cpio库libarchive的时候遇到了不小的挑战,就是cpio解压后什么都不改,再压回去,对比改动发现差异很大,里边有一些数据的大小写都发生了变化,小写全都变成了大写。我想探究里边的原因,耗费了一天时间也没找出来,于是我只好人肉修改cpio的16进制内容,找到rcS部分,把alipay.sh的注释打开,然后改一小段。

 

剩下的就是还原回去并刷进去的工作了,这个还原工作异常艰难:

 

首先是gzip解压的时候不知道gzip块的长度,不知道什么时候会结束,虽然不影响解压,但肯定影响还原啊。好在gzip解压的时候,异常信息里会提示无法解码的字节,那直接搜索这个字节就能找到结束的附近了。然后观察右侧的块特征,终于找到了结束位,顺带还发现了dtb的开始位置和整个分区的结束位置、还有crc32的偏移量。

 

然后是lzma的结束位,这个就比gzip难多了,因为这个lzma解压的时候没有报任何异常,直接就解压出来了,再尝试压回去会发现大小完全对不上,大了1M多不止。尝试了好几个库和xz\tar等格式,发现也对不上,应该就是lzma的压缩格式。后来我开始怀疑是不是lzma的结束位置不对,可没有任何异常啊,应该不会不对吧。

 

我带着这个怀疑,使用linux中的lzma去检查这个文件块,发现lzma竟然无法识别,而我压缩回去的lzma则能识别,而且完全没问题。我好奇它究竟用的什么lzma算法啊,难道老版本的不支持?于是我开始翻python的lzma库源代码,发现它果然捕获了异常,而且直接把异常吃掉了。真狗!我把那段代码拷贝出来。

1
2
3
4
5
6
7
8
9
10
11
12
data = f.read(buff)
        results = []
        while True:
            decomp = lzma.LZMADecompressor(lzma.FORMAT_AUTO)
            try:
                res = decomp.decompress(data)
            except lzma.LZMAError as e:
                if results:
                    print("LZMAError: %s" % e)
                    break  # Leftover data is not a valid LZMA/XZ stream; ignore it.
                else:
                    raise  # Error on the first iteration; bail out.

lzma则是非常难,因为lzma的那次压缩是在gzip解压之后,又执行了一段,那偏移量完全都不知道怎么对上,载入到IDA里也是一堆未识别的地址。好在它的库函数会有俩个不同的异常,一个是流未结束,一个是字节无法解析。流未结束就是截取少了,字节无法解析就是截取多了,然后写了一个二分查找的方法,找到了lzma解压的位置,位置结束后俩个字节处就是lzma的长度数值。

 

然后我测试了一下,将截取的lzma解压出rootfs.cpio后再原封不动的压缩回去,大小竟然比原来的小了几十字节。这可不行,我又尝试了一下用linux自带的lzma压缩:

1
cat ./rootfs.cpio |lzma -9 > lzma.lzma

果然还原了,和原文件md5值一字不差,看来linux的lzma算法还是和python的lzma有些小差异。

 

至此,整个逆向过程告一段落。IDA可以直接载入uImage的文件去查看gzip的解压逻辑,来验证gzip的结束偏移的地址是否正确。

 

经过一番验证,也找到了双固件切换的的方法,也完成了文件系统提取也压缩回去的程序工具,但改完的固件始终无法启动,查看gzip解压的出来的数据块,发现了大量证书内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
65728         0x100C0         AES Inverse S-Box
70336         0x112C0         SHA256 hash constants, little endian
98393         0x18059         Certificate in DER format (x509 v3), header length: 4, sequence length: 5384
98405         0x18065         Certificate in DER format (x509 v3), header length: 4, sequence length: 5392
98409         0x18069         Certificate in DER format (x509 v3), header length: 4, sequence length: 5396
745165        0xB5ECD         Certificate in DER format (x509 v3), header length: 4, sequence length: 1284
3911129       0x3BADD9        Certificate in DER format (x509 v3), header length: 4, sequence length: 4736
4316777       0x41DE69        Certificate in DER format (x509 v3), header length: 4, sequence length: 1456
5909712       0x5A2CD0        gzip compressed data, maximum compression, from Unix, last modified: 1970-01-01 00:00:00 (null date)
6121672       0x5D68C8        DES SP2, little endian
6122440       0x5D6BC8        DES SP1, little endian
6142464       0x5DBA00        CRC32 polynomial table, little endian

感觉要裹足不前了......,目前的水平对arm反汇编的能力严重不足。
所以把成果文件贡献出来,看有没有大神有兴趣挑战,如果成功,我将分享我开发的中兴固件拆包打包工具(现在不分享是因为打包的固件无法启动,有变砖风险)。

 

https://cloud.189.cn/web/share?code=aYVVNzMvA7ze(访问码:6hyx)

 

文件说明:
该文件为吉比特,中兴芯片光猫固件:

  1. uImage.bin为从uboot启动的uImage镜像文件,从该文件中可解出 zImage.bin文件;
  2. zImage.bin文件,可解出kernel.gzip文件和dtb.bin文件;
  3. kernel.gzip文件可解出kernel.bin文件,该文件中可看到大量证书内容和加密相关内容;
  4. kernel.bin文件可解出lzma.lzma文件,该文件为rootfs.cpio压缩包,即linux文件系统;
  5. 由于uboot中禁用了earlyprintk,所以无法通过串口得到任何有用的信息,但是可以通过uboot的tftp功能,将文件传输到内存中,然后通过uboot的bootm命令启动内核,从而实现调试。
  6. uImage.bin和kernel.bin文件可以使用IDA pro载入,能看到程序的大致结构。
  7. 由于启动不了也可能是uboot里有相关验证,所以补充一个mtd1_u-boot.bin,这是该光猫的u-boot分区备份。

2023年5月8日 我已自己挑战成功,实现了通用工具:

  1. 可编辑zImage中嵌入了编译型initramfs.cpio的kernel
  2. 可对cpio中的文件实现增删改,而无需解压和再打包
  3. 可生成中兴uboot启动的固件,无需刷第三方uboot,从而避免变砖风险

结帖啦:我的轩辕悠悠


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2023-5-8 21:50 被XYUU编辑 ,原因:
收藏
点赞8
打赏
分享
最新回复 (75)
雪    币: 2112
活跃值: (5642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2023-4-24 05:42
2
1

中兴和华为的光猫都自带基于lxc容器技术的OpenWRT子系统,能在里面折腾的就不要在宿主机上折腾,这个容器的权限和宿主系统同级没必要折腾宿主系统,进入openwrt是这个命令 `saf console` 华为的是`saf-huawei console`进入密码自己逆向 (镜像路径/opt/upt/framework/saf/rootfs 原则上最好不要修改这个路径里的文件但可以修改这个路径的文件/opt/upt/apps/apps 这个路径的文件会被bind挂载覆盖rootfs里的文件)进入这个openwrt系统后可以安装ipk的包。

最后于 2023-4-25 06:54 被微启宇编辑 ,原因:
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-24 09:13
3
0
微启宇 中兴的光猫自带基于lxc容器技术的OpenWRT子系统你可以在里面折腾这个容器的权限和宿主系统同级没必要折腾宿主系统,进入openwrt是这个命令 `saf console` 进入密 ...

感谢分享,我的这个光猫实际上,只是用了中兴的芯片,里边的系统是被阉割过了的,所以是没有saf命令了,同时/opt/upt/framework/目录下都是空的,/opt/upt/apps/下也都是空的,折腾也是不得已。

最后于 2023-4-24 09:14 被XYUU编辑 ,原因:
雪    币: 19270
活跃值: (28895)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-4-24 09:17
4
1
感谢分享
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-24 14:28
5
0
如果有人能找到该固件通过使用数据库配置能启动busybox的crond服务的话,那也是极好的,至少能实现不少事情了,运营商的这种芯片的光猫市占率极高。
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-24 22:27
6
0

说一个另外的思路,从已有固件中获得内核版本,然后将cpio的文件系统放入内核源码,编译为zImage,然后和dtb一起制作成uImage,uImage就是系统uboot可引导的固件类型,这样也许就要替换uboot了。


我自己根据原版固件的版本通过源码编译的kernel制作成的zImage和uImage已经放在分享的云盘里了,这个zImage和uImage的rootfs里的/etc/init.d/rcS里的末尾加了一个自启的shell入口,即:/userconfig/init.sh,另外还加入了crond的服务器启动,配置路径也在/userconfig/crond。

文件系统是基于原版固件的最新版本制作的,仅加了如下内容:

if [ -x /userconfig/init.sh ]
then
/userconfig/init.sh
fi
crond -c /userconfig/crond

编译后的数据放在了complie目录了。

最后于 2023-4-29 09:58 被XYUU编辑 ,原因:
雪    币: 2112
活跃值: (5642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2023-4-25 06:57
7
0
XYUU 微启宇 中兴的光猫自带基于lxc容器技术的OpenWRT子系统你可以在里面折腾这个容器的权限和宿主系统同级没必要折腾宿主系统,进入openwrt是 ...

用usb转串口接到光猫然后用串口工具看看uboot启动时的日志,看看uboot是否正常载入内核和报啥错误。

最后于 2023-4-25 07:14 被微启宇编辑 ,原因:
雪    币: 2112
活跃值: (5642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2023-4-25 07:03
8
0

这有官方的固件,建议折腾官方可升级的固件而不是自己dump下来的, 自己dump下来然后在刷入会有无法启动的风险(我以前就这样玩废好几台光猫)。 [固件] 中国移动H3-2s全国省份固件,支持网页升级 https://www.chinadsl.net/forum.php?mod=viewthread&tid=170670&highlight=H3-2S


玩嵌入式设备没有usb转串口线是没法看日志排查错误的,最好也要NAND flash的烧录器,一旦出现变砖问题可以用热风抢拆盘写数据。

最后于 2023-4-25 07:18 被微启宇编辑 ,原因:
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-25 09:19
9
0
微启宇 这有官方的固件,建议折腾官方可升级的固件而不是自己dump下来的, 自己dump下来然后在刷入会有无法启动的风险(我以前就这样玩废好几台光猫)。 [固件]& ...

我有串口小板的,这个帖子的固件我下过,没花猫币就找到了,而且我还测试过,他的固件只是比我的版本早些而已,大概是2021年6月20日的。

说一下最终结论吧,实际上到这里,固件的解密工作已经完成得差不多了。有dtb和rootfs了,然后放到相应得kernel源码里编译一份zImage就完成了。


所有的校验工作都是在uboot里,我把uboot载入到IDA里看了一下,uboot有Hash和RSA校验
ROM:00006E0B        0000000E        C        HASH timeout\n
ROM:00006E19        0000000D        C        RSA timeout\n
ROM:00006E26        0000000D        C        AES timeout\n
同时会根据固件头的Magic Number去找uImage的入口

ROM:00023974                 DCB 0x99,0x99,0x99,0x99,"DDDDUUUU",0xAA,0xAA,0xAA,0xAA

ROM:00024134                 DCB 0x99,0x99,0x99,0x99,"DDDDUUUU",0xAA,0xAA,0xAA,0xAA

ROM:00024B18                 DCB 0x99,0x99,0x99,0x99,"DDDDUUUU",0xAA,0xAA,0xAA,0xAA

与这个uboot相匹配的CPU还有
ROM:0005446F        00000014        C        CPU  : ZX279128@A9,
ROM:00054483        00000015        C        CPU  : ZX279128S@A9,
ROM:00054498        00000015        C        CPU  : ZX279127S@A9,
验证通过后会跳到
ROM:00006E84        0000000C        C        verify OK!\n
如果出现问题则会
ROM:00006EA3        00000016        C         code hash error !! \n
否则,则会
ROM:00006EB9        00000012        C        code hash ok !! \n
uboot的版本信息
ROM:0005122B        00000030        C        U-Boot 2013.04-svn1633 (Oct 19 2021 - 10:18:42)
启动参数
ROM:00051296        00000082        C        bootcmd=setenv bootargs mem=512M console=$(console) ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs init=/linuxrc ro;bootm 0x42000100
ttl波特率
ROM:00051324        00000010        C        baudrate=115200
串口参数
ROM:0005140D        00000019        C        console=ttyAMA0,115200n8
载入地址
ROM:000513B5        00000014        C        loadaddr=0x44000000
相关的文件名:
ROM:00051426        00000013        C        bootfile=uboot.bin
ROM:00051439        0000001E        C        bootloaderfile=bootloader.bin
ROM:00051457        00000016        C        linuzfile=vmlinuz.bin
ROM:0005146D        00000015        C        fullfile=upgrade.bin
配置文件:
ROM:0005148D        0000001E        C        configfile=zxic_pubconfig.bcb
接下来会校验zImage的magic number:
ROM:0005489D        0000001D        C        Bad Linux ARM zImage magic!\n
内置了gzip解压算法
ROM:00054B04        00000051        C        GUNZIP: uncompress, out-of-mem or overwrite error - must RESET board to recover\n
也内置了lzma解压算法
ROM:00054B55        00000046        C        LZMA: uncompress or overwrite error %d - must RESET board to recover\n
其他压缩格式会提示
ROM:00054B9B        00000023        C        Unimplemented compression type %d\n
验证uImage的magic number
ROM:00054BF7        00000012        C        Bad Magic Number\n
uImage头部crc32验证
ROM:00054C09        00000015        C        Bad Header Checksum\n
uImage数据crc32验证
ROM:00054C39        0000000E        C        Bad Data CRC\n
后面就是从tftp载入镜像的内容,也会校验上述逻辑
支持的芯片代号:
ROM:0005C1FC        0000001A        C        Board: ZXIC zx279127sevb\n
ROM:0005C216        0000001A        C        Board: ZXIC zx279128sevb\n
ROM:0005C230        00000019        C        Board: zxic zx279128evb\n
ROM:0005C249        00000019        C        Board: zxic zx279127evb\n
支持的8脚闪存颗粒:
ROM:00059D2A        0000001F        C        SPI NAND FM25G02B  256MiB 3,3V
ROM:00059D49        0000001F        C        SPI NAND PN26G01A 128MiB 3,3V 
ROM:00059D68        00000024        C        SPI NAND GD5F1GQ4UAYIG 128MiB 3,3V 
ROM:00059D8C        00000023        C        SPI NAND F50L1G41A (2Y)128MiB 3,3V
ROM:00059DAF        00000023        C        SPI NAND MX35LF1GE4AB  128MiB 3,3V
ROM:00059DD2        00000023        C        SPI NAND MX35LF2GE4AD  256MiB 3,3V
ROM:00059DF5        00000024        C        SPI NAND GD5F1GQ4UBYIG  128MiB 3,3V
ROM:00059E19        00000026        C        SPI NAND TC58CVG1S3HXAIX  256MiB 3,3V
ROM:00059E3F        00000023        C        SPI NAND BWM73D044SNF  256MiB 3,3V
ROM:00059E62        0000001E        C        SPI NAND BWJX08U  256MiB 3,3V
ROM:00059E80        0000001E        C        SPI NAND BWET08U  256MiB 3,3V
ROM:00059E9E        00000023        C        SPI NAND HYF2GQ4UHCCAE 256Mib 3,3V
ROM:00059EC1        00000023        C        SPI NAND HYF2GQ4UAACAE 256Mib 3,3V
ROM:00059EE4        00000023        C        SPI NAND XT26G02AWSEGA 256Mib 3,3V
ROM:00059F07        0000001F        C        SPI NAND W25M02GV  256MiB 3,3V
ROM:00059F26        00000020        C        SPI NAND AFY2G08U0A 256MiB 3,3V
ROM:00059F46        00000026        C        SPI NAND MT29F2G01ABAGDSF 256MiB 3,3V
ROM:00059F6C        00000021        C        SPI NAND ZD35X2GAXXX 256MiB 3,3V
ROM:00059F8D        00000020        C        SPI NAND F50L2G41LB 256MiB 3,3V
ROM:00059FAD        0000001E        C        SPI NAND FM25S02A 256MiB 3,3V
以及一些48脚闪存颗粒
ROM:0005B0AA        00000011        C        Hynix H27U1G8F2B
ROM:0005B0BB        00000010        C        MX30LF1G08AA-TI
ROM:0005B0CB        00000013        C        MT29F1G08ABAEAWP:E
ROM:0005B0DE        00000010        C        esmt F59l1G81MA
ROM:0005B0EE        00000015        C        WINBOND W29N01GVSIAA
ROM:0005B103        00000014        C        Hynix HY27U1G6F2C1R
ROM:0005B117        00000012        C        ST NAND256W3A2BN6
ROM:0005B129        00000013        C        Hynix HY27UF082G2B
ROM:0005B13C        00000013        C        Hynix HY27UT084G2M
ROM:0005B14F        00000013        C        Hynix HY27UV08BG5M
ROM:0005B162        00000012        C        Samsung K9F208U0B
ROM:0005B174        00000013        C        Samsung K9K8G08U0D
ROM:0005B187        00000013        C        Hynix H8BCS0SI0MBR
ROM:0005B19A        00000013        C        Samsung K9G8G08U0M
ROM:0005B1AD        00000012        C        XTX-PN27G01ABGITG
ROM:0005B1BF        00000011        C        S34ML02G200TF100
ROM:0005B1D0        0000000D        C        W29N02GVSIAA
ROM:0005B1DD        0000000F        C        F59L2G81A-25TG
ROM:0005B1EC        0000000D        C        MX30LF2G18AC
ROM:0005B1F9        0000000F        C        TC58VG1S3ETA00
ROM:0005B208        00000011        C        MX30LF2G018AC-TI
ROM:0005B219        00000012        C        HY27UF082G2A-TPCB
ROM:0005B22B        0000000D        C        MT29F2G08ABA
ROM:0005B238        00000010        C        H27U2G8F2CTR-BC
ROM:0005B248        0000000C        C        FMND2G08U3D
ROM:0005B254        00000012        C        FS33ND04GS108BFI0
ROM:0005B266        0000000C        C        ZD35X2GAXXX
ROM:0005B272        0000000D        C        MX30LF2G28AD
今天就分析这些,等焊油到了补一下ttl针脚开始调试了。

最后于 2023-4-26 17:37 被XYUU编辑 ,原因:
雪    币: 3160
活跃值: (872)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Jmsrwt 2023-4-25 09:58
10
0
mark
雪    币: 3160
活跃值: (872)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Jmsrwt 2023-4-25 10:03
11
0
建议备份一下出厂时 /GN25L95_datas  bob校准数据  /wlan wifi校准数据。校准丢失会影响光猫性能
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-25 10:56
12
0

我全盘都备份过的,那些地方我不会去动它的。


所以理论思路就是,找到这款芯片的uboot相关的编译参数配置,然后将参数配置放到uboot源码中编译,编译完成后放入仿真环境测试,没问题后刷入uboot。然后就可以愉快的引导uImage的镜像固件(uImage是由rootfs放入内核编译获得zImage然后与dtb合成)。此后的标准固件就都可以用了,对于官方原版固件则可以通过我的解包程序解出uImage,刷入即可使用。


另一种思路则是patch掉官方uboot的校验code hash校验内容,其他crc32的校验内容倒可以还原。

最后于 2023-5-3 10:13 被XYUU编辑 ,原因:
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-25 14:02
13
0

先尝试patch一下uboot放到仿真环境测试一下效果,所以这一步就是找到uboot的基址,目前数据中大部分字符串我已手工恢复。接着就是找一个arm的uboot编译过去,然后IDA打开找找特征。


我又用自己编写的工具解了一个吉比特GM693-R的光猫固件,也是这个芯片的,固件除了最后rootfs.cpio的压缩格式是gzip的之外,解包工具基本可以通用,而且gzip解包找结束偏移的特征也很明显,就是gzip结束后的对齐字节紧跟着就是gzip的块长度值。lzma的特征则是块结束后的对齐字节的值就是结束位置的offset。


也就是rootfs和kernel组合生成zImage的特征基本是同一套编译器生成的。

最后于 2023-4-25 19:47 被XYUU编辑 ,原因:
雪    币: 2112
活跃值: (5642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2023-4-25 20:05
14
0

给你上传一下这芯片的数据手册, 有这份资料的话可以知道针脚分布也可以自行画pcb板。

最后于 2023-4-28 00:16 被微启宇编辑 ,原因:
上传的附件:
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-25 22:10
15
0

ChatGPT回答:


使用IDA pro打开uboot程序的bin文件,设置正确的处理器类型和加载地址,然后使用IDA pro的反汇编功能分析bin文件的结构和代码。
在IDA pro中,找到uboot程序的入口点,通常是.text段的开头,然后跟踪执行流程,找到第一个BL指令,该指令调用了main函数。
在IDA pro中,观察R2寄存器的值,该值就是main函数的地址,然后按g键输入R2的值,就可以跳转到main函数的位置。


我使用该方法没有找到基址。

最后于 2023-4-26 11:18 被XYUU编辑 ,原因:
雪    币: 812
活跃值: (1109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙岱客 2023-4-26 16:02
16
0
你的分析已经超过绝大部分人了
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-26 17:39
17
0
龙岱客 你的分析已经超过绝大部分人了[em_13]
可我目前还是没有搞定,如果厂商能提供uboot编译的配置文件,也就能自己编译uboot了,这块我也没搞到,唉。
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-26 19:13
18
0

按照帖子的方法:
https://bbs.kanxue.com/thread-267719.htm
找了一下uboot的基址,大概是:0x47EE0000

先调出string窗口,找到
ROM:47F34BF7        00000012        C        Bad Magic Number\n
搜字符串4BF7能看到:
ROM:47F0F128        sub_47F0F018                        LDR             R0, =0x47F34BF7
ROM:47F0F22C                dword_47F0F22C  DCD 0x47F34BF7          ; DATA XREF: sub_47F0F018+110↑r

ROM:00054BF7                aBadMagicNumber DCB "Bad Magic Number",0xA,0
然后0x47F34BF7-0x54BF7=0x47EE0000

果然在字符串中发现了,x47ee0000

接着下面有一行0x47f00000,这大概就是入口的地址了,跳过去按C,好激动。

最后于 2023-4-26 20:29 被XYUU编辑 ,原因:
雪    币: 2112
活跃值: (5642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2023-4-26 20:21
19
0
XYUU 可我目前还是没有搞定[em_13],如果厂商能提供uboot编译的配置文件,也就能自己编译uboot了,这块我也没搞到,唉。
给配置编译了也用不了, uboot里有芯片厂商独有的代码但这是不能公开的比如各个模块的初始化。不是芯片厂商给的代码属于公版编译了就算run起来也只是arm核心run而已。
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-26 23:03
20
0
微启宇 给配置编译了也用不了, uboot里有芯片厂商独有的代码但这是不能公开的比如各个模块的初始化。不是芯片厂商给的代码属于公版编译了就算run起来也只是arm核心run而已。
以我对GPL2.0协议的理解,凡是使用了uboot代码的项目就必须开源,否则就违反了协议,所以芯片厂商有不能公开的内容就不能使用uboot源码,而我从二进制代码中发现了大量uboot的常量字符串能证实使用了uboot源码。
雪    币: 2112
活跃值: (5642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2023-4-27 00:10
21
0
XYUU 以我对GPL2.0协议的理解,凡是使用了uboot代码的项目就必须开源,否则就违反了协议,所以芯片厂商有不能公开的内容就不能使用uboot源码,而我从二进制代码中发现了大量uboot的常量字符串能证实 ...
那你可以试试去问光猫设备的生产商要源码。
雪    币: 3899
活跃值: (2883)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
Q老Q 1 2023-4-27 14:23
22
0
博主文中说修改完固件后重启失败,能上传一下启动过程中的完整串口log吗
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-27 16:21
23
0
Q老Q 博主文中说修改完固件后重启失败,能上传一下启动过程中的完整串口log吗
焊油刚到,我处理好了再发出来。
雪    币: 812
活跃值: (1109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙岱客 2023-4-27 17:04
24
0

修改固件起不来应该是uboot对kernel的rsa签名校验过不了,如果只是crc就好弄

最后于 2023-4-27 17:06 被龙岱客编辑 ,原因:
雪    币: 214
活跃值: (294)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XYUU 2023-4-27 20:43
25
0
龙岱客 修改固件起不来应该是uboot对kernel的rsa签名校验过不了,如果只是crc就好弄

应该不是,我看是我处理掉了一个crc32的值,然后我又重新处理了,结果直接ttl显示start kernel...后就死机了,大概率是我动了kernel的内容,估计是我自己把kernel改坏了。我打算自己去编译一个kernel,然后在给里边内置一个lxc的openwrt,我目前的进展是进入到了kernel里去了,我已经感觉到我大概率成功了。


带着这些欣喜,我有尝试过了,昨晚又搞了大半夜,自己编译的内核刷进去后卡在start kernel的位置,而且rootfs编译的和原版固件差了0.4m多的体积,目前的猜测应该是uboot里做了手脚。

最后于 2023-4-29 09:37 被XYUU编辑 ,原因:
游客
登录 | 注册 方可回帖
返回