The Magic Mask for Android
Go to file
topjohnwu b1afd554fc Application Component Granularity MagiskHide
Before switching to the new MagiskHide implementation (APK inotify),
logcat parsing provides us lots of information to target a process.
We were targeting components so that apps with multi-processes
can still be hidden properly.

After switching to the new implementation, our granularity is limited
to the UID of the process. This is especially dangerous since Android
allow apps signed with the same signature to share UIDs, and many system
apps utilize this for elevated permissions for some services.

This commit introduces process name matching. We could not blanketly
target an UID, so the workaround is to verify its process name before
unmounting.

The tricky thing is that any app developer is allowed to name the
process of its component to whatever they want; there is no 'one
rule to catch them all' to target a specific package. As a result,
Magisk Manager is updated to scan through all components of all apps,
and show different processes of the same app, each as a separate
hide target in the list.

The hide target database also has to be updated accordingly.
Each hide target is now a <package name, process name> pair. The
magiskhide CLI and Magisk Manager is updated to support this new
target format.
2019-03-01 17:08:08 -05:00
app Application Component Granularity MagiskHide 2019-03-01 17:08:08 -05:00
app-core Application Component Granularity MagiskHide 2019-03-01 17:08:08 -05:00
chromeos Massive build script refactor 2017-06-03 20:31:02 +08:00
docs Update newline in docs 2019-02-03 23:48:20 -05:00
gradle/wrapper Update Android Studio 2019-01-14 14:41:07 -05:00
native Application Component Granularity MagiskHide 2019-03-01 17:08:08 -05:00
net Don't show progress if content length is unavailable 2019-01-18 16:28:12 -05:00
scripts Support A only System-as-root Devices 2019-02-28 05:46:36 -05:00
signing Full project restructuring 2019-01-30 03:10:12 -05:00
snet Full project restructuring 2019-01-30 03:10:12 -05:00
.gitattributes Build everything ourselves 2017-08-24 12:14:17 +08:00
.gitignore Add personal update script to gitignore 2018-11-04 04:16:11 -05:00
.gitmodules Remove magiskpolicy as submodule 2018-07-18 18:43:36 +08:00
build.gradle Remove SDK 16 support completely 2019-02-12 16:58:05 -05:00
build.py Welcome to the 64 bit world! 2019-02-24 08:13:27 -05:00
config.prop.sample Read props directly in Gradle 2018-08-20 12:02:38 +08:00
gradle.properties Migrate to AndroidX support library 2018-09-10 02:27:45 -04: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 Misc Formatting 2019-02-11 03:18:15 -05:00
settings.gradle Full project restructuring 2019-01-30 03:10:12 -05:00

Magisk

Downloads | Documentation | XDA Thread

Introduction

Magisk is a suite of open source tools for customizing Android, supporting devices higher than Android 4.2 (API 17). It covers the fundamental parts for Android customization: root, boot scripts, SELinux patches, AVB2.0 / dm-verity / forceencrypt removals etc.

Furthermore, Magisk provides a Systemless Interface to alter the system (or vendor) arbitrarily while the actual partitions stay completely intact. With its systemless nature along with several other hacks, Magisk can hide modifications from nearly any system integrity verifications used in banking apps, corporation monitoring apps, game cheat detections, and most importantly Google's SafetyNet API.

Bug Reports

Make sure to install the latest Canary Build before reporting any bugs! DO NOT report bugs that is already fixed upstream. Follow the instructions in the Canary Channel XDA Thread, and report a bug either by opening an issue on GitHub or directly in the thread.

Building Environment Requirements

  1. Python 3: 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_HOME
  5. (Windows Only) Python package Colorama: Install with pip install colorama, used for ANSI color codes

Building Notes and Instructions

  1. Clone sources with submodules: git clone --recurse-submodules https://github.com/topjohnwu/Magisk.git
  2. Building is supported on macOS, Linux, and Windows. Official releases are built and tested with FrankeNDK; point ANDROID_NDK_HOME to FrankeNDK if you want to use it for compiling.
  3. Set configurations in config.prop. A sample file config.prop.sample is provided as an example.
  4. 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
  5. By default, build.py build binaries and Magisk Manager in debug mode. If you want to build Magisk Manager in release mode (via the -r, --release flag), you need a Java Keystore file release-key.jks (only JKS format is supported) to sign APKs and zips. For more information, check out Google's Official Documentation.

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/>.