首页
论坛
课程
招聘
[原创]华为光猫固件结构逆向分析(二)
2016-10-27 17:22 14676

[原创]华为光猫固件结构逆向分析(二)

bxc 活跃值
6
2016-10-27 17:22
14676
之前的文章实现了对华为光猫固件的基本解包打包操作,但是导出的rootfs无法直接解包(ps:7-Zip可以解包,但无法打包),其原因就是SquashFS镜像格式之前还有2层封装。
这篇文章就解析下固件项目数据的2层封装的结构(ps:不是所有项目的数据都有这2层封装,一般需要刷入flash的项目数据才有这些封装)。
先上图看看导出的rootfs的数据结构:

可以看出,在SquashFS镜像格式的魔法字"hsqs"之前还有148字节的数据。
文件头的"whwh"应该也是某种结构的魔法字,于是又分析了下vunpack那个工具,果然找到了相关的部分,这里就不多说了,直接贴结果:

enum _WHHDR_ItemType : uint32_t
{
	whType_Kernel = 1U,
	whType_RootFS,
	whType_System,
	whType_MiniSYS
};
typedef struct _WHWH_Header
{
	//魔法字
	uint32_t									u32Magic;
	char											chItemVersion[64];
	__time32_t								u32Time;
	_WHHDR_ItemType						enumType;
	uint32_t									u32RearSize;
	uint32_t									u32RearCRC;
} WHWH_HEADER, *PWHWH_HEADER;


至此,已经解析了84字节的数据结构,还剩下64字节的数据结构未解析。

观察了下所有带有whwh魔法字的导出项目,发现这64字节的数据也是始终以27 05 19 56开头的。
初步断定这是另一种结构的魔法字,于是gg搜索了下0x56190527(其实之前没想到搜索魔法字,而是在解包的文件里搜索,最后定位到uboot,发现uboot有对这个结构的详细操作,于是逆向之,后面基本逆向出来90%左右的结构,结果发现网上就TM有现成的),发现这个魔数是uboot的uImage的头结构里的成员。
最后在uboot的源码里的include/image.h找到该结构的详细定义:
#define IH_MAGIC	0x27051956	/* Image Magic Number		*/
#define IH_NMLEN		32	/* Image Name Length		*/

/*
 * Legacy format image header,
 * all data in network byte order (aka natural aka bigendian).
 */
typedef struct image_header {
	uint32_t	ih_magic;	/* Image Header Magic Number	*/
	uint32_t	ih_hcrc;	/* Image Header CRC Checksum	*/
	uint32_t	ih_time;	/* Image Creation Timestamp	*/
	uint32_t	ih_size;	/* Image Data Size		*/
	uint32_t	ih_load;	/* Data	 Load  Address		*/
	uint32_t	ih_ep;		/* Entry Point Address		*/
	uint32_t	ih_dcrc;	/* Image Data CRC Checksum	*/
	uint8_t		ih_os;		/* Operating System		*/
	uint8_t		ih_arch;	/* CPU architecture		*/
	uint8_t		ih_type;	/* Image Type			*/
	uint8_t		ih_comp;	/* Compression Type		*/
	uint8_t		ih_name[IH_NMLEN];	/* Image Name		*/
} image_header_t;




image_header_t的大小正好是64字节,这样148字节数据结构全部解析完毕。
HWNP_GUI的源码过段时间会更新这次的分析结果,关注github获知最新信息。

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班火热招生!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 245
活跃值: 活跃值 (11)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
xdxdxdxd 活跃值 3 2016-10-28 12:19
2
0
学习,这个厉害啊
雪    币: 2367
活跃值: 活跃值 (91)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
petersonhz 活跃值 2016-11-2 15:07
3
0
楼主把固件放上来,我也看下啊
雪    币: 4
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fnto 活跃值 2017-6-7 23:30
4
0
1、固件中项目的顺序有严格规定吗?比如kernel可以放到rootfs之后,甚至最后吗?
2、hwfw_gui  1.0.5具备将mtd镜像(删掉空白)重构固件功能没?
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_王阳 活跃值 2017-8-14 19:36
5
0
楼主厉害,对华为光猫固件逆向这么深,国内论坛第一人。
雪    币: 8729
活跃值: 活跃值 (848)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
bxc 活跃值 6 2017-8-14 20:55
6
0
fnto 1、固件中项目的顺序有严格规定吗?比如kernel可以放到rootfs之后,甚至最后吗? 2、hwfw_gui 1.0.5具备将mtd镜像(删掉空白)重构固件功能没?
1:可以,好像顺序没有影响
2:可以实现,目前没精力弄
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_我本人 活跃值 2017-12-6 10:55
7
0
楼主知道怎么封装固件吗?
雪    币: 0
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hdbyx 活跃值 2019-10-19 20:13
8
0
这个头部数据是指哪一段哦。具体是哪一部分数据的CRC哦
游客
登录 | 注册 方可回帖
返回