Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
aa54ef10
Commit
aa54ef10
authored
Oct 06, 2016
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Magisk Hide: Unmount everything
parent
14946da1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
109 additions
and
59 deletions
+109
-59
README.MD
README.MD
+0
-1
magiskhide.c
jni/magiskhide.c
+78
-44
magiskhide
zip_static/arm/magiskhide
+0
-0
magic_mask.sh
zip_static/common/magic_mask.sh
+31
-14
magiskhide
zip_static/x86/magiskhide
+0
-0
No files found.
README.MD
View file @
aa54ef10
# Magisk
Static binaries included:
*
Busybox: http://forum.xda-developers.com/android/software-hacking/tool-busybox-flashable-archs-t3348543
*
Open source su binary: https://github.com/seSuperuser/Superuser
jni/magiskhide.c
View file @
aa54ef10
...
...
@@ -17,9 +17,13 @@ typedef unsigned short int sa_family_t;
#include <sys/resource.h>
#include <unistd.h>
#include <sys/mount.h>
#include <sys/inotify.h>
#define HIDE_LIST "/magisk/.core/hidelist"
#define HIDE_LIST "/magisk/.core/magiskhide/hidelist"
#define MOUNT_LIST "/dev/mountlist"
int
hide_size
=
0
,
mount_size
=
0
;
char
**
hide_list
,
**
mount_list
;
time_t
last_update
=
0
;
//WARNING: Calling this will change our current namespace
//We don't care because we don't want to run from here anyway
...
...
@@ -33,74 +37,97 @@ int hideMagisk(int pid) {
int
res
=
syscall
(
SYS_setns
,
fd
,
0
);
if
(
res
==
-
1
)
return
3
;
res
=
mount
(
"/magisk/.core/mirror/system"
,
"/system"
,
"bind"
,
MS_BIND
,
""
);
if
(
res
==
-
1
)
return
4
;
int
i
;
for
(
i
=
mount_size
-
1
;
i
>=
0
;
--
i
)
{
res
=
umount2
(
mount_list
[
i
],
MNT_DETACH
);
if
(
res
!=
-
1
)
printf
(
"Unmounted: %s
\n
"
,
mount_list
[
i
]);
else
printf
(
"Failed: %s
\n
"
,
mount_list
[
i
]);
}
res
=
umount2
(
"/magisk"
,
MNT_DETACH
);
if
(
res
==
-
1
)
return
4
;
if
(
res
!=
-
1
)
printf
(
"Unmounted: %s
\n
"
,
"/magisk"
);
else
printf
(
"Failed: %s
\n
"
,
"/magisk"
);
return
0
;
}
int
loadList
(
int
fd
,
char
***
list
,
int
*
line
,
time_t
*
last_update
)
{
int
allocated
=
16
,
i
;
char
*
buffer
,
*
tok
;
struct
stat
file_stat
;
fstat
(
fd
,
&
file_stat
);
if
(
file_stat
.
st_mtime
==
*
last_update
)
{
return
0
;
}
char
**
file_to_str_arr
(
const
int
fd
,
int
*
size
)
{
int
allocated
=
16
;
char
*
buffer
,
*
tok
,
**
array
;
off_t
filesize
=
lseek
(
fd
,
0
,
SEEK_END
);
lseek
(
fd
,
0
,
SEEK_SET
);
buffer
=
malloc
(
sizeof
(
char
)
*
filesize
);
lseek
(
fd
,
0
,
SEEK_SET
);
read
(
fd
,
buffer
,
filesize
);
fstat
(
fd
,
&
file_stat
);
*
last_update
=
file_stat
.
st_mtime
;
// Free memory
for
(;
*
line
>=
0
;
--
(
*
line
))
free
((
*
list
)[
*
line
]);
*
line
=
0
;
*
list
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
allocated
);
array
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
allocated
);
*
size
=
0
;
tok
=
strtok
(
buffer
,
"
\r\n
"
);
while
(
tok
!=
NULL
)
{
if
(
*
lin
e
>=
allocated
)
{
if
(
*
siz
e
>=
allocated
)
{
// Double our allocation and re-allocate
allocated
=
allocated
*
2
;
*
list
=
(
char
**
)
realloc
((
*
list
)
,
sizeof
(
char
*
)
*
allocated
);
array
=
(
char
**
)
realloc
(
array
,
sizeof
(
char
*
)
*
allocated
);
}
if
(
strlen
(
tok
))
{
(
*
list
)[
*
lin
e
]
=
malloc
(
strlen
(
tok
));
strcpy
(
(
*
list
)[
*
lin
e
],
tok
);
++
(
*
lin
e
);
array
[
*
siz
e
]
=
malloc
(
strlen
(
tok
));
strcpy
(
array
[
*
siz
e
],
tok
);
++
(
*
siz
e
);
}
tok
=
strtok
(
NULL
,
"
\r\n
"
);
}
free
(
buffer
);
return
array
;
}
int
load_hide_list
(
const
int
fd
)
{
int
i
;
struct
stat
file_stat
;
fstat
(
fd
,
&
file_stat
);
if
(
file_stat
.
st_mtime
==
last_update
)
{
return
0
;
}
// Free memory
for
(
i
=
0
;
i
<
hide_size
;
++
i
)
free
(
hide_list
[
i
]);
free
(
hide_list
);
hide_list
=
file_to_str_arr
(
fd
,
&
hide_size
);
fstat
(
fd
,
&
file_stat
);
last_update
=
file_stat
.
st_mtime
;
printf
(
"Get package name from config:
\n
"
);
for
(
i
=
0
;
i
<
*
lin
e
;
i
++
)
printf
(
"%s
\n
"
,
(
*
list
)
[
i
]);
for
(
i
=
0
;
i
<
hide_siz
e
;
i
++
)
printf
(
"%s
\n
"
,
hide_list
[
i
]);
printf
(
"
\n
"
);
free
(
buffer
);
}
int
main
(
int
argc
,
char
**
argv
,
char
**
envp
)
{
int
line
=
-
1
,
i
;
char
**
list
;
time_t
last_update
=
0
;
int
i
;
int
hide_fd
=
open
(
HIDE_LIST
,
O_RDONLY
);
if
(
hide_fd
==
-
1
){
printf
(
"Error opening hide list
\n
"
);
exit
(
1
);
}
int
fd
=
open
(
HIDE
_LIST
,
O_RDONLY
);
if
(
fd
==
-
1
){
printf
(
"Error opening
file
\n
"
);
int
mount_fd
=
open
(
MOUNT
_LIST
,
O_RDONLY
);
if
(
mount_
fd
==
-
1
){
printf
(
"Error opening
mount list
\n
"
);
exit
(
1
);
}
mount_list
=
file_to_str_arr
(
mount_fd
,
&
mount_size
);
close
(
mount_fd
);
char
buffer
[
512
];
FILE
*
p
=
popen
(
"while true;do logcat -b events -v raw -s am_proc_start;sleep 1;done"
,
"r"
);
while
(
!
feof
(
p
))
{
load
List
(
fd
,
&
list
,
&
line
,
&
last_update
);
load
_hide_list
(
hide_fd
);
//Format of am_proc_start is (as of Android 5.1 and 6.0)
//UserID, pid, unix uid, processName, hostingType, hostingName
...
...
@@ -126,19 +153,26 @@ int main(int argc, char **argv, char **envp) {
if
(
ret
!=
6
)
{
continue
;
}
for
(
i
=
0
;
i
<
lin
e
;
++
i
)
{
if
(
strstr
(
processName
,
list
[
i
])
!=
NULL
)
{
for
(
i
=
0
;
i
<
hide_siz
e
;
++
i
)
{
if
(
strstr
(
processName
,
hide_
list
[
i
])
!=
NULL
)
{
printf
(
"Disabling for process = %s, PID = %d, UID = %d
\n
"
,
processName
,
pid
,
uid
);
hideMagisk
(
pid
);
break
;
}
}
}
close
(
fd
);
pclose
(
p
);
for
(;
line
>=
0
;
line
--
)
free
(
list
[
line
]);
free
(
list
);
close
(
hide_fd
);
// Free memory
for
(
i
=
0
;
i
<
hide_size
;
++
i
)
free
(
hide_list
[
i
]);
free
(
hide_list
);
for
(
i
=
0
;
i
<
mount_size
;
++
i
)
free
(
mount_list
[
i
]);
free
(
mount_list
);
return
0
;
}
zip_static/arm/magiskhide
View file @
aa54ef10
No preview for this file type
zip_static/common/magic_mask.sh
View file @
aa54ef10
...
...
@@ -2,8 +2,11 @@
LOGFILE
=
/cache/magisk.log
IMG
=
/data/magisk.img
MOUNTLIST
=
/dev/mountlist
COREDIR
=
/magisk/.core
MOUNTPOINT
=
/magisk
COREDIR
=
$MOUNTPOINT
/.core
DUMMDIR
=
$COREDIR
/dummy
MIRRDIR
=
$COREDIR
/mirror
...
...
@@ -38,7 +41,7 @@ unblock() {
}
run_scripts
()
{
BASE
=
/magisk
BASE
=
$MOUNTPOINT
if
[
"
$1
"
=
"post-fs"
]
;
then
BASE
=
/cache/magisk
fi
...
...
@@ -137,8 +140,12 @@ travel() {
bind_mount
()
{
if
[
-e
"
$1
"
-a
-e
"
$2
"
]
;
then
mount
-o
bind
$1
$2
if
[
"
$?
"
-eq
"0"
]
;
then
log_print
"Mount:
$1
"
;
else
log_print
"Mount Fail:
$1
"
;
fi
if
[
"
$?
"
-eq
"0"
]
;
then
log_print
"Mount:
$1
"
echo
$2
>>
$MOUNTLIST
else
log_print
"Mount Fail:
$1
"
fi
fi
}
...
...
@@ -260,6 +267,8 @@ case $1 in
# Live patch sepolicy
/data/magisk/sepolicy-inject
--live
-s
su
[
!
-d
"
$MOUNTPOINT
"
]
&&
mkdir
-p
$MOUNTPOINT
# Cache support
if
[
-d
"/cache/data_bin"
]
;
then
rm
-rf
/data/busybox /data/magisk
...
...
@@ -280,14 +289,14 @@ case $1 in
merge_image /data/magisk_merge.img
# Mount magisk.img
if
[
`
cat
/proc/mounts |
grep
/magisk
>
/dev/null 2>&1
;
echo
$?
`
-ne
0
]
;
then
if
[
`
cat
/proc/mounts |
grep
$MOUNTPOINT
>
/dev/null 2>&1
;
echo
$?
`
-ne
0
]
;
then
loopsetup
$IMG
if
[
!
-z
"
$LOOPDEVICE
"
]
;
then
mount
-t
ext4
-o
rw,noatime
$LOOPDEVICE
/magisk
mount
-t
ext4
-o
rw,noatime
$LOOPDEVICE
$MOUNTPOINT
fi
fi
if
[
`
cat
/proc/mounts |
grep
/magisk
>
/dev/null 2>&1
;
echo
$?
`
-ne
0
]
;
then
if
[
`
cat
/proc/mounts |
grep
$MOUNTPOINT
>
/dev/null 2>&1
;
echo
$?
`
-ne
0
]
;
then
log_print
"magisk.img mount failed, nothing to do :("
unblock
fi
...
...
@@ -295,14 +304,14 @@ case $1 in
log_print
"Preparing modules"
# First do cleanups
rm
-rf
$DUMMDIR
rmdir
$(
find
/magisk
-type
d
-depth
!
-path
"*core*"
)
2>/dev/null
rmdir
$(
find
$MOUNTPOINT
-type
d
-depth
!
-path
"*core*"
)
2>/dev/null
rm
-rf
$COREDIR
/bin
mkdir
-p
$DUMMDIR
mkdir
-p
$MIRRDIR
/system
# Travel through all mods
for
MOD
in
/magisk
/
*
;
do
for
MOD
in
$MOUNTPOINT
/
*
;
do
if
[
-f
"
$MOD
/remove"
]
;
then
log_print
"Remove module:
$MOD
"
rm
-rf
$MOD
...
...
@@ -325,7 +334,7 @@ case $1 in
fi
# Unmount, shrink, remount
if
[
`
umount
/magisk
>
/dev/null 2>&1
;
echo
$?
`
-eq
0
]
;
then
if
[
`
umount
$MOUNTPOINT
>
/dev/null 2>&1
;
echo
$?
`
-eq
0
]
;
then
losetup
-d
$LOOPDEVICE
target_size_check
$IMG
NEWDATASIZE
=
$((
(
curUsedM
/
32
+
2
)
*
32
))
...
...
@@ -335,17 +344,17 @@ case $1 in
fi
loopsetup
$IMG
if
[
!
-z
"
$LOOPDEVICE
"
]
;
then
mount
-t
ext4
-o
rw,noatime
$LOOPDEVICE
/magisk
mount
-t
ext4
-o
rw,noatime
$LOOPDEVICE
$MOUNTPOINT
fi
fi
if
[
`
cat
/proc/mounts |
grep
/magisk
>
/dev/null 2>&1
;
echo
$?
`
-ne
0
]
;
then
if
[
`
cat
/proc/mounts |
grep
$MOUNTPOINT
>
/dev/null 2>&1
;
echo
$?
`
-ne
0
]
;
then
log_print
"magisk.img mount failed, nothing to do :("
unblock
fi
# Remove crap folder
rm
-rf
/magisk
/lost+found
rm
-rf
$MOUNTPOINT
/lost+found
# Start doing tasks
...
...
@@ -400,8 +409,16 @@ case $1 in
run_scripts service
# Enable magiskhide
[
!
-f
"
$COREDIR
/magiskhide/hidelist"
]
&&
mktouch
$COREDIR
/magiskhide/hidelist
# Add preset for Safety Net
if
[
$(
grep
-c
"com.google.android.gms.unstable"
$COREDIR
/magiskhide/hidelist
)
-eq
"0"
]
;
then
mv
$COREDIR
/magiskhide/hidelist
$COREDIR
/magiskhide/hidelist.tmp
echo
"com.google.android.gms.unstable"
>
$COREDIR
/magiskhide/hidelist
cat
$COREDIR
/magiskhide/hidelist.tmp
>>
$COREDIR
/magiskhide/hidelist
fi
log_print
"Starting Magisk Hide"
/data/magisk/magiskhide &
(
/data/magisk/magiskhide &
)
;;
esac
zip_static/x86/magiskhide
View file @
aa54ef10
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment