最近,iapp逆向越来越猖獗,各种方法层出不穷
其实大多数都以进程注入为核心
而Xposed框架和Substrate框架又是这一领域的佼佼者
今天我们就来尝试检测它们
在这之前先声明几个术语
xposed框架:指 rovo89 开发的Java方法劫持框架,核心思想是注入zygote进程
dexposed:指阿里开发的Dalvik上的进程内Java方法劫持框架(不考虑dev_art分支),仅限本进程
epic:指田维术开发的ART上的进程内Java方法劫持框架,仅限本进程
va:指罗迪开发的虚拟环境框架VirtualApp
vxp:指田维术基于va和epic开发的免root享受xposed的软件,核心思想是虚拟化
太极框架:指田维术基于epic开发的无需root体验xposed的软件,核心思想是修改apk(不考虑太极●Magisk版)
cls("de.robv.android.xposed.XposedBridge",klazz)
f(klazz != null) {
tw("存在 Xposed 环境")
}
cls("de.robv.android.xposed.XposedBridge",klazz)
f(klazz != null) {
tw("存在 Xposed 环境")
javass(disable,null,klazz,"disableHooks",true)
f(disable) {
tw("禁用 Xposed 成功")
} else {
tw("禁用 Xposed 失败")
}
}
java(thread,null,"java.lang.Thread.currentThread")
java(stackTrace,thread,"java.lang.Thread.getStackTrace")
s hasHook = false
for(st;stackTrace) {
java(sts,st,"java.lang.Object.toString")
f(sts ? "de.robv.android.xposed." || sts ? "me.weishu.epic." || sts ? "me.weishu.exposed.") {
s hasHook = true
break
}
}
f(hasHook) {
tw("存在Hook框架")
}
fr("/proc/self/maps",maps)
f(maps ? "XposedBridge.jar" || maps ? "libepic.so" || maps ? "libdexposed.so" || maps ? "libsubstrate.so") {
tw("存在Hook框架")
}
java(isVxp,null,"java.lang.System.getProperty","String","vxp","String","0")
f(isVxp == "1") {
tw("vxp环境")
}
java(filesDir,activity,"android.content.Context.getFilesDir")
f(filesDir ? "io.va.exposed") {
tw("处于vxp环境")
}