Commit Graph

346 Commits

Author SHA1 Message Date
e8ba671fc2 Guard all injection features behind a global flag 2021-01-13 20:07:23 -08:00
9a28dd4f6e Implement MagiskHide through code injection 2021-01-12 03:28:00 -08:00
d2acd59ea8 Minor code refactoring 2021-01-12 00:07:48 -08:00
eb21c8b42e Code cleanups 2021-01-11 02:19:10 -08:00
4060c2107c Add preliminary zygote code injection support
Prototyping the injection setup and a clean "self unloading" mechanism.
2021-01-06 22:21:17 -08:00
f9bde347bc Convert indentation to spaces
The tab war is lost
2020-12-30 22:11:24 -08:00
eee7f097e3 Make post-fs-data scripts block at most 35 secs 2020-12-17 16:54:53 -08:00
086059ec30 Make sure boot stages are mutually exclusive 2020-12-15 03:40:37 -08:00
7ff22c68c7 Only try to install APK when no manager is active 2020-12-09 02:15:16 -08:00
0c28b23224 Fix install_module command 2020-12-09 00:37:15 -08:00
c62dfc1bcc Make logging less error prone 2020-12-06 23:09:24 -08:00
dead74801d Setup log file when manually starting daemon 2020-12-04 01:07:47 -08:00
ab207a1bb3 va_list cannot be reused on x86 2020-12-03 20:53:19 -08:00
f152e8c33d Directly log to log file 2020-12-03 20:15:18 -08:00
797ba4fbf4 Make sure all logging ends with newline 2020-12-02 00:55:22 -08:00
f9c7a4c933 Redirect /data/adb/magisk/busybox
Workaround some stupid Samsung kernel restrictions
2020-11-11 02:26:07 -08:00
afebe734b8 Fix several things regarding scripting 2020-11-07 14:36:13 -08:00
e21a78164e Properly handle factory resets
Close #3345
2020-11-04 04:50:04 -08:00
89fff4830b Mount proper system_root mirror in magiskd 2020-11-03 00:37:08 -08:00
16e4c67992 Significantly broaden sepolicy.rule compatibility
Previously, Magisk uses persist or cache for storing modules' custom
sepolicy rules. In this commit, we significantly broaden its
compatibility and also prevent mounting errors.

The persist partition is non-standard and also critical for Snapdragon
devices, so we prefer not to use it by default.

We will go through the following logic to find the best suitable
non-volatile, writable location to store and load sepolicy.rule files:

Unencrypted data -> FBE data unencrypted dir -> cache -> metadata -> persist

This should cover almost all possible cases: very old devices have
cache partitions; newer devices will use FBE; latest devices will use
metadata FBE (which guarantees a metadata parition); and finally,
all Snapdragon devices have the persist partition (as a last resort).

Fix #3179
2020-11-02 23:20:38 -08:00
5b8a1fc2a7 Minor renames 2020-10-25 21:41:14 -07:00
872c55207c Add com.android.i18n to apex path 2020-10-12 01:59:41 -07:00
d625beb7f3 Update --remove-modules implementation 2020-10-11 18:30:03 -07:00
6abd9aa8a4 Add new --install-module command
Close #2253
2020-09-26 16:50:41 -07:00
434efec860 Use FIFO for su request communication
Fix #3159
2020-09-10 00:38:29 -07:00
fee4031d0f Keep disable file when module update 2020-08-08 05:19:41 -07:00
7fc9b908d4 Update Android 11 emulator support 2020-07-27 03:33:11 -07:00
97b72a5941 Revert to old SElinux rules on pre 8.0 devices
Fix #2910
2020-07-06 01:13:50 -07:00
43146b8316 Update su request process
Due to changes in ec3705f2ed, the app can
no longer communicate with the dameon through a socket opened on the
daemon side due to SELinux restrictions. The workaround here is to have
the daemon decide a socket name, send it to the app, have the app create
the socket server, then finally the daemon connects to the app through
the socket.
2020-06-19 03:52:25 -07:00
44895a86b8 Fix compilation of single applets 2020-06-19 02:45:57 -07:00
1e2f776b83 Move logging.hpp 2020-06-17 01:17:28 -07:00
ec3705f2ed Redesign of MagiskSU's sepolicy model
Introduce new domain `magisk_client` and new file type `magisk_exec`.

