From 52482802dc2b0ed51eb98671d414d431024c18a6 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sun, 28 Dec 2014 15:03:02 -0800 Subject: [PATCH] Make the checkPackagePrivateAccess functionality an option This is only needed for 4.2.0, but not 4.2.1. Both are api 17, so we can't tie this functionality to an api level. --- .../src/main/java/org/jf/baksmali/main.java | 14 ++++++++++---- .../java/org/jf/dexlib2/analysis/ClassPath.java | 2 +- .../java/org/jf/dexlib2/analysis/ClassProto.java | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/main.java b/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/main.java index 0d570b57..4161ff44 100644 --- a/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/main.java +++ b/brut.apktool.smali/baksmali/src/main/java/org/jf/baksmali/main.java @@ -211,6 +211,9 @@ public class main { case 'e': options.dexEntry = commandLine.getOptionValue("e"); break; + case 'k': + options.checkPackagePrivateAccess = true; + break; case 'N': disassemble = false; break; @@ -241,10 +244,6 @@ public class main { } } - if (options.apiLevel == 17) { - options.checkPackagePrivateAccess = true; - } - String inputDexFileName = remainingArgs[0]; File dexFileFile = new File(inputDexFileName); @@ -430,6 +429,12 @@ public class main { .withDescription("Don't use implicit (type-less) method and field references") .create("t"); + Option checkPackagePrivateAccessOption = OptionBuilder.withLongOpt("check-package-private-access") + .withDescription("When deodexing, use the package-private access check when calculating vtable " + + "indexes. It should only be needed for 4.2.0 odexes. The functionality was reverted for " + + "4.2.1.") + .create("k"); + Option dumpOption = OptionBuilder.withLongOpt("dump-to") .withDescription("dumps the given dex file into a single annotated dump file named FILE" + " (.dump by default), along with the normal disassembly") @@ -477,6 +482,7 @@ public class main { basicOptions.addOption(resourceIdFilesOption); basicOptions.addOption(noImplicitReferencesOption); basicOptions.addOption(dexEntryOption); + basicOptions.addOption(checkPackagePrivateAccessOption); debugOptions.addOption(dumpOption); debugOptions.addOption(ignoreErrorsOption); diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java index bd5f4378..854f24c9 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassPath.java @@ -164,7 +164,7 @@ public class ClassPath { return unknownClass; } - public boolean needCheckPackagePrivateAccess() { + public boolean shouldCheckPackagePrivateAccess() { return checkPackagePrivateAccess; } diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java index 350a741e..e513f23d 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/analysis/ClassProto.java @@ -628,7 +628,7 @@ public class ClassProto implements TypeProto { for (int i=0; i