如何从kdz中提取OP分区

gress 2020-2-1 15516

前面的废话

从V30开始,LG在其发布的智能手机中引入了OP分区,里面包含了重要的配置文件。基于Python编写的kdztools及其.exe版可以从LG官方kdz固件中提取除OP分区外的所有分区(貌似)。本篇教程以示例形式展示如何从kdz固件中提取OP分区。

被错误提取的OP分区

以固件V500N20b_00_LGU_KR_OP_1223.kdz为例,可以在提取出V500N20b_00_LGU_KR_OP_1223.dz后执行undz -f V500N20b_00_LGU_KR_OP_1223.dz -s 33提取OP分区,在目录\dzextracted\下得到一个大小为188 MB的OP_S.image文件。 尝试用7-Zip打开,会看到错误提示:

至此,OP分区提取宣告失败。

需要准备的工具

从LG V50 Android 10固件中提取OP分区

这里以固件V500N20b_00_LGU_KR_OP_1223.kdz为例。

Step 1 解包kdz

执行命令unkdz -f V500N20b_00_LGU_KR_OP_1223.kdz -x -d .提取出V500N20b_00_LGU_KR_OP_1223.dz

Step 2 提取压缩块

执行undz -f V500N20b_00_LGU_KR_OP_1223.dz -x提取出所有被压缩的数据块,你会发现有几个OP开头的.chunk文件。

Step 3 文件数据分析

将所有.chunk文件直接往UltraEdit里面扔

很明显,不能正确提取OP分区的原因找到了。kdztools在提取数据时多提取了数据,导致解压数据时出错。解压过程确实有错,具体原因未知,分析Python代码中。

如上图所示,绿框中的数据(00000000h000001f0h)是一些描述信息。红框中数据(00000200h前4个字节)28 B5 2F FDZstandard的文件头。

Step 4 文件数据处理

找到了问题,处理起来就很简单了,删除绿框部分数据即可。掐指一算,嗯,多了512个字节,直接用UltraEdit删除前512个字节。

删除后记得点保存数据,对所有.chunk文件都进行同样操作。

Step 5 解压数据块

将修改后的所有.chunk文件复制到Zstandard所在目录,并将文件扩展名改为.zst

执行命令zstd -d 要解压的文件名字解压数据块。比较简单的是写个批处理命令,内容写zstd -d *.zst。执行后得到解压后的数据块:

一共有700 MB,直觉告诉我,这么干应该是对的。

Step 6 合并数据块

执行命令type 要合并的文件1 要合并的文件2 要合并的文件3 > 合并后的文件来合并数据块,这里根据实际情况执行type OP_LGU_KR.img_4128392 OP_LGU_KR.img_4193928 OP_LGU_KR.img_4259464 > OP_LGU_KR.img得到合并后的数据

Step 7 数据确认

7-Zip打开OP_LGU_KR.img,发现一切正常

里面的数据可以顺利读取了。

从LG G7 Android 9固件中提取OP分区

这里以固件G710NOP20k_00_OPEN_KR_OP_1220.kdz为例。

Step 1 解包kdz

执行命令unkdz -f G710NOP20k_00_OPEN_KR_OP_1220.kdz -x -d .提取出G710N20k_00_OPEN_KR_1220.dz

Step 2 提取压缩块

执行undz -f G710N20k_00_OPEN_KR_1220.dz -x提取出所有被压缩的数据块,你同样会发现有几个OP开头的.chunk文件。

Step 3 文件数据分析

将所有.chunk文件直接往UltraEdit里面扔

如上图所示,绿框中的数据(00000000h000001f0h)是一些描述信息。红框中数据(00000200h前2个字节)78 01是zlib的文件头。

Step 4 文件数据处理

同样方法,删除绿框部分数据即可。掐指一算,嗯,多了512个字节,直接用UltraEdit删除前512个字节。

删除后记得点保存数据,对所有.chunk文件都进行同样操作。

Step 5 解压数据块

将修改后的所有.chunk文件复制到offzip所在目录(或其他zlib解压工具的目录)。

打开命令提示符,执行命令offzip -a 要解压的文件,这里根据实际情况先执行命令offzip -a OP_OPEN_KR.img_2916102.chunk

得到文件00000000.ops,将其重命名为OP_OPEN_KR.img_2916102

继续执行命令offzip -a OP_OPEN_KR.img_2981638.chunk解压第2个数据块,得到文件00000000.dc5,并将其重命名为OP_OPEN_KR.img_2981638

继续执行命令offzip -a OP_OPEN_KR.img_3047174.chunk。解压第3个数据块,得到文件00000000.dc5,并将其重命名为OP_OPEN_KR.img_3047174

一共有630 MB,直觉告诉我,这么干应该也是对的。

Step 6 合并数据块

执行命令type 要合并的文件1 要合并的文件2 要合并的文件3 > 合并后的文件来合并数据块,这里根据实际情况执行type OP_OPEN_KR.img_2916102 OP_OPEN_KR.img_2981638 OP_OPEN_KR.img_3047174 > OP_OPEN_KR.img得到合并后的数据

Step 7 数据确认

7-Zip打开OP_OPEN_KR.img,发现一切正常

里面的数据可以顺利读取了。

后面的废话

恭喜你,至此你已经可以提取包括OP分区在内的所有LG官方kdz固件中的分区数据并对kdz文件有一个比较深入的了解,无非是将分区数据按256 MB的大小进行数据切割分块,然后对每个数据块进行压缩,再添加相应的描述信息合并成.dz文件,再加上其他.dll文件打包成.kdz

有能力的可以折腾折腾Python代码,使其直接就能提取出OP分区,我是看不下去,太长了。


上一篇:EXE版 KDZTools (无需安装Python)
下一篇:v50韩版U+,怎么root?各位大佬!
最新回复 (5)
  • 0 引用 2

    您好 请问下为什么我下载的 Zstandard 不一样

    2020-2-23 收起回复
    gress: 你下载的是源码,在releases页面下载win64或win32的
    2020-2-23回复
    pcduron: 谢谢老哥
    2020-2-24回复
    freetaurus: 我也下了一遍源码,晕。
    2020-3-8回复
  • 0 引用 3
    厉害啊宝贝,学到了,这去和gpt对线
    2020-2-24 收起回复
    freetaurus: 能应用吗?我按照这个方法处理GPT的那个文件,最后TYPE后任然无法用7zip打开?
    2020-3-17回复
  • 0 引用 4
    学习了
    2020-3-1 回复
  • 0 引用 5
    6666
    2020-4-5 回复
  • 0 引用 6

    那这个怎么提取,用了你的方法没有用

    1月前 回复
返回