From 5a66b2c42d48f0016e31ddaff3d47c65075c1d6d Mon Sep 17 00:00:00 2001 From: wangyilei Date: Sat, 6 Mar 2021 21:58:23 +0800 Subject: [PATCH 1/2] support lib/specType chunk out-of-order reading --- .../androlib/res/decoder/ARSCDecoder.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 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 9bd17278..7913b30d 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 @@ -123,12 +123,19 @@ public class ARSCDecoder { mPkg = new ResPackage(mResTable, id, name); nextChunk(); - while (mHeader.type == Header.TYPE_LIBRARY) { - readLibraryType(); - } - - while (mHeader.type == Header.TYPE_SPEC_TYPE) { - readTableTypeSpec(); + boolean flag = true; + while (flag) { + switch (mHeader.type) { + case Header.TYPE_LIBRARY: + readLibraryType(); + break; + case Header.TYPE_SPEC_TYPE: + readTableTypeSpec(); + break; + default: + flag = false; + break; + } } return mPkg; From e0e6cfd03f10d710e666c29456659688fb5aeea2 Mon Sep 17 00:00:00 2001 From: wangyilei Date: Sat, 6 Mar 2021 22:00:54 +0800 Subject: [PATCH 2/2] only log string decode warning when failed --- .../src/main/java/brut/androlib/res/decoder/StringBlock.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java index 2bff1b04..a06ff9e2 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java @@ -302,8 +302,8 @@ public class StringBlock { try { return (m_isUTF8 ? UTF8_DECODER : UTF16LE_DECODER).decode(wrappedBuffer).toString(); } catch (CharacterCodingException ex) { - LOGGER.warning("Failed to decode a string at offset " + offset + " of length " + length); if (!m_isUTF8) { + LOGGER.warning("Failed to decode a string at offset " + offset + " of length " + length); return null; } }