From ea2c821fa599ee46a8e71fa68c334892705466a4 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Thu, 10 Mar 2016 09:29:49 -0500 Subject: [PATCH] Add support for AndResGuard - fixes #1170 --- .../src/main/java/brut/androlib/Androlib.java | 2 +- .../brut/androlib/res/AndrolibResources.java | 5 +- .../androlib/res/data/value/ResFileValue.java | 10 +-- .../res/data/value/ResValueFactory.java | 3 + .../java/brut/androlib/AndResGuardTest.java | 66 ++++++++++++++++++ .../brut/apktool/issue1170/issue1170.apk | Bin 0 -> 31019 bytes 6 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 brut.apktool/apktool-lib/src/test/java/brut/androlib/AndResGuardTest.java create mode 100644 brut.apktool/apktool-lib/src/test/resources/brut/apktool/issue1170/issue1170.apk 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 56794ea3..f11ba5d5 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 @@ -708,7 +708,7 @@ public class Androlib { private final static String[] APK_MANIFEST_FILENAMES = new String[] { "AndroidManifest.xml" }; private final static String[] APK_STANDARD_ALL_FILENAMES = new String[] { - "classes.dex", "AndroidManifest.xml", "resources.arsc", "res", "lib", "libs", "assets", "META-INF" }; + "classes.dex", "AndroidManifest.xml", "resources.arsc", "res", "r", "lib", "libs", "assets", "META-INF" }; // Taken from AOSP's frameworks/base/tools/aapt/Package.cpp private final static Pattern NO_COMPRESS_PATTERN = Pattern.compile("\\.(" + "jpg|jpeg|png|gif|wav|mp2|mp3|ogg|aac|mpg|mpeg|mid|midi|smf|jet|rtttl|imy|xmf|mp4|" + 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 6abfd5d8..9f69936f 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 @@ -239,10 +239,13 @@ final public class AndrolibResources { out = new FileDirectory(outDir); inApk = apkFile.getDirectory(); + out = out.createDir("res"); if (inApk.containsDir("res")) { in = inApk.getDir("res"); } - out = out.createDir("res"); + if (in == null && inApk.containsDir("r")) { + in = inApk.getDir("r"); + } } catch (DirectoryException ex) { throw new AndrolibException(ex); } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFileValue.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFileValue.java index c11c68f5..07edbbdc 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFileValue.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResFileValue.java @@ -34,11 +34,13 @@ public class ResFileValue extends ResIntBasedValue { } public String getStrippedPath() throws AndrolibException { - if (!mPath.startsWith("res/")) { - throw new AndrolibException( - "File path does not start with \"res/\": " + mPath); + if (mPath.startsWith("res/")) { + return mPath.substring(4); } - return mPath.substring(4); + if (mPath.startsWith("r/")) { + return mPath.substring(2); + } + throw new AndrolibException("File path does not start with \"res/\" or \"r/\": " + mPath); } @Override diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java index 672ff832..572042c8 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java @@ -70,6 +70,9 @@ public class ResValueFactory { if (value.startsWith("res/")) { return new ResFileValue(value, rawValue); } + if (value.startsWith("r/")) { //AndroResGuard + return new ResFileValue(value, rawValue); + } return new ResStringValue(value, rawValue); } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/AndResGuardTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/AndResGuardTest.java new file mode 100644 index 00000000..2b1f1452 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/AndResGuardTest.java @@ -0,0 +1,66 @@ +/** + * Copyright 2014 Ryszard Wiśniewski + * Copyright 2014 Connor Tumbleson + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package brut.androlib; + +import brut.androlib.res.util.ExtFile; +import brut.common.BrutException; +import brut.util.OS; +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; + +import org.junit.*; +import static org.junit.Assert.*; + +public class AndResGuardTest { + + @BeforeClass + public static void beforeClass() throws Exception, BrutException { + sTmpDir = new ExtFile(OS.createTempDirectory()); + TestUtils.copyResourceDir(LargeIntsInManifestTest.class, "brut/apktool/issue1170/", sTmpDir); + } + + @AfterClass + public static void afterClass() throws BrutException { + OS.rmdir(sTmpDir); + } + + @Test + public void checkifAndResDecodeRemapsRFolder() throws BrutException, IOException { + String apk = "issue1170.apk"; + + // decode issue1170.apk + ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk)); + sTestOrigDir = new ExtFile(sTmpDir + File.separator + apk + ".out"); + + apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out")); + apkDecoder.decode(); + + checkFileExists("res/mipmap-hdpi-v4/a.png"); + } + + private void checkFileExists(String path) throws BrutException { + File f = new File(sTestOrigDir, path); + + assertTrue(f.isFile()); + } + + private static ExtFile sTmpDir; + private static ExtFile sTestOrigDir; + + private final static Logger LOGGER = Logger.getLogger(BuildAndDecodeTest.class.getName()); +} diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/issue1170/issue1170.apk b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/issue1170/issue1170.apk new file mode 100644 index 0000000000000000000000000000000000000000..ca2576a4cd75db773675911ccb059afd4f1a14bd GIT binary patch literal 31019 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 Q_YT12=V?Le_~+OE0SgO}KmY&$ literal 0 HcmV?d00001