0%

Android-检测Zygisk

在看 Zygisk 源码和调试的过程中发现了一种可以检测 Zygisk 的方法。本文 Magisk v24.3 为例.

在我查看 app 的 maps 的时候,如果开启了 zygisk. 那么会在 maps 文件里出现 2 个 app_process, 一个是 magisk, 另一个是真正的 app_process

如图

红框的部分其实就是 magisk.

可以参考:
Zygisk 源码分析

所以直接检测这里,看看是不是有 2 个 app_process 就可以判断是否有 Zygisk.

但有个问题,我在测试的时候发现,并不是所有时间都能检测到 2 个 app_process, 可能是 zygisk 做了处理.
但是在 constructor 里检测是没有问题的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int app_process64_num=0; //如果app_process64_num为2,说明有zygisk

__unused __attribute__((constructor)) void constructor_main(){
set<int> st;//以app_process的大小为依据,放在set里
char line[1024];
char path[PATH_MAX];
FILE* fp;
sprintf(path,"/proc/%d/maps",getpid());
fp = fopen(path, "r");
if (fp) {
while (fgets(line, 1024, fp)) {
char* part[6];
part[0] = strtok(line, " ");
int i=1;
while(i<6) {
part[i] = strtok(NULL, " ");
i++;
}
if (strcmp(part[5],"/system/bin/app_process64\n")==0){ //app_process
// LOGD("大小:%s,地址:%s",part[4],part[0]);
int res = atoi(part[4]);
st.insert(res);
}
}
fclose(fp);
}
app_process64_num=st.size(); //把检测结果给app_process64_num
return;
}

下载地址

https://github.com/PShocker/PShocker.github.io/releases/download/zygiskdetect/zygiskdetect.apk

效果如图