Created
October 8, 2019 23:16
-
-
Save d4rken/0848c64f93f91ea38370ac324232d49b to your computer and use it in GitHub Desktop.
https://www.reddit.com/r/androiddev/comments/deyz14/apparently_you_can_destroy_hidden_api_blacklist/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* We need to go deeper! | |
*/ | |
public static void doHorribleHack() { | |
try { | |
try { | |
Class<?> testCls = Class.forName("dalvik.system.VMRuntime"); | |
Method method = testCls.getDeclaredMethod("setHiddenApiExemptions", String[].class); | |
} catch (Exception ex) { | |
// This will fail | |
ex.printStackTrace(); | |
} | |
Method forName = Class.class.getDeclaredMethod("forName", String.class); | |
Method getDeclaredMethod = Class.class.getDeclaredMethod("getDeclaredMethod", String.class, Class[].class); | |
Class<?> vmRuntimeClass = (Class<?>) forName.invoke(null, "dalvik.system.VMRuntime"); | |
Method getRuntimeMethod = (Method) getDeclaredMethod.invoke(vmRuntimeClass, "getRuntime", null); | |
Method setHiddenApiExemptions = (Method) getDeclaredMethod.invoke(vmRuntimeClass, "setHiddenApiExemptions", new Class[]{String[].class}); | |
if (getRuntimeMethod != null && setHiddenApiExemptions != null) { | |
Object vmRuntime = getRuntimeMethod.invoke(null); | |
setHiddenApiExemptions.invoke(vmRuntime, (Object) new String[]{"L"}); | |
} | |
try { | |
Class<?> testCls = Class.forName("dalvik.system.VMRuntime"); | |
Method method = testCls.getDeclaredMethod("setHiddenApiExemptions", String[].class); | |
} catch (Exception ex) { | |
// This will not | |
ex.printStackTrace(); | |
} | |
} catch (Exception ex) { | |
ex.printStackTrace(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment