/** =====================================================================================**       Filename:  unpack.c**    Description:  仅作为代码分享,转载请注明作者 *          (相对于把整大块文件读入内存,此程序运行时对系统开销比较小的特点);**        Version:  1.0*        Created:  2013年03月28日 22时34分52秒*       Revision:  none*       Compiler:  gcc**         Author:  linkscue (scue), *   Organization:  ** =====================================================================================*/#include    <stdlib.h>
#include    <stdio.h>
#include    <strings.h>
#define u8 unsigned char
#define u32 unsigned int
#define u16 unsigned short
#define BUFFER_SIZE 4/* * u32  magic* u32  paket_size* u32  flag=0x1* u8   Hardware[8]* u32  Filetype* u32  data_size* u8   date[16]* u8   time[16]* u8   filename[32]* u8   other[paket_size-92]* */int realStrlen(char *string){int i=0;char ch=NULL;while ( (ch = *(string + i)) != '\xFF' ) {i++;}return i;
}
void hello(){printf("\n");printf("Welcome to use linkscue unpack huawei official rom tool!\n");
}
int main ( int argc, char *argv[] )
{hello();if (argc == 1) {printf("\n");printf("usage: %s unpack.app\n", argv[0]);exit(0);}char *file;FILE *fp,*fd;u32 tmp;u32 magic=0xa55aaa55;u32 paket_size=0;u32 flag=1;u8  hwid[8]="";u32 filetype=0;u32 data_size=0;u8  date[16]="";u8  time[16]="";u8  filename[32]="";int other_size=0;int number=1;char basename[32]="";char basehwid[8]="";int fp_start=0;int fp_local=0;int i=0,count=0,counts=0;int end_point=0;file=argv[1];if ( (fp=fopen(file,"rb")) == NULL) {printf("open file failure!\n",file);exit(1);}printf("\n");while (!feof(fp)) {fscanf(fp, "%4c", &tmp);if (tmp == magic) {fp_start=(ftell(fp)-4);fscanf(fp, "%4c",&paket_size);fscanf(fp, "%4c",&flag);fscanf(fp, "%8c",&hwid);fscanf(fp, "%4c",&filetype);fscanf(fp, "%4c",&data_size);fscanf(fp, "%16c",&date);fscanf(fp, "%16c",&time);fscanf(fp, "%32c",&filename);other_size=( paket_size - 92 );fseek(fp, other_size, SEEK_CUR);if ( strcmp(filename,"INPUT") == 0 ) {sprintf(basename, "output_%02d.img", number);strncpy(filename, basename, sizeof(filename));number++;}
//            if ( (int)paket_size <= 0 || (int)data_size <= 0) {
//                continue;
//            }
            strncpy(basehwid, hwid , realStrlen(hwid));printf("At: 0x%08x hw: %s size: %-10d time: %s_%s -->  %s\n", fp_start, basehwid, data_size, date, time, filename);if ((fd=fopen(filename,"wb"))==NULL) {printf("open %s to write data failure!\n", filename);fseek(fp, 88, SEEK_CUR);continue;}u8 buffer[BUFFER_SIZE];counts = 0;while ( counts < data_size ){if (feof(fp)) {                 /* if the file is end, break! */break;}count = fread(buffer, 1, BUFFER_SIZE, fp);fwrite(buffer, 1 , BUFFER_SIZE, fd);counts+=count;}
//            printf("paket size is 0x%08x, count is %d,  data start at 0x%08x, this time end at 0x%08x\n", paket_size,counts,  (paket_size+fp_start), ftell(fp));
            fclose(fd);fseek(fp, ( fp_start + 92 ) , SEEK_SET);}}
//    printf("Unpack %s ok!\n", file);
    fclose(fp);return EXIT_SUCCESS;
}

