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 8630d1d0..15874860 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 @@ -30,6 +30,7 @@ import brut.directory.*; import brut.util.BrutIO; import brut.util.OS; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -258,7 +259,11 @@ public class Androlib { InputStream in = appDir.getDirectory().getFileInput("apktool.yml") ) { Yaml yaml = new Yaml(); - return (Map) yaml.load(in); + Map result = (Map) yaml.load(in); + if (result.containsKey("unknownFiles")) { + result.put("unknownFiles", getUnknownFiles(result)); + } + return result; } catch (DirectoryException | IOException ex) { throw new AndrolibException(ex); } @@ -737,6 +742,15 @@ public class Androlib { return files; } + private static Map getUnknownFiles(Map meta) { + Map unknownFiles = (Map) meta.get("unknownFiles"); + Map result = new LinkedHashMap<>(); + for (Map.Entry entry : unknownFiles.entrySet()) { + result.put(new String(entry.getKey(), StandardCharsets.UTF_8), entry.getValue()); + } + return result; + } + private final static Logger LOGGER = Logger.getLogger(Androlib.class.getName()); private final static String SMALI_DIRNAME = "smali"; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index 0e6c424c..03febf48 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -377,7 +377,7 @@ public class ApkDecoder { } private void putUnknownInfo(Map meta) throws AndrolibException { - Map info = mAndrolib.mResUnknownFiles.getUnknownFiles(); + Map info = mAndrolib.mResUnknownFiles.getUnknownFiles(); if (info.size() > 0) { meta.put("unknownFiles", info); } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResUnknownFiles.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResUnknownFiles.java index a337c1a2..5d6f79f2 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResUnknownFiles.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResUnknownFiles.java @@ -15,6 +15,7 @@ */ package brut.androlib.res.data; +import java.nio.charset.StandardCharsets; import java.util.LinkedHashMap; import java.util.Map; @@ -23,13 +24,13 @@ import java.util.Map; */ public class ResUnknownFiles { - private final Map mUnknownFiles = new LinkedHashMap(); + private final Map mUnknownFiles = new LinkedHashMap(); public void addUnknownFileInfo(String file, String value) { - mUnknownFiles.put(file,value); + mUnknownFiles.put(file.getBytes(StandardCharsets.UTF_8), value); } - public Map getUnknownFiles() { + public Map getUnknownFiles() { return mUnknownFiles; } } diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml index 2098ee8d..f6c21e0e 100644 --- a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml @@ -11,7 +11,8 @@ versionInfo: versionName: '1.0' compressionType: false unknownFiles: - hidden.file: '8' - stored.file: '0' - unk_folder/unknown_file: '8' - lib_bug603/bug603: '8' \ No newline at end of file + !!binary "aGlkZGVuLmZpbGU=": '8' + !!binary "bm9uf3ByaW50YWJsZS5maWxl": '8' + !!binary "c3RvcmVkLmZpbGU=": '0' + !!binary "dW5rX2ZvbGRlci91bmtub3duX2ZpbGU=": '8' + !!binary "bGliX2J1ZzYwMy9idWc2MDM=": '8' \ No newline at end of file diff --git "a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/unknown/non\177printable.file" "b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/unknown/non\177printable.file" new file mode 100644 index 00000000..e4a49202 --- /dev/null +++ "b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/unknown/non\177printable.file" @@ -0,0 +1 @@ +This file's name contains a non-printable character. \ No newline at end of file