佐须之男的博客

技术需要沉淀,成长需要痛苦,成功需要坚持,敬仰需要奉献

跟着佐大学Lede/OpenWrt开发入门培训班讲义-21 OpenWrt 固件的结构分析、如何逆向解包

备注:

    此文是佐须之男"跟着佐大学OpenWrt开发"入门培训班教学视频演讲稿提纲,虽是内部资料但再三考虑后对外公布,通过公众的监督来鞭策自己。如对完整内容感兴趣,可以参加"跟着佐大学OpenWrt开发"入门培训班:http://forgotfun.org/2018/04/openwrt-training-2018.html

课程试听地址:

    https://pan.baidu.com/s/13nCmoaXTEfKc9F9-bdtHcA

 

    在上一讲视频中已经提到过,固件是由三部分组成:固件头、kernel、rootfs。我们可以通过mkimage工具分析固件头,用binwalk来解包固件分析kernel和rootfs,通常rootfs一般是squashfs格式的。下面我来一步步给大家剖析,每个部分的细节。


    BroadCom(博通)trx固件头定义

struct trx_header {
    uint32_t magic;            /* "HDR0" */
    uint32_t len;            /* Length of file including header */
    uint32_t crc32;            /* 32-bit CRC from flag_version to end of file */
    uint32_t flag_version;    /* 0:15 flags, 16:31 version */
    uint32_t offsets[4];    /* Offsets of partitions from start of header */
};

    MediaTek(联发科)、QualCom(高通 )u-boot固件头定义

#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;

      

binwalk地址:https://github.com/ForgotFun/binwalk 

Powered By Z-BlogPHP 1.5 Zero

© 2016 佐须之男版权所有 | 联系方式 forgotfun@qq.com | 业务合作 181-1435-4589 (陆工)