[C语言] 文件操作,解压华为官方固件UNDATE.APP工具(源代码);相关推荐

  1. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 )

    文章目录 一.判定是否是第一次启动 二.递归删除文件操作 三.解压 Zip 文件操作 四.解压操作相关代码 参考博客 : [Android 安全]DEX 加密 ( 常用 Android 反编译工具 | ...

  2. Linux C语言 Zlib 实现解压zip文件

    Linux C语言 Zlib 实现解压zip文件 因为在做嵌入式Linux,做OTA功能的时候需要解压zip升级包.所以需要用到zip文件的解压缩功能. 就想着能不能用zlib来完成这个功能.在网上一 ...

  3. c语言 freopen txt_C语言文件操作函数freopen详解

    C语言文件操作函数freopen详解 今天做USACO 用到了文件的操作. 之前做USACO只是格式化的.些 写 freopen("xxx.in","r",st ...

  4. C语言——文件操作函数 fseek、ftell、rewind详解

    前言 前面,我讲了讲文件操作的第二步:文件的读写操作,里面详细的介绍了各类读写函数的用法,有兴趣的小伙伴可以去看看: C语言--文件操作(2)文件的读写操作_ 接下来,我再来讲一讲关于标题中这三个函数 ...

  5. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  6. .xz是什么文件怎么解压_zip解压app下载-zip解压app安卓版下载v11.5.6

    zip解压APP为用户提供了完全免费的文件解压缩功能服务,超高效的压缩和解压,支持将文档.图片.PDF和图片等多种文件夹进行压缩,压缩和解压的过程稳定高效,不会 影响文件打开也不会有乱码出现.还可以解 ...

  7. win7怎么解压rar文件_win7解压rar文件的方法

    大家知道win7怎么解压rar文件?rar是一种常用的文件压缩与归档的私有格式,用于数据压缩与归档打包.加快传输速度,我们都会将文件进行压缩.但最近有Win7系统用户反映收到rar文件,却不知道w怎么 ...

  8. linux jar和zip,Linux命令———zip和jar文件压缩解压

    Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...

  9. linux下tar gz bz2 tgz z等众多压缩文件的解压方法

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见 的压缩文件就只有两种,一是,zip,另一个是.rar. ...

最新文章

  1. [转]实现Python HTTP服务方法大总结
  2. java 查询功能_java利用反射实现查询功能
  3. NodeJs回调操作Promise化
  4. CodeForces - 1359E Modular Stability(组合数学)
  5. php面试题之一——PHP核心技术(高级部分)
  6. Ubuntu 下 Eclipse 桌面图标创建
  7. 离你最近的疫情小区,终于可以自己查了!
  8. Java重构面向过程代码_代码重构那些事儿
  9. Android ViewDragHelper的简单分析(一)
  10. vs项目中的筛选器(filter)
  11. 研究生英语写译教程(提高级/第三版)_翻译篇 笔记及答案
  12. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
  13. 开源监控Prometheus介绍,安装,配置,使用详解
  14. icon图标制作网站推荐
  15. weblogic11g 后台无需密码启动设置
  16. mumu模拟器显示服务器出错,用mumu模拟器显示错误代码
  17. 前端重要信息手机号、邮箱、身份证号进行脱敏处理
  18. Python.exe - 无法找到入口/无法定位程序输入点...于动态链接库
  19. C++编程基础(1)-C中的malloc/free和C++中的new/delete
  20. 厉害了!那个用文言文编程的小哥,竟从28万行唐诗中找出了对称矩阵

热门文章

  1. 论文阅读——《Robust Superpixel Tracking》
  2. 【直播回放】100分钟全面剖析图像分割任务,学习CV必知
  3. 中国城市商业银行产业模式展望及布局规模前景分析报告2021-2027年
  4. 解读.net垃圾回收和CLR 4.0对垃圾回收所做的改进之一-.Net编程教程
  5. Java笔记:与系统交互、系统相关的类,Object类
  6. MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
  7. python里的“__all__ ”作用
  8. Java web 初入
  9. RPM安装rabbitMQ
  10. ECShop的数据操作类文件