利用Xposed躲過(guò)Xposed檢測(cè)

轉(zhuǎn)自:https://bbs.pediy.com/thread-249809.htm

越來(lái)越多的app對(duì)xposed進(jìn)行了檢測(cè)
通過(guò)分析了其中部分對(duì)xposed檢查的代碼,希望通過(guò)xposed的方式阻止xposed檢測(cè)達(dá)到通用的目的。
一般檢查手段有很多,樓主也沒(méi)分析完,這里列舉了幾個(gè)和處理方式。
1、通過(guò) ClassLoader 的 loadClass 加載XposedHelper 來(lái)修改一些局部變量值,阻止hook.
處理方式,通過(guò)Hook 類加載修改 加載的類名


// 過(guò)防止調(diào)用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.")){
 
                    // 改成一個(gè)不存在的類
                    param.args[0] = "de.robv.android.xposed.ThTest";
                }
 
                super.beforeHookedMethod(param);
            }
        });

2、通過(guò) 代碼拋出一個(gè)異常,在堆棧中,查找Xposed相關(guān)的內(nèi)容,進(jìn)行判定
處理方式,通過(guò)Hook堆棧獲取類名替換的方式進(jìn)行阻止

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、通過(guò)讀取 shell 命令 /proc/pid(應(yīng)用進(jìn)程id)/maps 可以拿到當(dāng)前上下文的so和jar列表,查找Xposed相關(guān)
處理方式,樓主看到大部分多試通過(guò)使用 BufferedReader進(jìn)行讀取命令的內(nèi)容,過(guò)濾掉 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,是通過(guò)so修改被hook的方法為native來(lái)實(shí)現(xiàn)的,所以檢測(cè)方也可以通過(guò)檢測(cè)方法是否變成了native來(lái)達(dá)到檢測(cè)的目的
處理方式,對(duì)指定的方法,進(jìn)行返回正常的值,來(lái)達(dá)到屏蔽的效果,這里用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、當(dāng)然還有其他各種各樣的檢測(cè)方式了,樓主所知甚少,老是提問(wèn),覺(jué)得應(yīng)該分享點(diǎn)東西,所以有了此貼。見(jiàn)笑見(jiàn)笑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容