From c300184780de1a3fef684f60a67caa3c28e9f649 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Mon, 21 Mar 2022 07:03:14 -0400 Subject: [PATCH] fix: add support for overlay spec skipping --- .../androlib/res/decoder/ARSCDecoder.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index fe6973c8..4ec0853e 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -128,11 +128,14 @@ public class ARSCDecoder { boolean flag = true; while (flag) { switch (mHeader.type) { + case Header.XML_TYPE_SPEC_TYPE: + readTableTypeSpec(); + break; case Header.XML_TYPE_LIBRARY: readLibraryType(); break; - case Header.XML_TYPE_SPEC_TYPE: - readTableTypeSpec(); + case Header.XML_TYPE_OVERLAY: + readOverlaySpec(); break; case Header.XML_TYPE_STAGED_ALIAS: readStagedAliasSpec(); @@ -168,8 +171,18 @@ public class ARSCDecoder { int count = mIn.readInt(); for (int i = 0; i < count; i++) { - /* stagedResId */mIn.skipInt(); - /* finalizedResId */mIn.skipInt(); + LOGGER.info(String.format("Skipping staged alias stagedId (%h) finalId: %h", mIn.readInt(), mIn.readInt())); + } + + nextChunk(); + } + + private void readOverlaySpec() throws IOException { + /* policyFlags */mIn.skipInt(); + int count = mIn.readInt(); + + for (int i = 0; i < count; i++) { + LOGGER.info(String.format("Skipping overlay (%h)", mIn.readInt())); } nextChunk();