最近研究反hook,xposed的检测方法有一种是检查java方法有没有变成native的,因为其hookMethodNative函数中会设置flag为kAccNative。用这种方法检测lsposed的时候却不会生效,显示被hook的方法仍是java方法,这是对的吗?
public static boolean checkNative() {
try
{
Class<?> mainActivityClass
=
Class.forName(
"com.example.victimapp.MainActivity"
);
Method checkSNMethod
mainActivityClass.getDeclaredMethod(
"checkSN"
int
modifiers
checkSNMethod.getModifiers();
if
(Modifier.isNative(modifiers)) {
System.out.println(
"checkSN 是 native 方法"
return
true;
}
else
"checkSN 是 Java 方法"
false;
} catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) {
e.printStackTrace();
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
lsposed会清除kAccPreCompiled并设置kAccCompileDontBother函数,可以这样检查方法的标志位
并且会修改ArtMethod结构体里的entry_point字段,可以检查entry_point字段指向的函数地址是否符合trampoline的特征即可
最显然的特征还是检查进程内是否存在rwxp属性的匿名内存即可,因为lsplant分配trampoline的内存时是这样的
天水姜伯约 lsposed会清除kAccPreCompiled并设置kAccCompileDontBother函数,可以这样检查方法的标志位并且会修改ArtMethod结构体里的entry_point字段,可以检 ...