Connection to magiskd's always-on socket is restricted to magisk_client
only. Whitelisted process domains can transit to magisk_client through
executing files labelled magisk_exec. The main magisk binary shall be
the only file labelled as magisk_exec throughout the whole system.
All processes thus are no longer allowed to connect to magiskd directly
without going through the proper magisk binary.

Connection failures are silenced from audit logs with dontaudit rules,
so crazy processes which traverse through all unix domain sockets to try
connection can no longer check logcat to know the actual reason behind
EACCES, leaking the denied process policy (which is u:r:magisk:s0).

This also allows us to remove many rules that open up holes in
untrusted_app domains that were used to make remote shell work properly.
Since all processes establishing the remote shell are now restricted to
the magisk_client domain, all these rules are moved to magisk_client.
This makes Magisk require fewer compromises in Android's security model.

Note: as of this commit, requesting new root access via Magisk Manager
will stop working as Magisk Manager can no longer communicate with
magiskd directly. This will be addressed in a future commit that
involves changes in both native and application side.
2020-06-03 23:29:42 -07:00
cb7148a24c Switch to debug logging in modules 2020-06-01 04:22:57 -07:00
2f824f59dc Better logging system
Use C++ magic to strip out debug logs at compile time
2020-06-01 04:15:37 -07:00
e02e46d0fc Detect volume down key combo for safe mode
It is possible that a module is breaking the device so bad that zygote
cannot even be started. In this case, system_server cannot start and
detect the safe mode key combo, set the persist property, and reboot.

Also on old Android versions, the system directly goes to safe mode
after detecting a key combo without rebooting, defeating the purpose of
Magisk's safe mode protection if we only check for the persist property.

Directly adding key combo check natively in magiskd allows us to enter
Magisk safe mode before the system is even aware of it.
2020-05-19 04:57:47 -07:00
fc1844b4df Update policy for handling /data/adb 2020-05-18 23:29:26 -07:00
4497e0aaca Don't expose module_list 2020-05-18 05:36:02 -07:00
c3e045e367 Use daemon state to determine late prop hiding 2020-05-18 05:21:47 -07:00
501d3e6c32 Maintain global daemon status 2020-05-18 05:18:49 -07:00
b27b9c1d18 Minor code changes 2020-05-18 04:56:51 -07:00
dbdb0a2560 Move late props to boot complete 2020-05-18 03:51:41 -07:00
97db49a57b Move vendor property manipulation to late start 2020-05-17 15:01:37 -07:00
aac6ad73da Fix collect modules 2020-05-16 13:45:22 -07:00
122b4d66b6 Move Android logging out of libutils 2020-05-10 00:48:41 -07:00
0f8f4e361b Update collect log logic 2020-05-10 00:30:11 -07:00
c6569ce022 Fix service scripts 2020-05-09 04:40:05 -07:00
a62bdc58cb Use env variables to enable standalone mode 2020-05-08 04:09:58 -07:00
a5d7c41d20 Support Safe Mode detection
When detecting device is booting as Safe Mode, disable all modules and
MagiskHide and skip all operations. The only thing that'll be available
in this state is root (Magisk Manager will also be disabled by system).

Since the next normal boot will also have all modules disabled, this can
be used to rescue a device in the case when a rogue module causes
bootloop and no custom recovery is available (or recoveries without
the ability to decrypt data).
2020-05-08 00:45:11 -07:00
5fd574a14f Fix --remove-modules command 2020-04-30 01:27:48 -07:00
15f155100c Rewrite skel_node mounting and construction logic
Close #2725
2020-04-24 02:07:46 -07:00