AndroidDeveloperLB / apk-parser

BSD 2-Clause "Simplified" License
22 stars 9 forks source link

Bug: "ParserException: Unexpected chunk Type: 0x206" #1

Open AndroidDeveloperLB opened 2 years ago

AndroidDeveloperLB commented 2 years ago

I got this on the sample on Pixel 6 with Android 12.1 beta 3 :

can't parse apk for "android" in: "/system/framework/framework-res.apk" - exception:net.dongliu.apk.parser.exception.ParserException: Unexpected chunk Type: 0x206 isSystemApp?true

There are some similar issues on the original repository that were fixed: https://github.com/hsiafan/apk-parser/issues?q=Unexpected+chunk+Type

Meaning:

https://github.com/hsiafan/apk-parser/issues/52 https://github.com/hsiafan/apk-parser/issues/54 https://github.com/hsiafan/apk-parser/issues/40 https://github.com/hsiafan/apk-parser/issues/49 https://github.com/hsiafan/apk-parser/issues/66 https://github.com/hsiafan/apk-parser/issues/89 https://github.com/hsiafan/apk-parser/issues/111

It seems the original author told me to ignore some chunk types, such as 0x0204 : https://github.com/hsiafan/apk-parser/issues/96#issuecomment-500275300 And that it was ignored by treating it in ChunkType class, treating it as NullHeader in ResourceTableParser class.

The proper solution might be related to looking here: https://android.googlesource.com/platform/frameworks/base/+/master/libs/androidfw/include/androidfw/ResourceTypes.h

Of course, we could ignore this too. I just hope it won't cause an issue.

Attached the sample APK that is problematic, giving this error:

framework-res.zip

AndroidDeveloperLB commented 2 years ago

Tried to Fix by using the same workaround as 0x0204 , and also renamed the constants according to the Android source code.

Sadly it caused a different issue after this change:

can't parse apk for "android" in: "/system/framework/framework-res.apk" - exception:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String net.dongliu.apk.parser.struct.resource.PackageHeader.getName()' on a null object reference isSystemApp?true

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String net.dongliu.apk.parser.struct.resource.PackageHeader.getName()' on a null object reference at net.dongliu.apk.parser.struct.resource.ResourcePackage.(ResourcePackage.java:28) at net.dongliu.apk.parser.parser.ResourceTableParser.readPackage(ResourceTableParser.java:87) at net.dongliu.apk.parser.parser.ResourceTableParser.parse(ResourceTableParser.java:76) at com.lb.apkparserdemo.apk_info.ApkInfo$Companion.getApkInfo(ApkInfo.kt:59) at com.lb.apkparserdemo.MainActivity$performTest$1.invoke(MainActivity.kt:77) at com.lb.apkparserdemo.MainActivity$performTest$1.invoke(MainActivity.kt:43) at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:30)

ujjwalkirorimal commented 6 months ago

Any updates on this?

AndroidDeveloperLB commented 6 months ago

@ujjwalkirorimal Sadly I'm not an expert on the implementation of the parsing. I forked it to:

  1. Fix what I can
  2. Have others that might be able to help
  3. Convert to Kotlin to make it simpler, shorter, and maybe have less bugs. I did this partially but then I reached some places that are harder and will take a lot of effort, because I'm not sure what's allowed there (nullability for example).