Skip to content

YKG/huawei_UPDATE.APP_unpacktool

Repository files navigation

 

一:

首先说说UPDATE.APP的大体结构。在这方面,三年前就已有第三方开发者进行了研究(如果这算是一种研究)。现在只是在前人的基础上分析华为固件的结构与工作方式.

   

         windows中用winhex.exe将UPDATE.APP打开。桌面版linux下最好使用bless。


1. First 92 bytes are 0x00


2. Each file are started with 55AA 5AA5
3. Then 4 bytes for Packet(header) Length
4. Then 4 bytes for 0x00000001
5. Then 8 bytes for Hardware ID
6. Then 4 bytes for File Sequence (*)
7. Then 4 bytes for Data file length
8. Then 16 byts for File Date
9. Then 16 byts for File time
10.Then 16 byts for The word Input ?
11.Then 16 byts for Blank with 0x00
12.Then 2 bytes for the Checksum of the header(maybe?)
13.Then 2 bytes for always 0x1000 ?
14.Then 2 bytes for Blank [step 2-14 consumes 98bytes)
15.Then ($headerLength-98) bytes for file checksum
16.Then data file length bytes for files.


17.Then repeat 2 to 16

 

 

 

 ----------------------------------

 

 

二:

UPDATE.APP中单个模块分析:
 

这里定义 :

           定义1:从某个55 aa 5a a5开始(含)到下一个55 aa 5a a5(不含)间的(看起来连续的)数据称为一个模块(module)。
          定义2:一个模块中,刷进手机分区的某部分数据,称为刷机文件。
       定义3:一个模块中,去除刷机文件的另一个部分数据,称为模块的头文件,简称头文件;或者去除版本文件后剩余部分也称为头文件.(有两个模块分别包含crc.mbn,MD5_RSA。类似)

          因此,模块=头文件+刷机文件
    或者,模块=头文件+版本文件
         模块=头文件+crc.mbn
                        模块=头文件+MD5_RSA 。

          定义4:我们将不同模块的相对应位置的多个字节称为一种结构。各个模块是有规律可寻的,我们一个个结构分析。
         

              

    以下是UPDATE.APP中的某个模块。经过编辑处理,模块分成十几个结构分析:

 

   为适应UPDATE.APP整体结构的需要,模块结构从2开始计数。其中,2至15结构为头文件,第16结构为刷机文件或版本文件等.

          结构
字节数
结构相对应的数据(值)                              简要说明
2. Each module are started
      模块的开始

4
55 AA 5A A5 每个模块以55 aa 5a a5开始,它是UPDATE.APP的标识之一.解包工具首先以它为依据将强刷包分十几个模块(后去掉头文件,才将刷机文件与版本文件等输出到output目录)。
3. header Length
     头文件长度

4
64 00 00 00 十六进制表示的字节数,高低位颠倒.          该值表示头文件的长度, 从55 aa 5a a5 开始(含)到真正刷机文件(或版本文件)开始为止的一段文件的大小.即2-15结构包含的总字节. 强刷程序根据它计算刷机文件(在sd卡中)的相对开始地址.
4. 0x00000001 4
01 00 00 00 固定
5. Hardware ID
      硬件ID
8
48 57 38 78 32 35 FF FF 8x25
6. File Sequence
      模块序号

4
00 00 00 FB (注意对比split_update.pl文件)             模块序号,作为模块标识,强刷程序根据它确定模块中刷机文件将要刷入哪个分区(当然有些文件不刷进手机,而用于效验).             perl脚本根据该结构发现刷机文件.
7. Data file length
     刷机文件(等)的长度
4
28 00 00 00 该结构标明真正要刷进手机的刷机文件的大小.强刷程序根据它及前面算出的开始地址校验并读取内容.
8. File Date
       日期

16
32 30 31 33 2E 30 33 2E 32 32 00 00 00 00 00 00 注明日期
9. File time
      时间

16
31 37 2E 35 39 2E 33 33 00 00 00 00 00 00 00 00 时间,精确到秒.
10. The word "Input"
       十六进制编辑器上看到的一个单词,“input”


16
49 4E 50 55 54 00 00 00 00 00 00 00 00 00 00 00 固定的,作为UPDATE.APP的标识之一,与某些固定字节构成一种特定数据结构.强刷程序识别这样的数据结构是UPDATE.APP的一部分,才进一步将模块中的刷机文件写入手机存储芯片中. 由于sd卡中也可能存在其它包含55 aa 5a a5的数据结构.因而还需要其它标识构成特定结构.
11. Blank with 0x00
          16个0x00

16
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 固定的16个 0x00字节.可以与前一结构(第10结构)合并看待.
12. Unknow Checksum
      官方的未知方法生成的效验值

2
96 86 目前这两个字节我们无法校验生成并通过强刷的效验机制.预计它与crc.mbn,MD5_RSA是配套的.外国在这方面断续研究几年没有结果.原计划的UPDATE.APP重新打包失败.
13. always 0x1000 2
00 10 固定
14. 2 byte Blank with 0x00
          2个0x00
