-
-
[原创]hook框架检测
-
2022-6-10 06:36
11746
-
1.xposed
安卓实现内存漫游
例如对 findAndHookMethod 方法跟踪时,两种重载均会在findMethodExact方法内将方法信息存储在methodCache内,findAndHookConstructor也是同理。
所以,只需要遍历内存中的全部DexClassLoader,尝试loadClass方法,获取到类后即可依靠反射获取字段内容,打印攻击者hook的参数并上报给服务器进行记录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public void getXpMethods() throws throws Exception {
/ / 遍历获取全部DexClassLoader
ArrayList< Object > choose = choose(DexClassLoader. class );
DexClassLoader loader = null;
Class<?> XposedHelpers = null;
/ / 不为空尝试加载关键类
if (choose! = null){
for ( Object obj:choose){
loader = (DexClassLoader) obj;
try {
XposedHelpers = loader.loadClass( "de.robv.android.xposed.XposedHelpers" );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Field field = XposedHelpers.getDeclaredField( "methodCache" );
field.setAccessible(true);
HashMap<String, Object > MethodList = (HashMap<String, Object >) field.get(null);
Log.i( "MethodList " , MethodList.keySet().toString());
}
|
同时对hookAllMethods进行跟踪,最后会在hookMethod内将方法内容put进sHookedMethodCallbacks,用frida进行打印,代码如下。
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 | function antiList(){
Java.perform(function(){
var XposedBridge;
Java.enumerateClassLoaders({
"onMatch" : function(loader) {
try {
XposedBridge = loader.loadClass( "de.robv.android.xposed.XposedBridge" );
}
catch(err) {
}
},
"onComplete" : function() {
}
});
if (XposedBridge! = null){
var file = XposedBridge.getDeclaredField( "sHookedMethodCallbacks" );
file .setAccessible(true);
console.log( file .get(null));
}
});
}
|
在获取到Xp的类加载器后,就可以通过反射干扰攻击者的判断,例如引入蜜罐、通过disableHooks使hook失效等。除此之外xp的特征较多,单从检测来看方法很多,但是通过对xp魔改或使用sandhook即可绕过常规检测。
2.frida
1 2 3 | / / base可以通过解析maps获取首地址
mprotect((void * )startr,PAGE_SIZE,PROT_WRITE);
* ( long * )startr = * ( long * )startr + 0xa ;
|
frida从hook原理来讲是通过inlinehook完成,所以开一条线程对关键函数头进行轮询检测很有必要,其余常规检测可以参考 antifridaAndroid
emanriquez / antifridaAndroid
3.rpc主动调用
在主动调用的对抗来讲,它是基于Hook实现的,所以检测了hook自然也就能顺带pass掉,单独特征来讲常用的角度是从堆栈出发,主动调用如下图,没有一条完整的调用链,无论从堆栈的深度还是名称,都能进行判断。
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
最后于 2022-10-24 10:29
被wx_白熊编辑
,原因: 格式