[LG Optimus G (International)] wangzhiqiang:
hello,can you read this article?it mentioned how to unpack the .dz file.if the .dz file can be extracted,i think the rest is easy.

"처음 사이트를 열었던 의도와는 사뭇 다르게 부트로더라던가 부트로더 언락쪽에 관심을 가지게 되다보니 이제는 별것도 다 하게되네요.

옵2x 부트로더 락을 깬 내용을 xda에 올렸더니 부트로더 락이 걸린 옵티머스 4x에 대해서 부트로더락을 봐달라는 연락을 받았습니다. 옵티머스4x는 테그라3 AP를 사용하는데 옵2x와는 다르게 nvflash마져 SBK 락이 걸려있습니다. 옵2x는 nvflash의 SBK락이 걸려있지 않기때문에 부트로더 변조가 가능한 케이스지만 옵티머스 4x는 nvflash 자체를 아예 사용하지 못하도록 SBK락이 걸려있으므로 부트로더 락을 깨는게 초장부터 호락호락하지 않지요.

그러면 테그라3에 대한 락을 깨는것이 불가능하냐 하면 그렇지 않은 모양입니다. nvflash의 헛점을 이용해서 최근에 락을 깬 사례가 존재합니다

http://androidroot.mobi/2012/05/27/introducing-wheelie-nvflash-for-asus-transformer-tf101-b70/

ASUS Transformer TF101 B70 nvflash 락 깨기

nvflash에 보안구멍이 있던게 아니네요. 트랜스포머의 경우에 SBK가 유출되었고, 이를 통해서 nvflash를 사용가능하게 된 것입니다. 다만 최신의 nvflash의 경우 프로토콜이 바뀌어 이 부분을 파혜쳐서 결국 nvflash를 쓸 수 있게 되었다는 것입니다.

아무튼 옵티머스 4x 기기도 없지만 궁금해서 ^^;; 한번 살펴보았습니다.

우선 kdz파일을 찾아보았고 손쉽게 구할 수 있었습니다.

http://csmg.lgmobile.com:9002/swdata/WEBSW/LGP880/ANEUBK/V10A_00/V10A_00.kdz

그런데 이 kdz 파일을 LGExtract로 풀어보면 *.dz 확장자를 가진 파일만 덜렁 나옵니다. 어라? 이것은 안드로원때 kdz파일 압축을 풀면 나오던 그 파일 형식인 것으로 생각되었습니다. dzextract라는 알려진 툴이 있기때문에 그것으로 풀어보려 했지만 실패. 파일 형식이 조금 다른 형태이더군요.

그러나 dz 파일 형식이라는 점이 바로 힌트가 됩니다. 변형된 dz파일일 것으로 생각되어서 dz 파일의 형식에 관한 문서를 검색해봤습니다. 얼핏 dz 파일은 zlib 혹은 gzip으로 압축된 형식이라는 사실을 알고있었기 때문이죠.

검색해보니 다음과 같은 링크가 나옵니다

http://www.frenchcoder.com/dzextract-lg-dz-file-format-and-extract-tool-lg-ks20/

구 dz 파일은 제 기억대로 gzip 형식으로 압축이 되어 있는 형태입니다.

이 형식과 거의 다르지 않을 것이라는 가정에서 dz 파일을 xxd / hexdump로 살펴보았습니다.

(사실은 문서 찾아보지 않고 먼저 xxd로 덤프했었습니다 :) gzip 혹은 zlib인 것을 확인하기 위해 문서를 검색했습니다)

0000200: 3012 9578 4346 4700 0000 0000 0000 0000 0..xCFG.........

0000210: 0000 0000 0000 0000 0000 0000 0000 0000 ................

0000220: 0000 0000 666c 6173 682e 6366 6700 0000 ....flash.cfg...

0000230: 0000 0000 0000 0000 0000 0000 0000 0000 ................

0000240: 0000 0000 0000 0000 0000 0000 0000 0000 ................

0000250: 0000 0000 0000 0000 0000 0000 0000 0000 ................

0000260: 0000 0000 8211 0000 f002 0000 7f00 c935 ...............5

0000270: ae4b 5a54 8a31 cffc 8148 2ef9 0000 0000 .KZT.1...H......

0000280: 0000 0000 0000 0000 0000 0000 0000 0000 ................

0000290: 0000 0000 0000 0000 0000 0000 0000 0000 ................

... (생략)

0000400: 7801 d597 db6b db30 14c6 dff5 5718 f4bc x....k.0....W...

0000410: 20c9 3765 1058 2e6d 1f96 b661 69c7 a014 .7e.X.m...ai...

0000420: e338 6ad0 ea4b 66bb a5d9 5fbf 23d9 d4da .8j..Kf..._.#...

0000430: 6cc6 7271 6079 b3f9 1ce9 e7ef e8f8 3b0f l.rq`y........;.

0000440: 6bf1 2a23 f188 cadd 568c 8a75 9244 48a6 k.*#....V..u.DH.

0000450: 4519 a691 18d9 083d 6cc3 bc94 a5cc d247 E......=l......G

0000460: 9486 8918 4da6 7748 ae47 ac7a 6095 6565 ....M.wH.G.z`.ee

0000470: 1065 e993 dc04 65b8 8a05 0ae3 388b 42f5 .e....e.....8.B.

0000480: 40b0 cd62 19ed 4685 f8f1 22d2 5286 317a @..b..F...".R.1z

0000490: 92b1 2876 4529 9240 afb7 0a0b 19a1 42fe ..(vE).@......B.

위와 같이 그럴듯한 파일 이름이 보입니다. flash.cfg가 파일 이름인 것이고,

0x400 주소부터 아마도 gzip 데이터일 것으로 추측되었습니다.

그래서 이 부분을 잘라서 압축을 풀려고 시도하였습니다.

7801로 시작하는 부분은 바로 zlib 레벨 1로 압축되어있는 것입니다. 여기에 gzip의 헤더가 빠져있는 것으로 보이므로 다음과 같이 gzip 헤더를 붙이고 압축을 기본 유닉스 유틸로 풀 수 있습니다.

printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" |cat - flash.cfg.raw |gzip -dc >flash.cfg

빙고!! 압축이 풀려버립니다. 그리고 flash.cfg는 예상대로 정상적으로 압축이 풀린 다음과 같은 내용이 들어있습니다.

[device]

type=sdmmc

instance=3

[partition]

name=BCT

id=2

type=boot_config_table

allocation_policy=sequential

filesystem_type=basic

size=3145728

file_system_attribute=0

partition_attribute=0

allocation_attribute=8

percent_reserved=0

...

(생략)

flash.cfg의 md5sum은 다음과 같습니다.

7f00c935ae4b5a548a31cffc81482ef9 flash.cfg

위의 dz 서브파일 헤더 부분의 파란색 값과 완전히 일치합니다.

녹색은 파일의 크기이며, 노랑색은 압축된 파일의 크기이고, 이 값도 모두 일치합니다.

bct 및 bootloader.bin도 차례대로 압축을 풀어보았습니다. 확인할 길은 없지만 모두 정상적으로 압축이 풀렸을 것으로 생각됩니다.

http://xdaforums.com/showthread.php?t=1960422 xda에는 자세한 내용은 생략하고 포스팅했습니다~

첨부파일

dzextract.exe는 binoffset.c파일의 소스를 변형하여서 만든 dz extractor입니다.

사용법은

dzectract.exe my.dz LNX > boot.gz # 파티션 이름을 지정하면 해당 파티션을 추출합니다.

zcat boot.gz > boot.img # 압축은 zcat으로 풀 수 있습니다. 그냥 압축을 풀면 오류가 나니 주의하시길.

[출처] 옵티머스 4x kdz 파일 분석 (dz 압축풀기 실행파일 추가) (Android Hackers) |작성자 영구땡칠"