2
00 00 固定,第13与14结构可合并看待.
15. ($headerLength-98) bytes for file checksum

    刷机文件(等)的效验值
不定
39 F3 特殊的crc16的效验结果.外国网友已编译出linux下的效验程序(工具中的crc).  另,这里字节数不是固定的.是与刷机文件的大小相关的.这是可以理解的:文件越长,其效验结果需要越多的字节表示。
16. DATA file

   刷机文件(或者是版本文件,crc.mbn,
MD5_RSA)
不定
01 00 00 00 03 00 00 00 00 00 05 60 00 00 54 2D F0 A3 08 00 F0 A3 08 00 F0 A3 5C 2D 00 00 00 00 F0 A3 5C 2D 00 00 00 00 到这里刷机文件出现了. ( 该模块中前面部分是头文件. 头文件总字节=98+第15结构的字节数 .也就是,从第2结构到第14结构结束止,共98字节,是固定的98字节。而第15结构字节数是不固定的。)
 
   
紧接着下一个模块:
   
2.Each file are started by 4
55 AA 5A A5  
3. header Length 4
省略  
4. 0x00000001 4
省略  
... ...
...  
16. DATA file ..
省略   
 下一个模块
 ...  

 

 

 

 

----------------------------------------------

 

 

三:
解包工具的使用:

window下:
1.安装perl:   http://www.activestate.com/activeperl/downloads

   选择相应系统的版本安装。安装过程,其自动配置环境变量。

2.将UPDATE.APP文件置于与split_update-windows.pl批处理等在同一目录下。

3.双击“双击自动解包.bat”即可解包。

4.也可以使用工具自带的perl,但可能不能在某个系统版本中使用。


linux下的使用:
1.下载安装perl:sudo apt-get install perl

2.定位到工具文件目录,并将UPDATE.APP文件复制到该文件夹

3.给split_update-linux.pl以可执行权限:sudo chmod 755 split_update-linux.pl

给crc以可执行权限:chmod 755 crc

4.开始解包:  ./split_update-linux.pl UPDATE.APP
或者          ./split_update-linux.pl

 


   在工具目录output文件夹下大致生成20多个文件:

注意:以下所述文件对应分区仅限Y300,G510,G330的高通机型。其它型号与MTK机型不一定一样。更多信息可自行探讨。

方法也很简单,就是用dd命令从手机分区读出文件到sd卡,再adb pull到电脑。后用十六进制编辑器对比就行了


文件 对应分区 作用
partition0.bin 乱改分区表文件,手机会变砖:分区描述文件,分为两部分。包括MBR与EBR。前512字节为MBR,后部分为EBR
qcsblhd_cfgdata.mbn mmcblk0p1 随意修改该分区文件,手机会变砖:huawei bootloader ,
qcsbl.mbn mmcblk0p2 随意修改该分区文件,手机会变砖: huawei bootloader
fat.bin mmcblk0p3 modem,与网络有关
oeminfo.mbn mmcblk0p5
包含huawei bootloader与串号,识别码,版本型号等信息,强刷时受到检查。
splash.raw565 mmcblk0p5 bootloader fastboot logo
oemsblhd.mbn   mmcblk0p6 随意修改该分区文件,手机会变砖:头文件
oemsbl.mbn   mmcblk0p6 随意修改该分区文件,手机会变砖: huawei bootloader
modem_st1.mbn   mmcblk0p9 与网络有关
modem_st2.mbn   mmcblk0p10 与网络有关
emmc_appsboothd.mbn   mmcblk0p11 随意修改该分区文件,手机会变砖:头文件
emmc_appsboot.mbn   mmcblk0p11 随意修改该分区文件,手机会变砖:引导系统启动,接收按键状态
boot.img   mmcblk0p12 ...
recovery.img   mmcblk0p13 ...
cust.img.ext4   mmcblk0p16 ...
system.img.ext4   mmcblk0p17 ...
userdata.img.ext4   mmcblk0p18 ...
same_40Byte_1_boot_hd.mbn 不刷入手机
...
same_40Byte_2_cust_hd.mbn 不刷入手机 ...
same_40Byte_3_system_hd.mbn 不刷入手机 ...
same_40Byte_4_userdata_hd.mbn 不刷入手机
...
same_40Byte_5_recovery_hd.mbn 不刷入手机 ...
crc.mbn 不刷入手机 强刷包效验依据
MD5_RSA 不刷入手机 效验值
current_boot_version.txt 不刷入手机   版本文件
current_version.txt 不刷入手机   版本文件
boot_versions_list.txt 不刷入手机   版本文件
versions_list.txt 不刷入手机   版本文件

 

 

 

 

这些文件相当有用,比以往用于制作刷机包有更多的应用。


---------------------------------


   该工具在Y300,G510,G330的高通CPU机型间通用,正确文件名。其它机型未必得到正确文件名(即使没有异常提示)。MTK机型底层文件不同,所以文件名一定是不对应的。

   据了解,u8825d的最新版本固件,并未发现partition0.mbn文件,也即分区表文件。也就是不更新的。这些需要注意。


 

  如果有兴趣,可以给每个机型修正文件名。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors