微信号:ikanxue

介绍:致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号.

利用Xposed躲过Xposed检测

2019-03-12 18:03 supperlitt

通过分析了其中部分对xposed检查的代码,希望通过xposed的方式阻止xposed检测达到通用的目的。


一般检查手段有很多,楼主也没分析完,这里列举了几个和处理方式。


1、通过 ClassLoader  loadClass 加载XposedHelper 来修改一些局部变量值,阻止hook


处理方式,通过Hook 类加载修改 加载的类名:

// 过防止调用loadClass加载 de.robv.android.xposed.

XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

if(param.args != null && param.args[0] != null && param.args[0].toString().startsWith("de.robv.android.xposed.")){



// 改成一个不存在的类

param.args[0] = "de.robv.android.xposed.ThTest";

}



super.beforeHookedMethod(param);

}

});


2、通过代码抛出一个异常,在堆栈中,查找Xposed相关的内容,进行判定。


处理方式,通过Hook堆栈获取类名替换的方式进行阻止:

XposedHelpers.findAndHookMethod(StackTraceElement.class, "getClassName", new XC_MethodHook() {

@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

String result = (String) param.getResult();

if (result != null){

if (result.contains("de.robv.android.xposed.")) {

param.setResult("");

// Log.i(tag, "替换了,字符串名称 " + result);

}else if(result.contains("com.android.internal.os.ZygoteInit")){

param.setResult("");

}

}



super.afterHookedMethod(param);

}

});


3、通过读取 shell 命令 /proc/pid(应用进程id)/maps 可以拿到当前上下文的so和jar列表,查找Xposed相关。


处理方式,楼主看到大部分多试通过使用BufferedReader进行读取命令的内容,过滤掉 XposedBridge.jar就好。

XposedHelpers.findAndHookMethod(BufferedReader.class, "readLine", new XC_MethodHook() {

@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

String result = (String) param.getResult();

if(result != null) {

if (result.contains("/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar")) {

param.setResult("");new File("").lastModified();

}

}



super.afterHookedMethod(param);

}

});


4、其他,由于Xposedhook,是通过so修改被hook的方法为native来实现的,所以检测方也可以通过检测方法是否变成了native来达到检测的目的。


处理方式,对指定的方法,进行返回正常的值,来达到屏蔽的效果,这里用getDeviceId举例:

// 定义全局变量 modify

XposedHelpers.findAndHookMethod(Method.class, "getModifiers", new XC_MethodHook() {

@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

Method method = (Method)param.thisObject;

String[] array = new String[] { "getDeviceId" };

String method_name = method.getName();

if(Arrays.asList(array).contains(method_name)){

modify = 0;

}else{

modify = (int)param.getResult();

}



super.afterHookedMethod(param);

}

});



XposedHelpers.findAndHookMethod(Modifier.class, "isNative", int.class, new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

param.args[0] = modify;



super.beforeHookedMethod(param);

}

});


5、当然还有其他各种各样的检测方式了,楼主所知甚少,老是提问,觉得应该分享点东西,所以有了此贴,见笑见笑。



- End -


看雪ID:supperlitt              

https://bbs.pediy.com/user-718635.htm



文由看雪论坛 supperlitt 原创

转载请注明来自看雪社区



热门图书推荐:

立即购买!



(晋级赛Q1正在火热进行中~!)


热门文章阅读


1、使用IDA pro逆向ARM M系核心的Bin固件

2、简单高效开发你的shellcode不是梦!

3、Android ART invoke 代码生成

4、进阶安全圈,不得不读地一本书——《加密与解密》第4版



公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com



点击下方“阅读原文”
 
看雪学院 更多文章 赛况直播 | 2019 KCTF 开战,这里只用实力说话 使用IDA pro逆向ARM M系核心的Bin固件 今天中午12点,相约看雪CTF 晋级赛Q1,battle起来! 看雪会员专享(含餐)| 第九期网络安全创新发展高端论坛——人工智能安全 ScyllaHide的Hook原理
猜您喜欢 InnoDB 缓冲池大小调整 想转行人工智能?机会来了!!! 下周六活动:跨平台开发 | 解码安全风控 | iOS技术 傅盛掌舵!开启中国互联网大航海时代 Python奇技淫巧