C语言 解压华为固件的实例代码

 更新时间:2020年4月25日 17:45  点击:1775

复制代码 代码如下:

/*#####################################################################
#
#   文件          : unpack_update.c
#   作者          : Michellgaby(vincent.18023962826@gmail.com)
#   说明          : 解压缩华为的'UPDATA.APP'官方系统包.
#
#   创建时间      : 2013年1月22号 -Michellgaby
#
#####################################################################*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXLEN 10240

void usage();
int main(int argc,char *argv[])
{
    int count,packetLength,dataLength,olddataLength,datasum,line,remainder,*Length;
    char *FILENAME,*OUTNAME;
    char int2char[10];
    unsigned char buffer[MAXLEN];
    FILE *INFILE,*OUTFILE;

    //获取输入的参数
    if(argc == 1)
        FILENAME="UPDATE.APP";
    else
        FILENAME=argv[1];

    //用二进制打开输入文件
    if((INFILE = fopen(FILENAME, "rb")) == NULL) usage();

    //创建文件夹并进入目录
    mkdir("output");
    chdir("output");

    //跳过92空字节
    fseek(INFILE, 92, 0);

    for(count=1;INFILE != NULL;count++)
    {
        //判断是否为华为固件索引头
        fread(buffer, 4, 1, INFILE);
        if(buffer[0] != 0x55) break;
        if(buffer[1] != 0XAA) break;
        if(buffer[2] != 0x5A) break;
        if(buffer[3] != 0xA5) break;

        //获取头文件长度
        fread(buffer, 4, 1, INFILE);
        Length = (int *)buffer;
        packetLength=*Length;

        //跳过16字节
        fseek(INFILE, 16, 1);

        //获取内容长度
        fread(buffer, 4, 1, INFILE);
        Length = (int *) buffer;
        dataLength=*Length;

        //把整数和字符串连接并复制给文件名
        itoa(count, int2char, 10);
        OUTNAME=strcat(int2char, ".img");

        //跳到头文件末尾
        fseek(INFILE, packetLength-28, 1);

        //创建文件
        if((OUTFILE = fopen(OUTNAME, "wb")) == NULL)
        {
            printf("Unrecognised file format. Wrong identifier.\n");
            return -1;
        } else printf("Extracted output/%s\n",OUTNAME);

        //把内容数据分成多个部分
        datasum=dataLength/MAXLEN;

        for(line=0;line <= datasum;line++)
        {
            //获取内容数据
            if(datasum == line)
                fread(buffer, dataLength % MAXLEN, 1, INFILE);
            else
            fread(buffer, MAXLEN, 1, INFILE);

            //输出文件
            if(datasum == line)
                fwrite(buffer, dataLength % MAXLEN, 1, OUTFILE);
            else
            fwrite(buffer, MAXLEN, 1, OUTFILE);
        }

        //关闭输出文件
        fclose(OUTFILE);

        //指针取整,4的倍数
        remainder = 4 - (ftell(INFILE) % 4);
        if (remainder < 4)
        {
            //进行填充剩余的字节
            fseek(INFILE, remainder, 1);
        }
    }
    //关闭输入文件
    fclose(INFILE);
    return 0;
}

void usage()
{
    //帮助函数
    printf("uasge: unpack_update.exe [UPDATE.APP|UPDATA.APP]\n");
    exit(0);
}

[!--infotagslink--]

相关文章

  • Go语言压缩和解压缩tar.gz文件的方法

    这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
  • 华为手机怎么开启双时钟? 华为添加双时钟的技巧

    华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
  • 华为畅享20Pro配置怎么样?华为畅享20Pro参数配置分析

    华为畅享20Pro配置怎么样?对于即将上市的华为畅享20 Pro手机,很多的网友们也是相当关注的,大家都想要知道这款华为畅享20 Pro手机的配置到底怎么样,赶紧看看吧...2020-06-29
  • 余承东:华为不会一夜之间搞10万家线下店

    70分57秒,华为Mate9系列发布上,余承东一直都是抑制不住的笑着,直到Mate9保时捷版本8999元的公布。余承东说在国内4000元档国产手机中,华为是卖得最好,也是首先能够突破4000元的。这次华为甚至突破了苹果的价格,飙至9000元。...2016-11-22
  • Linux下常用压缩格式的压缩与解压方法详解

    这篇文章主要介绍了Linux下常用压缩格式的压缩与解压方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • 华为将携HiLink智能家居生态成果重磅亮相2017AWE

    3月9日-11日,以“智慧生活尽在AWE”为主题的2017年中国家电及消费电子博览会(AWE)将在上海新国际博览中心(SNIEC) 举行。届时,华为将携HiLink智能家居生态成果亮相。华为消费者业务首席战略官邵洋还将在AWE开幕式上发表主题演讲,并与方太集团、海尔集团、京东集团、博西家电四家企业的相关负责人共同出席“中国家电发展高峰论坛”,就如何打造“智慧生活”以及“人工智能在智能家居中的应用”进行探讨交流。...2017-07-06
  • 华为开始通过亚马逊在美国销售MediaPad平板电脑

    凤凰科技讯 北京时间11月17日消息,据外媒报道,华为周三宣布,将开始通过亚马逊在美国销售其MediaPad平板电脑。...2016-11-22
  • 详解C#压缩、解压文件夹/文件(带密码)

    这篇文章主要给大家介绍了关于C#压缩、解压文件夹/文件(带密码)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-04
  • 利用R语言解压与压缩.tar.gz.zip等格式文件

    这篇文章主要为大家介绍了利用R语言怎样解压与压缩.tar.gz.zip等各种压缩格式文件实现过程方法,有需要的朋友可以借鉴参考下希望能够有所帮助...2021-11-25
  • 华为Mate9怎么设置个人隐私空间 华为Mate9隐私空间用法介绍

    好友来借机?短信、视频、文件担心被泄露,不借?面子事儿大,借?别担心,设置属于您自己的隐私空间,在隐私空间存放的数据只对自己开放,即使手机丢失,别人也无法获取。那么华为Mate...2016-12-15
  • 华为与苹果互换专利说明了什么

    你相信华为开始向苹果收取专利许可使用费吗?前不久,深圳市召开2016年知识产权工作会议,会议发布了“深圳市2015年度知识产权十大事件”,其中,华为苹果相互专利许可一事被列入其中。...2016-07-04
  • 三星发力5G,欲追诺基亚华为杀入全球前三

    北京时间6月21日下午消息,三星高管表示,通过迅速开拓美国等市场,三星希望成为全球排名前三的5G技术厂商。此前,由于在无线技术标准方面的押注失误,三星在电信设备市场落后于竞争对手。...2016-07-04
  • 比高通、OPPO快1倍:华为如何引领智能手机充电速度

    从充电速度来看,荣耀 Magic 无疑是目前充电最快的手机,并且比同类产品速度快了近乎 1 倍。荣耀 Magic 仅仅只是华为石墨烯锂电池技术的首秀。...2016-12-31
  • 华为mate40手机AI字幕功能如何使用?华为手机AI字幕功能使用教程

    华为mate40手机上网功能有许多,在本文中介绍的则是它的ai字幕功能的使用,它的操作方法十分的简单,有兴趣的朋友可以参考本文...2020-12-08
  • c# 文件压缩zip或将zip文件解压的方法

    下面小编就为大家分享一篇c# 文件压缩zip或将zip文件解压的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • 华为如何做到永不卡顿?一分钟视频看懂华为EMUI 5.0

    华为的EMUI 5.0不但是国内第一个基于安卓7.0的新系统,界面、功能彻底重新设计,还独创了Machine Learning智能感知学习系统,从底层全面优化原生安卓,解决安卓越用越卡顿的问题,号称18个月连续使用也不会卡顿,那么是怎么做到的,下面我们来看看吧...2016-12-15
  • C#压缩或解压rar、zip文件方法实例

    这篇文章主要给大家介绍了关于C#压缩或解压rar、zip文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10
  • 华为插线板开卖!149元支持独家快充

    今天,华为正式上架了自家的插线板产品,在华为商城以及天猫华为旗舰店均可购买,售价为 149 元。...2016-09-28
  • 华为U8950D怎么解锁

    有朋友问我华为U8950D怎么解锁呢,下面我以图文的形式给大家详细介绍U8950D解锁的 教程有需要学习的机友可进入参考。 1、我们通过官网进入解锁网站,然后同意再点&...2016-09-20
  • C# 解压gizp文件(.tgz)的实例

    下面小编就为大家分享一篇C# 解压gizp文件(.tgz)的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25