论坛首页 逆向工程技术区 阅读主题

[原创]TD路由器固件分析

57 浏览 10 回复
#1 楼主 2026-06-01 21:09:04
版本 : AX3000_Pro_V16.03.49.26源码 : openwrt首先使用binwalk -E分析固件的熵,虽然已经解密了,但是固件的格式binwalk无法有效的识别。 但是使用file命令,可以识别出u-boot和Linux的内核信息。使用binwalk -Me US_AX3000.Pro_V16.03.49.26_cn_JAX01.bin 解压固件后,得到Linux的内核文件。IDA ARM64位的方式打开128固件,虽然可以搜索到大量的squashf函数字符串,但是都无法查看调用地址和引用地址。 这时就可以使用openwrt的源码来编译生成带符号链接的内核文件,然后生成签名文件,导入到IDA进行函数重命名。首先收集内核配置信息,发现固件是基于f86f8e568461681fc85caf3c972489045367030e版本生成的。下载openwrt源码安装编译环境下载安装软件包生成.config配置文件,然后进入配置选项。 在Global build settings中,选择Binary stripping method为none来保留符号编译。 保存退出后运行make来编译固件。将vmlinux.debug导出到Windows系统,使用IDA打开生成vmlinux.sig签名文件,即可还原函数名称。 跳转到固件地址0x380040,原来的squashfs的SQUASHFS_MAGIC由hsqs更变为了nice,xz的lzma_header_magic由ý7zXZ更变为了Tenda。 squashfs的SQUASHFS_MAGIC判断是在mtd_check_rootfs_magic函数中,但是因为源码经过了修改,找不到mtd_check_rootfs_magic函数,可以通过mtd_check_oob_ops的引用找到sub_3AC088。 xz的lzma_header_magic是在xz_dec_run中判断的,源码经过了修改,可以通过xz_dec_reset的引用找到,是sub_2B0DC0函数。 进入crc32_le_0_0,发现crc32_table的值发生了改变。 xz-5.2.5的源码目录是./build_dir/host/xz-5.2.5coder.cstream_flags_common.ccrc32_table_le.hsquashfs-tools的源码路径是./build_dir/host/squashfskit-v4.14/squashfs-tools修改squashfs-tools的Makefile,将XZ_SUPPORT = 1,引入liblzma.a的静态库路径。修改squashfs_fs.h头文件的SQUASHFS_MAGIC为0x6563696E。首先编译xz-5.2.5的静态库文件。然后编译生成unsquashfs程序。使用dd命令从0x380040开始导出固件文件US_AX3000.squashfs,然后就可以使用编译好的unsquashfs程序进行解压了。binwalk US_AX3000.Pro_V16.03.49.26_cn_JAX01.bin

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289107.htm
#2 2026-06-01 21:09:04
感谢分享
#3 2026-06-01 21:09:04
感谢分享
#4 2026-06-01 21:09:04
感谢分享
#5 2026-06-01 21:09:04
看不明白
#6 2026-06-01 21:09:04
感谢分享
#7 2026-06-01 21:09:04
感谢分享
#8 2026-06-01 21:09:04
感谢分享
#9 2026-06-01 21:09:04
good
#10 2026-06-01 21:09:04
感谢分享
#11 2026-06-01 21:09:04
感谢分享

请登录后参与讨论

立即登录 注册账号