The Magic Mask for Android
Go to file
topjohnwu 44395e8ff0 Fix root loss issue when MagiskHide is enabled
In previous implementations, proc_monitor checks whether the mount namespace of an app is actually separated from zygote using a list generated at startup.
However, for some unknown reason, some devices (e.g. Samsung) has multiple zygote servers running in the background.
This means that app processes spawned from the unlisted zygotes are not checked whether the separation is done or not, causing MagiskHide unmount stuffs in the namespace of zygote, and since zygote is the "mother" of all apps, all apps will no longer have root access.

Since I'm not sure of the reason why multiple zygotes exists, so instead of checking the namespace against a list, compare the current namespace against the parent process's namespace.
This will make sure the namespace is NOT the same as the parent process, which is supposed to be the zygote server.
2018-06-20 04:55:34 +08:00
app@77430a282f Update default flag logic, fix S9/S9+ DTB patches 2018-06-18 01:40:56 +08:00
chromeos Massive build script refactor 2017-06-03 20:31:02 +08:00
docs tips.md Grammar Fix 2018-03-18 12:16:57 +08:00
gradle/wrapper Update Gradle wrapper to 4.6 2018-04-22 03:09:02 +08:00
native Fix root loss issue when MagiskHide is enabled 2018-06-20 04:55:34 +08:00
scripts Update default flag logic, fix S9/S9+ DTB patches 2018-06-18 01:40:56 +08:00
snet Update SafetyNet extension implementation 2018-06-10 02:35:03 +08:00
utils Allow file constructed JarMap getOutputStream 2018-06-12 02:57:46 +08:00
.gitattributes Build everything ourselves 2017-08-24 12:14:17 +08:00
.gitignore Update SafetyNet extension implementation 2018-06-10 02:35:03 +08:00
.gitmodules Add Protobuf support to resetprop 2018-04-29 01:20:48 +08:00
build.gradle Push to SDK 28 2018-06-09 15:47:16 +08:00
build.py Bundle in stub APK into magiskinit 2018-06-14 02:54:38 +08:00
config.prop.sample Add key alias option to config.prop 2018-05-27 14:59:08 +08:00
gradle.properties Disable config ondemand when using Gradle > 4.6 2018-05-26 17:35:02 +08:00
gradlew Update Gradle wrapper to 4.6 2018-04-22 03:09:02 +08:00
gradlew.bat Update Gradle wrapper to 4.6 2018-04-22 03:09:02 +08:00
LICENSE Use GPL v3 license and update copyright messages 2017-04-22 17:12:54 +08:00
README.MD Update SafetyNet extension implementation 2018-06-10 02:35:03 +08:00
settings.gradle Rename module core to native 2018-01-27 09:11:28 +08:00

Magisk

Building Environment Requirements

  1. Python 3.5+: run build.py script
  2. Java Development Kit (JDK) 8: Compile Magisk Manager and sign zips
  3. Latest Android SDK: set ANDROID_HOME environment variable to the path to Android SDK
  4. Android NDK: Install NDK along with SDK ($ANDROID_HOME/ndk-bundle), or optionally specify a custom path ANDROID_NDK
  5. (Windows Only) Python package Colorama: Install with pip install colorama, used for ANSI color codes

Building Notes and Instructions

  1. Building is tested on macOS, Ubuntu, and Windows 10 using the latest stable NDK and NDK r10e. Officially released binaries were built with NDK r10e.
  2. Set configurations in config.prop. A sample file config.prop.sample is provided as an example.
  3. Run build.py with argument -h to see the built-in help message. The -h option also works for each supported actions, e.g. ./build.py binary -h
  4. By default, build.py build binaries and Magisk Manager in debug mode. If you want to build Magisk Manager in release mode (via the --release flag), you need a Java Keystore file release-key.jks to sign Magisk Manager's APK. For more information, check out Google's Official Documentation.
  5. The SafetyNet extension pack requires the full Magisk Manager as a compileOnly dependency. Build the release APK, convert it back to Java .class files (I use dex2jar), and place the converted JAR under snet/libs before compiling.

License

Magisk, including all git submodules are free software:
you can redistribute it and/or modify it under the terms of the 
GNU General Public License as published by the Free Software Foundation, 
either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Credits

MagiskManager (app)

  • Copyright 2016-2018, John Wu (@topjohnwu)
  • All contributors and translators on Github

MagiskSU (native/jni/su)

  • Copyright 2016-2018, John Wu (@topjohnwu)
  • Copyright 2015, Pierre-Hugues Husson (phh@phh.me)
  • Copyright 2013, Koushik Dutta (@koush)
  • Copyright 2010, Adam Shanks (@ChainsDD)
  • Copyright 2008, Zinx Verituse (@zinxv)

MagiskPolicy (native/jni/magiskpolicy)

  • Copyright 2016-2018, John Wu (@topjohnwu)
  • Copyright 2015, Pierre-Hugues Husson (phh@phh.me)
  • Copyright 2015, Joshua Brindle (@joshua_brindle)

MagiskHide (native/jni/magiskhide)

  • Copyright 2016-2018, John Wu (@topjohnwu)
  • Copyright 2016, Pierre-Hugues Husson (phh@phh.me)

resetprop (native/jni/resetprop)

  • Copyright 2016-2018 John Wu (@topjohnwu)
  • Copyright 2016 nkk71 (nkk71x@gmail.com)

External Dependencies (native/jni/external)

  • Makefile for busybox, generated by ndk-busybox-kitchen
  • Each dependencies has its own license/copyright information in each subdirectory.
    All of them are either GPL or GPL compatible.

Others Not Mentioned

  • Copyright 2016-2018, John Wu (@topjohnwu)