From c4e8f88499222036c3cbe0964e038fe189bdaa98 Mon Sep 17 00:00:00 2001 From: Kirlif Date: Mon, 7 Nov 2022 14:06:22 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20=C2=AB=20doNotCompress=20=C2=BB=20in=20ca?= =?UTF-8?q?se=20of=20obfuscated=20resources.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/brut/androlib/Androlib.java | 3 +++ .../main/java/brut/androlib/res/AndrolibResources.java | 4 +++- .../java/brut/androlib/res/decoder/ResFileDecoder.java | 9 ++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java index 4077ca6f..8c197131 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java @@ -184,6 +184,9 @@ public class Androlib { if (ext.isEmpty() || !NO_COMPRESS_PATTERN.matcher(ext).find()) { ext = file; + if (mAndRes.ObfFiles.containsKey(ext)) { + ext = mAndRes.ObfFiles.get(ext); + } } if (!uncompressedFilesOrExts.contains(ext)) { uncompressedFilesOrExts.add(ext); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java index a4492dc4..59b18213 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java @@ -247,7 +247,7 @@ final public class AndrolibResources { LOGGER.info("Decoding file-resources..."); for (ResResource res : pkg.listFiles()) { - fileDecoder.decode(res, in, out); + fileDecoder.decode(res, in, out, ObfFiles); } LOGGER.info("Decoding values */* XMLs..."); @@ -1041,6 +1041,8 @@ final public class AndrolibResources { public BuildOptions buildOptions; + public Map ObfFiles = new HashMap(); + // TODO: dirty static hack. I have to refactor decoding mechanisms. public static boolean sKeepBroken = false; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResFileDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResFileDecoder.java index 7d32581d..351a6819 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResFileDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ResFileDecoder.java @@ -27,6 +27,7 @@ import brut.directory.Directory; import brut.directory.DirectoryException; import java.io.*; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -37,10 +38,11 @@ public class ResFileDecoder { this.mDecoders = decoders; } - public void decode(ResResource res, Directory inDir, Directory outDir) + public void decode(ResResource res, Directory inDir, Directory outDir, Map obfFiles) throws AndrolibException { ResFileValue fileValue = (ResFileValue) res.getValue(); + String inFileFullName = fileValue.toString(); String inFileName = fileValue.getStrippedPath(); String outResName = res.getFilePath(); String typeName = res.getResSpec().getType().getName(); @@ -55,6 +57,11 @@ public class ResFileDecoder { outFileName = outResName + ext; } + String outFileFullName = "res/"+outFileName; + if (!inFileFullName.equals(outFileFullName)) { + obfFiles.put(inFileFullName, outFileFullName); + } + try { if (typeName.equals("raw")) { decode(inDir, inFileName, outDir, outFileName, "raw");