From 8551c6c903da16b24b4f2c8322f254c2633fc68b Mon Sep 17 00:00:00 2001 From: Jan S Date: Mon, 4 Apr 2022 19:05:07 +0200 Subject: [PATCH] fix(res): ignore resource chunk entries that are located after the resource chunk end (#751)(PR #1436) --- .../src/main/java/jadx/core/xmlgen/ResTableParser.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java index 4ff7b29fd..6c5554e0b 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResTableParser.java @@ -212,7 +212,8 @@ public class ResTableParser extends CommonBinaryParser { /* int headerSize = */ is.readInt16(); /* int size = */ - is.readInt32(); + long chunkSize = is.readUInt32(); + long chunkEnd = start + chunkSize; int id = is.readInt8(); is.checkInt8(0, "type chunk, res0"); @@ -231,10 +232,15 @@ public class ResTableParser extends CommonBinaryParser { for (int i = 0; i < entryCount; i++) { entryIndexes[i] = is.readInt32(); } - is.checkPos(entriesStart, "Expected entry start"); for (int i = 0; i < entryCount; i++) { if (entryIndexes[i] != NO_ENTRY) { + if (is.getPos() >= chunkEnd) { + // Certain resource obfuscated apps like com.facebook.orca have more entries defined + // than actually fit into the chunk size -> ignore the remaining entries + LOG.warn("End of chunk reached - ignoring remaining {} entries", entryCount - i); + break; + } parseEntry(pkg, id, i, config.getQualifiers()); } }