Apk解压缩。不是有效的zip文件,但解压缩工作完美

时间:2015-11-05 18:52:16

标签: go

我对golang zip阅读器有疑问。我们有apk构建器构建apk然后用dex protector加密这个apk。

当我尝试打开apk文件时,请返回错误“zip:not valid zip file”。但是当我尝试使用unzip或zipinfo打开时,工作正常 (另外我注意到一些有趣的东西:在用ZIPArchive打开的PHP 5.5 apk文件中很好,但在5.6中返回错误就像golang)

我尝试打开调试golang archive / zip pckage,发现此行https://github.com/golang/go/blob/master/src/archive/zip/reader.go#L269中返回了错误。

然后我尝试像这样调试这一行:

fmt.Printf("%+v", f)
fmt.Println(
    "len(f.Extra):", len(f.Extra),
    "len(b):", len(b),
    "tag:", tag,
    "size:", size,
)

结果如下:

&{FileHeader:{
Name:META-INF/MANIFEST.MF CreatorVersion:20 ReaderVersion:20 Flags:2056 Method:8 
ModifiedTime:23093 ModifiedDate:18230 CRC32:2569174240 
CompressedSize:359 UncompressedSize:570 CompressedSize64:359 UncompressedSize64:570 
Extra:[] ExternalAttrs:0 Comment:
} zipr:0xc208038038 zipsize:276893 headerOffset:0}

&{FileHeader:{
Name:res/drawable/ic_launcher.png CreatorVersion:10 ReaderVersion:10 Flags:2048 Method:0 
ModifiedTime:22030 ModifiedDate:18230 CRC32:2310989215 
CompressedSize:20418 UncompressedSize:20418 CompressedSize64:20418 UncompressedSize64:20418
Extra:[] ExternalAttrs:0 Comment:
} zipr:0xc208038038 zipsize:276893 headerOffset:2066}

...

---------------->PROBLEM HERE:-------------------=>
&{FileHeader:{
Name:AndroidManifest.xml CreatorVersion:10 ReaderVersion:10 Flags:2048 Method:0 
ModifiedTime:22030 ModifiedDate:18230 CRC32:1929033187 
CompressedSize:7268 UncompressedSize:7268 CompressedSize64:7268 UncompressedSize64:7268 
Extra:[204 94 136 27 148 14 49 95 154 4 231 53 127 242 4 199 243 207 229 161 103 90 116 69 45 31 54 220 113 43 172 4 159 109 211 57 217 2 161 17 196 16 168 19 174 138 107 15 36 181 223 22 15 21 106 153] 
ExternalAttrs:0 Comment:
} zipr:0xc208038038 zipsize:276893 headerOffset:22954}

len(f.Extra): 56
len(b): 52
tag: 24268 
size: 7048 

额外标题中的问题(我认为这个额外的标题在加密apk时添加了dex protector)。大小超过额外字节的长度。 但是在php5.5中解压缩util和ZipArchive与这个额外内容完美搭配。如何解决这个问题?

我想在go archive / zip包中重写这个部分,这样额外的东西不会影响golang zip阅读器。

这对我来说非常重要,因为我重写了构建apk从php到golang,我遇到了一个无法决定的问题:(。请帮帮我。

0 个答案:

没有答案