├── .gitignore ├── ChangeLog.md ├── SecurityBypasser-latest.apk ├── YokaiWatchWibbleWobble.md ├── app ├── build.gradle ├── libs │ └── XposedBridge-82.jar └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── xposed_init │ ├── java │ └── org │ │ └── nanolx │ │ └── securitybypasser │ │ ├── XposedEntryPoint.java │ │ └── apps │ │ ├── Miitomo.java │ │ ├── YokaiWatchWW.java │ │ └── YokaiWatchWWEU.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ └── ic_launcher.png │ ├── drawable-xxhdpi │ └── ic_launcher.png │ ├── values-v21 │ └── styles.xml │ └── values │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── icon ├── icon.ai └── icon.svg ├── mkrelease ├── patcher ├── apksign ├── apksign.jar ├── apktool ├── apktool.jar ├── delta │ ├── com.level5.ywpeu │ │ ├── 1.0.2 │ │ │ ├── libSGF-armeabi-v7a.delta │ │ │ ├── libSGF-armeabi.delta │ │ │ └── libSGF-x86.delta │ │ ├── 1.0.3 │ │ │ ├── libSGF-armeabi-v7a.delta │ │ │ ├── libSGF-armeabi.delta │ │ │ └── libSGF-x86.delta │ │ ├── 1.0.4 │ │ │ ├── libSGF-armeabi-v7a.delta │ │ │ ├── libSGF-armeabi.delta │ │ │ └── libSGF-x86.delta │ │ └── 2.0.0 │ │ │ ├── libSGF-armeabi-v7a.delta │ │ │ ├── libSGF-armeabi.delta │ │ │ └── libSGF-x86.delta │ └── com.level5.ywwwus │ │ ├── 1.1.1 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 1.2.0 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 1.2.1 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 1.2.2 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.0.0 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.0.1 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.0.2 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.1.0 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.1.1 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.2.0 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ ├── 2.2.1 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta │ │ └── 2.2.2 │ │ ├── libSGF-armeabi-v7a.delta │ │ ├── libSGF-armeabi.delta │ │ └── libSGF-x86.delta ├── framework │ └── 1.apk ├── xdelta3.32 ├── xdelta3.64 └── yokai-patcher ├── readme.md └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /app/build 3 | /.gradle 4 | .idea/ 5 | -------------------------------------------------------------------------------- /ChangeLog.md: -------------------------------------------------------------------------------- 1 | # ChangeLog 2 | 3 | ## 1.5.0 4 | - signed with own key instead of test key 5 | - you'll need to remove the old version before installing the new 6 | - support Miitomo 2.3.0 7 | - Yokai Watch Wibble Wobble (US) 8 | - added delta patches for 9 | - version 2.2.0 10 | - version 2.2.1 11 | - Yokai Watch Wibble Wobble (EU) 12 | - added delta patches for 13 | - version 1.0.3 14 | - version 1.0.4 15 | - version 2.0.0 16 | 17 | ## 1.4.1 18 | - Yokai Watch Wibble Wobble (EU) 19 | - Xposed override added 20 | - added delta patches 21 | - Yokai Watch Wibble Wobble (US) 22 | - added delta patches for 23 | - version 2.1.0 24 | - version 2.1.1 25 | - updated Yokai Watch Wibble Wobble doc 26 | 27 | ## 1.4.0 28 | - support Miitomo 2.2.0 @Nanolx 29 | - Yokai Watch Wibble Wobble (US) Patcher: 30 | - support game version 2.0.2 @Nanolx 31 | 32 | ## 1.3.1 33 | - support Miitomo 2.1.0 @Nanolx 34 | 35 | ## 1.3.0 36 | - support Miitomo 2.0.1 @Nanolx 37 | - support running Puzzles And Dragons (JP) on rooted devices @Nanolx 38 | - Yokai Watch Wibble Wobble (US) Patcher: 39 | - support game versions 1.2.1, 1.2.2 @Nanolx 40 | - support game version 2.0.0 @Cubkyle 41 | - support game version 2.0.1 @Nanolx 42 | 43 | ## 1.2.1 44 | - minor fix in Yokai Watch Wibble Wobble (US) routine override 45 | 46 | ## 1.2.0 47 | - support running Puzzles And Dragons (EN) on rooted devices @Nanolx 48 | - support running Monster Hunter Explore on rooted devices @Nanolx 49 | - support running Yokai Watch Wibble Wobble (US) version 1.2.0 @Nanolx 50 | - drop support for Pokemon Jukebox (service ended 30/06/2016) @Nanolx 51 | - Yokai Watch Wibble Wobble (US) Patcher 1.4.0: 52 | - support game version 1.1.1 53 | - use xdelta3 instead of xdelta 54 | - supply xdelta3 for 32 and 64 bit 55 | - use supplied xdelta3 if not installed 56 | - Yokai Watch Wibble Wobble (US) Patcher 1.4.1: 57 | - name created file Yokai-WWWUS-Root instead of Yokai-Root 58 | - append version of game to generated apk 59 | - remove one useless step during patching 60 | - Yokai Watch Wibble Wobble (US) Patcher 1.4.2: 61 | - support game version 1.2.0 62 | - Work in Progress stuff (not yet or only partially working): 63 | - support running Kingdom Hearts Unchained X in emulator @Nanolx 64 | - should work, but untested 65 | - support running Final Fantasy Brave Exvius in emulator @Nanolx 66 | - should work, when ads are not blocked, but untested 67 | - TODO: support running Final Fantasy Brave Exvius with ads blocked 68 | - support running HIT on rooted devices @Nanolx 69 | - XXX: still long way to go 70 | 71 | ## 1.1.0 72 | - Support for Miitomo 1.3.0 @Nanolx 73 | - Updated Yokai Watch Wibble Wobble patches for version 1.1.0 @Nanolx 74 | - modularize code @midopa 75 | - doc updates @midopa 76 | 77 | ## 1.0.9 78 | @Nanolx 79 | - coding style changes 80 | - support for Amazon Flex 81 | - automated Yokai Watch Wibble Wobble (US) patcher for Linux 82 | - see XDA support thread for more information 83 | - or GitHub repository (file patcher/yokai-patcher) 84 | - improved documentation for Yokai Watch Wibble Wobble (US) patching 85 | - see XDA support thread for more information 86 | - or GitHub repository (file YokaiWatchWibbleWobble) 87 | - add german support thread on WHB 88 | - release management tools 89 | 90 | ## 1.0.8 91 | - minor internal changes 92 | - add support for Pokemon Jukebox 93 | - fix running Miitomo on Emulator 94 | - fix running Yokai Watch Wibble Wobble (US) on Emulator 95 | - minor coding improvements for Yokai Watch Wibble Wobble (US) 96 | 97 | ## 1.0.7 98 | - minor string fix 99 | - minor internal changes 100 | - change ID to org.nanolx.securitybypasser 101 | - add support for Yokai Watch Wibble Wobble (US) 102 | - add libSGF delta patches for Yokai Watch Wibble Wobble 103 | 104 | ## 1.0.6 105 | - new icon (thanks @nonsensninja) 106 | - remove unused stuff from git repo 107 | - minor changes to build process 108 | - change ID to org.nanolx.miitomosecuritybypasser 109 | - more description 110 | 111 | ## 1.0.5 112 | - improve build 113 | - fix Xposed illegal access issues for some users 114 | 115 | ## 1.0.4 116 | - hook into logcat 117 | 118 | ## 1.0.3 119 | @legendt 120 | - update 121 | 122 | ## 1.0.2 123 | @ChrisJosten 124 | - Bugfix release 125 | 126 | ## 1.0.1 127 | @ChrisJosten 128 | - Bugfix release 129 | 130 | ## 1.0.0 131 | @ChrisJosten 132 | - Initial version 133 | -------------------------------------------------------------------------------- /SecurityBypasser-latest.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/SecurityBypasser-latest.apk -------------------------------------------------------------------------------- /YokaiWatchWibbleWobble.md: -------------------------------------------------------------------------------- 1 | Supporting Yokai Watch Wibble Wobble (US/EU) was a rather tricky task 2 | and consists of two parts: 3 | 4 | - Xposed Override: The easy one, Xposed Module overrides checkRoot() and h() 5 | - Modified libSGF: The hard one, we need to remove all references to "su" from the libSGF library 6 | 7 | ## Linux only: Automated modification of the libSGF library 8 | 9 | 1. First download the Wibble Wobble apk file. 10 | 1. You need to have xdelta and zip installed. 11 | 1. Using automated patcher: 12 | - In the directory [patcher](patcher) you'll find the script [yokai-patcher](patcher/yokai-patcher) 13 | - Execute it and give the name of the apk file as argument, for example: 14 | 15 | ./patcher/yokai-patcher --us /home/user/YokaiWatchWibbleWobble.apk 16 | 17 | for the US version, or for the EU version: 18 | 19 | ./patcher/yokai-patcher --eu /home/user/YokaiWatchWibbleWobble.apk 20 | 21 | 1. If everything goes fine, the script will tell you that it succeeded and where 22 | the new Yokai-Root.apk is stored. 23 | 24 | 1. Copy this apk to your device and install it (or install using adb). 25 | 26 | ## All Operating Systems: Manual Methods 27 | 28 | To modify the library there are three ways. 29 | 30 | 1. But first download the Wibble Wobble apk file and extract it, you'll find the library in 31 | 32 | /lib//libSGF.so 33 | 34 | If you encounter issues with apktool, try the supplied one the [patcher](patcher) directory. 35 | 36 | 1. Now do one of the following *A*, *B*, or *C* sub-sections. 37 | 1. After that: 38 | 1. Use the modified library to replace the original one in 39 | 40 | /lib//libSGF.so 41 | 42 | 1. Rebuild the apk file using apktool 43 | 44 | apktool b / 45 | 46 | 1. Open the new apk located in 47 | 48 | /dist/.apk 49 | 50 | 1. With a zip program, copy the 51 | 52 | META-INF/ 53 | 54 | folder from 55 | 56 | /original/ 57 | 58 | into the new apk. 59 | 60 | 1. Copy this apk to your device and install. 61 | 1. Now start Yokai Watch Wibble Wobble on your rooted phone. 62 | 63 | 64 | #### A) Using xdelta patches 65 | In the directory patcher/delta/com.level5.ywwwus you'll find xdelta patches for US version, 66 | in the directory patcher/delta/com.level5.ywpeu you'll find the xdelta patches for EU version 67 | 68 | xdelta3 -d -s -f 69 | 70 | for example with the armeabi libSGF: 71 | 72 | xdelta3 -d -s -f libSGF.so libSGF-armeabi.delta libSGF-mod.so 73 | 74 | with the armeabi-v7a libSGF: 75 | 76 | xdelta3 -d -s -f libSGF.so libSGF-armeabi-v7a.delta libSGF-mod.so 77 | 78 | or with the x86 libSGF: 79 | 80 | xdelta3 -d -s -f libSGF.so libSGF-x86.delta libSGF-mod.so 81 | 82 | afterwards replace the original libSGF.so with libSGF-mod.so 83 | 84 | If xdelta3 is not available on your system, you'll find 32 and 64 bit versions in 85 | the directory [patcher](patcher). 86 | 87 | #### B) Command line editor 88 | Use Vim, Emacs, or whatever text editor you prefer. Simply open the library and 89 | search for all instances of "su" and replace the two letters with something 90 | different like "st". 91 | 92 | **BUT** you must not change the length of the string, else you'll destroy the library. 93 | 94 | **Also** don't change anything where "su" is just part of another word like "result" 95 | or whatever (that should be obvious, but still). 96 | 97 | #### C) Hex editor 98 | Open the library in a hex editor and change the hexcodes for all instances of "su" 99 | and replace the two letters with something different like "st". 100 | 101 | **BUT** you must not change the length of the string, else you'll destroy the library. 102 | 103 | **Also** don't change anything where "su" is just part of another word like "result" 104 | or whatever (that should be obvious, but still). 105 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.3" 6 | 7 | defaultConfig { 8 | applicationId "org.nanolx.securitybypasser" 9 | minSdkVersion 14 10 | targetSdkVersion 25 11 | versionCode 18 12 | versionName "1.5.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt') 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | provided fileTree(dir: 'libs', include: ['*.jar']) 24 | } 25 | -------------------------------------------------------------------------------- /app/libs/XposedBridge-82.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/app/libs/XposedBridge-82.jar -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 14 | 15 | 25 | 26 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/assets/xposed_init: -------------------------------------------------------------------------------- 1 | org.nanolx.securitybypasser.XposedEntryPoint 2 | -------------------------------------------------------------------------------- /app/src/main/java/org/nanolx/securitybypasser/XposedEntryPoint.java: -------------------------------------------------------------------------------- 1 | package org.nanolx.securitybypasser; 2 | 3 | import de.robv.android.xposed.IXposedHookLoadPackage; 4 | import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam; 5 | import org.nanolx.securitybypasser.apps.Miitomo; 6 | import org.nanolx.securitybypasser.apps.YokaiWatchWW; 7 | import org.nanolx.securitybypasser.apps.YokaiWatchWWEU; 8 | 9 | import java.util.HashMap; 10 | import java.util.Locale; 11 | import java.util.Map; 12 | 13 | public class XposedEntryPoint implements IXposedHookLoadPackage 14 | { 15 | /** Map of lower case package names to their respective package hooks. */ 16 | private static Map> appRegistry; 17 | 18 | static 19 | { 20 | // Load up our registry with the hook handlers 21 | // Note: These package names must be lowercase. 22 | appRegistry = new HashMap>(); 23 | appRegistry.put("com.nintendo.zaaa", Miitomo.class); 24 | appRegistry.put("com.level5.ywwwus", YokaiWatchWW.class); 25 | appRegistry.put("com.level5.ywpeu", YokaiWatchWWEU.class); 26 | } 27 | 28 | @Override 29 | public void handleLoadPackage(LoadPackageParam param) throws Throwable 30 | { 31 | // package names are alphanumeric with _'s only. but diff device locales may handle 32 | // lowercase operations differently. be specific and use english. 33 | final String packageLower = param.packageName.toLowerCase(Locale.US); 34 | final Class appHook = appRegistry.get(packageLower); 35 | if (appHook != null) 36 | { 37 | appHook.newInstance().handleLoadPackage(param); 38 | } 39 | 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/org/nanolx/securitybypasser/apps/Miitomo.java: -------------------------------------------------------------------------------- 1 | package org.nanolx.securitybypasser.apps; 2 | 3 | import android.app.Activity; 4 | import de.robv.android.xposed.IXposedHookLoadPackage; 5 | import de.robv.android.xposed.XC_MethodReplacement; 6 | import de.robv.android.xposed.XposedBridge; 7 | import de.robv.android.xposed.XposedHelpers; 8 | import de.robv.android.xposed.callbacks.XC_LoadPackage; 9 | 10 | /** 11 | * Miitomo 12 | */ 13 | public class Miitomo implements IXposedHookLoadPackage 14 | { 15 | @Override 16 | public void handleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable 17 | { 18 | XposedBridge.log("Nanolx Security Bypasser: Entering Miitomo... Ready... Set... GO!"); 19 | XposedHelpers.findAndHookMethod("jp.co.nintendo.SecureController", 20 | param.classLoader, 21 | "ZQ", 22 | new XC_MethodReplacement() 23 | { 24 | @Override 25 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 26 | { 27 | XposedBridge.log("Nanolx Security Bypasser: Nintendo is trying to stop us, but I won't let it happen!"); 28 | XposedBridge.log("Hooked SecureController.ZQ())"); 29 | return null; 30 | } 31 | }); 32 | 33 | XposedHelpers.setStaticBooleanField(XposedHelpers.findClass( 34 | "jp.co.nintendo.android.archdev.BuildConfig", 35 | param.classLoader), 36 | "DEBUG", 37 | true); 38 | 39 | XposedHelpers.findAndHookMethod("jp.co.nintendo.SecureController", 40 | param.classLoader, 41 | "ZR", 42 | new XC_MethodReplacement() 43 | { 44 | @Override 45 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 46 | { 47 | XposedBridge.log("Nanolx Security Bypasser: It's debug time!"); 48 | XposedBridge.log("Set BuildConfig.DEBUG to true)"); 49 | return null; 50 | } 51 | }); 52 | 53 | XposedHelpers.findAndHookMethod("jp.co.nintendo.SecureController", 54 | param.classLoader, 55 | "P", 56 | Activity.class, 57 | new XC_MethodReplacement() 58 | { 59 | @Override 60 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 61 | { 62 | XposedBridge.log("Nanolx Security Bypasser: Nintendo, I'm afraid I can't let you do that..."); 63 | XposedBridge.log("Hooked SecureController.P())"); 64 | return null; 65 | } 66 | }); 67 | 68 | XposedHelpers.findAndHookMethod("jp.co.nintendo.z", 69 | param.classLoader, 70 | "cS", 71 | boolean.class, 72 | new XC_MethodReplacement() 73 | { 74 | @Override 75 | protected Object replaceHookedMethod(MethodHookParam p1) throws Throwable 76 | { 77 | XposedBridge.log("Nanolx Security Bypasser: All you logcat output are belong to us!"); 78 | XposedBridge.log("Trying to catch z.cS(), logcat output should be available now!)"); 79 | return null; 80 | } 81 | }); 82 | 83 | XposedHelpers.findAndHookMethod("jp.co.nintendo.NativeSystem", 84 | param.classLoader, 85 | "nativeAbort", 86 | new XC_MethodReplacement() 87 | { 88 | @Override 89 | protected Object replaceHookedMethod(MethodHookParam p1) throws Throwable 90 | { 91 | XposedBridge.log("Nanolx Security Bypasser: Don't leave mii!"); 92 | XposedBridge.log("(Trying to catch NativeSystem.nativeAbort())"); 93 | return null; 94 | } 95 | }); 96 | 97 | XposedHelpers.findAndHookMethod("jp.co.nintendo.SecureController", 98 | param.classLoader, 99 | "checkEmulator", 100 | new XC_MethodReplacement() 101 | { 102 | @Override 103 | protected Object replaceHookedMethod(MethodHookParam p1) throws Throwable 104 | { 105 | XposedBridge.log("Nanolx Security Bypasser: Mii a emulator? Nope!"); 106 | XposedBridge.log("(Hooked SecureController.checkEmulator())"); 107 | return false; 108 | } 109 | }); 110 | 111 | XposedHelpers.findAndHookMethod("org.cocos2dx.lib.Cocos2dxActivity", 112 | param.classLoader, 113 | "isAndroidEmulator", 114 | new XC_MethodReplacement() 115 | { 116 | @Override 117 | protected Object replaceHookedMethod(MethodHookParam p1) throws Throwable 118 | { 119 | XposedBridge.log("Nanolx Security Bypasser: Mii a emulator? Nope!"); 120 | XposedBridge.log("(Hooked Cocos2dxActivity.isAndroidEmulator())"); 121 | return false; 122 | } 123 | }); 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /app/src/main/java/org/nanolx/securitybypasser/apps/YokaiWatchWW.java: -------------------------------------------------------------------------------- 1 | package org.nanolx.securitybypasser.apps; 2 | 3 | import android.content.Context; 4 | import de.robv.android.xposed.IXposedHookLoadPackage; 5 | import de.robv.android.xposed.XC_MethodReplacement; 6 | import de.robv.android.xposed.XposedBridge; 7 | import de.robv.android.xposed.XposedHelpers; 8 | import de.robv.android.xposed.callbacks.XC_LoadPackage; 9 | 10 | /** 11 | * Yokai Watch Wibble Wobble 12 | */ 13 | public class YokaiWatchWW implements IXposedHookLoadPackage 14 | { 15 | @Override 16 | public void handleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable 17 | { 18 | XposedBridge.log("Nanolx Security Bypasser: Entering Yokai Watch Wibble Wobble (US)... Ready... Set... GO!"); 19 | 20 | XposedHelpers.findAndHookMethod("com.example.sgf.MainActivity", 21 | param.classLoader, 22 | "checkRoot", 23 | new XC_MethodReplacement() 24 | { 25 | @Override 26 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 27 | { 28 | XposedBridge.log("Nanolx Security Bypasser: Level5 is trying to stop us, but I won't let it happen!"); 29 | XposedBridge.log("(Hooked com.example.sgf.MainActivity.checkRoot())"); 30 | return false; 31 | } 32 | }); 33 | 34 | XposedHelpers.findAndHookMethod("com.mparticle.internal.MPUtility", 35 | param.classLoader, 36 | "isPhoneRooted", 37 | new XC_MethodReplacement() 38 | { 39 | @Override 40 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 41 | { 42 | XposedBridge.log("Nanolx Security Bypasser: Hey, don't sniff into /system!"); 43 | XposedBridge.log("(com.mparticle.internal.MPUtility.isPhoneRooted())"); 44 | return false; 45 | } 46 | }); 47 | 48 | XposedHelpers.findAndHookMethod("com.hangame.hsp.util.DeviceInfoUtil", 49 | param.classLoader, 50 | "isRunningOnEmulator", 51 | new XC_MethodReplacement() 52 | { 53 | @Override 54 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 55 | { 56 | XposedBridge.log("Nanolx Security Bypasser: Hey, don't sniff into /system!"); 57 | XposedBridge.log("(com.hangame.hsp.util.DeviceInfoUtil.isRunningOnEmulator())"); 58 | return false; 59 | } 60 | }); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/org/nanolx/securitybypasser/apps/YokaiWatchWWEU.java: -------------------------------------------------------------------------------- 1 | package org.nanolx.securitybypasser.apps; 2 | 3 | import android.content.Context; 4 | import de.robv.android.xposed.IXposedHookLoadPackage; 5 | import de.robv.android.xposed.XC_MethodReplacement; 6 | import de.robv.android.xposed.XposedBridge; 7 | import de.robv.android.xposed.XposedHelpers; 8 | import de.robv.android.xposed.callbacks.XC_LoadPackage; 9 | 10 | /** 11 | * Yokai Watch Wibble Wobble 12 | */ 13 | public class YokaiWatchWWEU implements IXposedHookLoadPackage 14 | { 15 | @Override 16 | public void handleLoadPackage(XC_LoadPackage.LoadPackageParam param) throws Throwable 17 | { 18 | XposedBridge.log("Nanolx Security Bypasser: Entering Yokai Watch Wibble Wobble (EU)... Ready... Set... GO!"); 19 | 20 | XposedHelpers.findAndHookMethod("com.example.sgf.MainActivity", 21 | param.classLoader, 22 | "checkRoot", 23 | new XC_MethodReplacement() 24 | { 25 | @Override 26 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 27 | { 28 | XposedBridge.log("Nanolx Security Bypasser: Level5 is trying to stop us, but I won't let it happen!"); 29 | XposedBridge.log("(Hooked com.example.sgf.MainActivity.checkRoot())"); 30 | return false; 31 | } 32 | }); 33 | 34 | XposedHelpers.findAndHookMethod("com.hangame.hsp.util.DeviceInfoUtil", 35 | param.classLoader, 36 | "isRunningOnEmulator", 37 | new XC_MethodReplacement() 38 | { 39 | @Override 40 | protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 41 | { 42 | XposedBridge.log("Nanolx Security Bypasser: Hey, don't sniff into /system!"); 43 | XposedBridge.log("(com.hangame.hsp.util.DeviceInfoUtil.isRunningOnEmulator())"); 44 | return false; 45 | } 46 | }); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Security Bypasser 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:2.3.3' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | jcenter() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Mar 18 21:36:34 EDT 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /icon/icon.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nanolx/SecurityBypasser/c8ed5e966f3d159efad43b3c4553cda9a9c8b7c0/icon/icon.ai -------------------------------------------------------------------------------- /mkrelease: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | basedir=$(readlink -m ${BASH_SOURCE[0]}) 4 | basedir=$(dirname ${basedir}) 5 | 6 | version=1.1 7 | reldate=2017/09/23 8 | 9 | build_opt=${basedir}/app/build.gradle 10 | build_apk=${basedir}/app/build/outputs/apk/app-release-unsigned.apk 11 | 12 | _error () { 13 | echo "${1}" 14 | exit 1 15 | } 16 | 17 | _bump_version () { 18 | 19 | tmp=$(gawk '/versionCode/{print $2}' ${build_opt}) 20 | versionCode=$((tmp+1)) 21 | 22 | versionName=${1} 23 | 24 | sed -e "s/versionCode .*/versionCode ${versionCode}/g" -i ${build_opt} 25 | sed -e "s/versionName .*/versionName \"${versionName}\"/g" -i ${build_opt} 26 | 27 | } 28 | 29 | _build_apk () { 30 | ${basedir}/gradlew build || _error "building Security Bypasser failed!" 31 | } 32 | 33 | _sign_apk () { 34 | if [[ ! -f ${build_apk} ]]; then 35 | _error "run mkrelease --build first!" 36 | else signapk ${build_apk} ${basedir}/SecurityBypasser-latest.apk \ 37 | || _error "signing Security Bypasser failed!" 38 | fi 39 | } 40 | 41 | _clean () { 42 | ${basedir}/gradlew clean || _error "cleaning up build directory failed!" 43 | rm -rf ${basedir}/build 44 | } 45 | 46 | case ${1} in 47 | *version) 48 | _bump_version ${2} 49 | ;; 50 | 51 | *build) 52 | _build_apk 53 | _sign_apk 54 | _clean 55 | echo -e "\nnew apk is:\t${basedir}/SecurityBypasser-latest.apk" 56 | ;; 57 | 58 | *sign) 59 | _sign_apk 60 | ;; 61 | 62 | *clean) 63 | _clean 64 | ;; 65 | 66 | *) 67 | echo -e "Nanolx Security Bypasser mkrelease 68 | 69 | version ${version} (${reldate}) 70 | usage: 71 | mkrelease