C语言 解压华为固件的实例代码
/*#####################################################################
#
# 文件 : 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);
}
相关文章
- 这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
- 华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
华为畅享20Pro配置怎么样?华为畅享20Pro参数配置分析
华为畅享20Pro配置怎么样?对于即将上市的华为畅享20 Pro手机,很多的网友们也是相当关注的,大家都想要知道这款华为畅享20 Pro手机的配置到底怎么样,赶紧看看吧...2020-06-29- 70分57秒,华为Mate9系列发布上,余承东一直都是抑制不住的笑着,直到Mate9保时捷版本8999元的公布。余承东说在国内4000元档国产手机中,华为是卖得最好,也是首先能够突破4000元的。这次华为甚至突破了苹果的价格,飙至9000元。...2016-11-22
- 这篇文章主要介绍了Linux下常用压缩格式的压缩与解压方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- 3月9日-11日,以“智慧生活尽在AWE”为主题的2017年中国家电及消费电子博览会(AWE)将在上海新国际博览中心(SNIEC) 举行。届时,华为将携HiLink智能家居生态成果亮相。华为消费者业务首席战略官邵洋还将在AWE开幕式上发表主题演讲,并与方太集团、海尔集团、京东集团、博西家电四家企业的相关负责人共同出席“中国家电发展高峰论坛”,就如何打造“智慧生活”以及“人工智能在智能家居中的应用”进行探讨交流。...2017-07-06
- 凤凰科技讯 北京时间11月17日消息,据外媒报道,华为周三宣布,将开始通过亚马逊在美国销售其MediaPad平板电脑。...2016-11-22
- 这篇文章主要给大家介绍了关于C#压缩、解压文件夹/文件(带密码)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-04
- 这篇文章主要为大家介绍了利用R语言怎样解压与压缩.tar.gz.zip等各种压缩格式文件实现过程方法,有需要的朋友可以借鉴参考下希望能够有所帮助...2021-11-25
华为Mate9怎么设置个人隐私空间 华为Mate9隐私空间用法介绍
好友来借机?短信、视频、文件担心被泄露,不借?面子事儿大,借?别担心,设置属于您自己的隐私空间,在隐私空间存放的数据只对自己开放,即使手机丢失,别人也无法获取。那么华为Mate...2016-12-15- 你相信华为开始向苹果收取专利许可使用费吗?前不久,深圳市召开2016年知识产权工作会议,会议发布了“深圳市2015年度知识产权十大事件”,其中,华为苹果相互专利许可一事被列入其中。...2016-07-04
- 北京时间6月21日下午消息,三星高管表示,通过迅速开拓美国等市场,三星希望成为全球排名前三的5G技术厂商。此前,由于在无线技术标准方面的押注失误,三星在电信设备市场落后于竞争对手。...2016-07-04
- 从充电速度来看,荣耀 Magic 无疑是目前充电最快的手机,并且比同类产品速度快了近乎 1 倍。荣耀 Magic 仅仅只是华为石墨烯锂电池技术的首秀。...2016-12-31
华为mate40手机AI字幕功能如何使用?华为手机AI字幕功能使用教程
华为mate40手机上网功能有许多,在本文中介绍的则是它的ai字幕功能的使用,它的操作方法十分的简单,有兴趣的朋友可以参考本文...2020-12-08- 下面小编就为大家分享一篇c# 文件压缩zip或将zip文件解压的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
- 华为的EMUI 5.0不但是国内第一个基于安卓7.0的新系统,界面、功能彻底重新设计,还独创了Machine Learning智能感知学习系统,从底层全面优化原生安卓,解决安卓越用越卡顿的问题,号称18个月连续使用也不会卡顿,那么是怎么做到的,下面我们来看看吧...2016-12-15
- 这篇文章主要给大家介绍了关于C#压缩或解压rar、zip文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-10
- 今天,华为正式上架了自家的插线板产品,在华为商城以及天猫华为旗舰店均可购买,售价为 149 元。...2016-09-28
- 有朋友问我华为U8950D怎么解锁呢,下面我以图文的形式给大家详细介绍U8950D解锁的 教程有需要学习的机友可进入参考。 1、我们通过官网进入解锁网站,然后同意再点&...2016-09-20
- 下面小编就为大家分享一篇C# 解压gizp文件(.tgz)的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25