首页
社区
课程
招聘
[原创]利用Xposed躲过Xposed检测
2019-3-5 11:41 24004

[原创]利用Xposed躲过Xposed检测

2019-3-5 11:41
24004

越来越多的app对xposed进行了检测

通过分析了其中部分对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";
                    // 调整了一下,听说这样改更好,直接改部分手机有未知影响。
                                        param.setThrowable(new ClassNotFoundException("not found"));
                }

                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、其他,由于Xposed的hook,是通过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、当然还有其他各种各样的检测方式了,楼主所知甚少,老是提问,觉得应该分享点东西,所以有了此贴。见笑见笑


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2020-5-16 09:05 被supperlitt编辑 ,原因: 补充
收藏
点赞8
打赏
分享
最新回复 (23)
雪    币: 163
活跃值: (1288)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
学编程 1 2019-3-5 14:43
2
0
不错哦
雪    币: 4687
活跃值: (253)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bjhrwzh 2019-3-5 17:28
3
0
mark  检测思路比较多,过检测思路也很多。不错
雪    币: 1366
活跃值: (5584)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
supperlitt 2019-3-6 08:52
4
0
学编程 不错哦
谢谢支持,让大佬见笑了
雪    币: 1366
活跃值: (5584)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
supperlitt 2019-3-6 08:52
5
0
bjhrwzh mark 检测思路比较多,过检测思路也很多。不错
谢谢支持
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DWwinter 2019-3-6 15:05
6
0
支持支持
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
人在塔在 2019-3-6 17:29
7
0
mark 谢谢
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Mr.T800 2019-3-13 11:41
8
0
mark 支持一下,谢谢
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
yuyuyu蛤 2019-3-16 15:10
9
0
学习学习
雪    币: 907
活跃值: (857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
La0s 2019-3-20 08:40
10
0
用xposed过xposed是最骚的
雪    币: 226
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
crazy清风 2019-5-18 15:56
11
0
mark 学习一下
雪    币: 191
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
josin22 2019-8-14 17:41
12
0
对于在Native写的so.jar之类的检测 ,如何破
雪    币: 574
活跃值: (278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
miyuecao 2019-8-15 14:15
13
0
感谢总结很分享
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
炒萝卜皮 2019-10-23 20:49
14
1
大神,有个疑问,第四点native,是否只有XposedHelpers.findAndHookMethod 这种方法需要处理,还是XposedHelpers.callMethod 这些使用的方法,也要进行处理呢?
雪    币: 4
活跃值: (479)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Gordonhat 2019-10-24 18:15
15
1
这些都是明面的,so里面的检测用xp搞不定
雪    币: 224
活跃值: (962)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
樊辉 2019-10-26 16:47
16
0
好多没讲到
雪    币: 1237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
dumBball 2020-3-27 14:35
17
0
大佬,我觉得第四种情况,可以直接简化成,
 if(Arrays.asList(array).contains(method_name))
{
 param.setResult(0);
 }

这样就不用hook isNative方法了。
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
遥远的星际 2020-5-15 17:12
18
0
楼主第一个方法有毒,用了后手机无限重启
雪    币: 758
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
壹久玖 2020-5-15 17:54
19
0
优秀
雪    币: 3478
活跃值: (3040)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guijingwen 2020-5-15 20:24
20
0
不错
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xnntviog 2020-5-18 09:31
21
0
有联系方式吗
雪    币: 69
活跃值: (468)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aaawwwiii 2020-5-20 16:59
22
0
虽然感觉这样的方式不一定靠谱,不过我需要积分啊
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_汪守满 2020-7-28 23:59
23
0
请问现在关于exposed反检测 有更加详细的手段?谢谢
雪    币: 62
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2020-11-23 19:15
24
0
膜一下
游客
登录 | 注册 方可回帖
返回