<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Xposed檢測繞過

    VSole2023-03-06 14:36:15

    分享一些Xposed檢測繞過的總結,很多加殼軟件檢測到xposed就會殺死當前軟件進程。

    1、繞過jar Class檢測

    // 過防止調用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、繞過堆棧檢測

    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、繞過包名檢測

    findAndHookMethod("android.app.ApplicationPackageManager", lpparam.classLoader, "getInstalledApplications", int.class, new XC_MethodHook() {            @SuppressWarnings("unchecked")            @Override            protected void afterHookedMethod(MethodHookParam param) throws Throwable { // Hook after getIntalledApplications is called                if (debugPref) {                    XposedBridge.log("Hooked getInstalledApplications");                }                 List packages = (List) param.getResult(); // Get the results from the method call                Iterator iter = packages.iterator();                ApplicationInfo tempAppInfo;                String tempPackageName;                  // Iterate through the list of ApplicationInfo and remove any mentions that match a keyword in the keywordSet                while (iter.hasNext()) {                    tempAppInfo = iter.next();                    tempPackageName = tempAppInfo.packageName;                    if (tempPackageName != null && tempPackageName.equals("de.robv.android.xposed.installer")) {                        iter.remove();                        if (debugPref) {                            XposedBridge.log("Found and hid package: " + tempPackageName);                        }                    }                }                 param.setResult(packages); // Set the return value to the clean list            }        });
    

    4、繞過jar文件檢測:

    Constructor constructLayoutParams = findConstructorExact(java.io.File.class, String.class);        XposedBridge.hookMethod(constructLayoutParams, new XC_MethodHook(XCallback.PRIORITY_HIGHEST) {            @Override            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {                if (param.args[0] != null) {                    if (debugPref) {                        XposedBridge.log("File: Found a File constructor: " + ((String) param.args[0]));                    }                }                 if (isRootCloakLoadingPref) {                    // RootCloak is trying to load it's preferences, we shouldn't block this.                    return;                }                if (((String) param.args[0]).contains("XposedBridge")) {                    if (debugPref) {                        XposedBridge.log("File: Found a File constructor with word super, noshufou, or chainfire");                    }                    param.args[0] = "/system/app/" + FAKE_FILE;                }            }        });
    

    5、繞過maps檢測

    XposedHelpers.findAndHookConstructor("java.io.FileReader",lpparam.classLoader ,String.class , new XC_MethodHook() {          @Override          protected void beforeHookedMethod(MethodHookParam param) throws Throwable {              String arg0 = (String) param.args[0];              if(arg0.toLowerCase().contains("/proc/")){                  param.setResult(null);              }          }      });
    

    6、繞過vxp檢測

    XposedHelpers.findAndHookMethod("java.lang.System", lpparam.classLoader, "getProperty", String.class, new XC_MethodHook() {           @Override           protected void beforeHookedMethod(MethodHookParam param) throws Throwable {               String arg0 = (String)param.args[0];               if(arg0.equals("vxp")){                   param.setResult(null);               }           }       });
    

    7、繞過SO檢測

    findAndHookMethod("java.lang.Runtime", lpparam.classLoader, "exec", String[].class, String[].class, File.class, new XC_MethodHook() {           @Override           protected void beforeHookedMethod(MethodHookParam param) throws Throwable {               if (debugPref) {                   XposedBridge.log("Hooked Runtime.exec");               }                String[] execArray = (String[]) param.args[0]; // Grab the tokenized array of commands               if ((execArray != null) && (execArray.length >= 1)) { // Do some checking so we don't break anything                   String firstParam = execArray[0]; // firstParam is going to be the main command/program being run                   if (debugPref) { // If debugging is on, print out what is being called                       String tempString = "Exec Command:";                       for (String temp : execArray) {                           tempString = tempString + " " + temp;                       }                       XposedBridge.log(tempString);                   }                    if (stringEndsWithFromSet(firstParam, commandSet)) { // Check if the firstParam is one of the keywords we want to filter                       if (debugPref) {                           XposedBridge.log("Found blacklisted command at the end of the string: " + firstParam);                       }                        // A bunch of logic follows since the solution depends on which command is being called                       // TODO: ***Clean up this logic***                       if (commandSet.contains("ls") && execArray.length >= 3 && execArray[1].contains("lib")) {                           param.setThrowable(new IOException());                       } else {                           param.setThrowable(new IOException());                       }                        if (debugPref && param.getThrowable() == null) { // Print out the new command if debugging is on                           String tempString = "New Exec Command:";                           for (String temp : (String[]) param.args[0]) {                               tempString = tempString + " " + temp;                           }                           XposedBridge.log(tempString);                       }                   }               } else {                   if (debugPref) {                       XposedBridge.log("Null or empty array on exec");                   }               }           }       });
    

    8、繞過ClassPath檢測

    XposedHelpers.findAndHookMethod("java.lang.System", lpparam.classLoader, "getenv", String.class, new XC_MethodHook() {           @Override           protected void beforeHookedMethod(MethodHookParam param) throws Throwable {               String arg0 = (String)param.args[0];               if(arg0.equals("CLASSPATH")){                   param.setResult("FAKE.CLASSPATH");               }           }       });
    

    9、檢測緩存

    // 定義全局變量 modifyXposedHelpers.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);            }        });
    
    stringxposed
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    動態防護技術
    2022-07-13 17:20:00
    動態防護技術是面向App運行過程的防護,一方面可以通過App動態加固技術來實現,比如程序數據加解密保護、進程防動態調試保護、運行日志輸出保護、用戶信息輸入保護等;另一方面需要開發者在App實現方案中采用保護技術,如客戶端和服務器端通信過程的保護等。此次僅介紹App動態防護技術的實現思路,不討論具體的實現方案細節。
    Xposed檢測繞過
    2023-03-06 14:36:15
    分享一些Xposed檢測繞過的總結,很多加殼軟件檢測到xposed就會殺死當前軟件進程。
    也請勿將相關技術用于非法操作,否則責任自負。
    某加速器APP分析
    2023-07-14 09:51:27
    (這樣檢測是因為正常手機不會是intel或AMD型號的CPU。② 修改對應的smali語句,將eqz修改成nez。這里將eqz改成nez即可繞過檢測。解碼后結果是亂碼。
    VX小程序逆向分析
    2023-06-29 09:16:31
    Frida雖然確實調試起來相當方便,但是Xposed由于能夠安裝在用戶手機上實現持久化的hook,至今受到很多人的青睞,對于微信小程序的wx.request API。背景知識眾所周知,Xposed主要用于安卓Java層的Hook,而微信小程序則是由JS編寫的,顯然無法直接進行hook。對于Xposed則沒有這個問題,只需指定微信的包名就會自動hook上所有的子進程。答案是可以的,如下所示:Xposed hook wx.request java層代碼得到發送的數據實現如下所示:得到響應數據的Xposed代碼就不貼了,方法同上。
    Activity漏洞挖掘詳解
    2021-10-18 16:22:12
    2Activity漏洞初步介紹1.Activity基本介紹在學習Activity的漏洞挖掘之前,我們先對Activity的基本運行原理有一個初步的認識。
    Frida工作原理學習
    2022-07-12 16:28:29
    frida是一款便攜的、自由的、支持全平臺的hook框架,可以通過編寫JavaScript、Python代碼來和frida_server端進行交互,還記得當年用xposed時那種寫了一大堆代碼每次修改都要重新打包安裝重啟手機、那種調試調到頭皮發麻的痛苦,百分之30的時間都是在那里安裝重啟安裝重啟。
    記一次試崗實戰項目
    2023-05-06 09:12:33
    試崗項目項目內容開發一個 xposed 插件,可以在 whatsApp 中導入通訊錄功能,輸入是手機號,輸出是這個手機號對應的id和個人信息,對方還跟貼心的給出了項目預覽圖,應該是對方近期接到的項目,也可以看出對方沒有白嫖我的意思。關鍵代碼定位點開APP隨便瀏覽了一下功能,根據對方給出的預覽圖,可以知道首先是需要定位這個界面的 onCreat 界面,首先考慮的就是直接搜字符串,比如“邀請使用”這四個字,但是拖入 jadx 一番搜索后什么也沒有。
    一前言為了幫助更加方便的進行漏洞挖掘工作,前面我們通過了幾篇文章詳解的給大家介紹了動態調試技術、過反調試技術、Hook技術、過反Hook技術、抓包技術等,掌握了這些可以很方便的開展App漏洞挖掘工作,而最后我們還需要掌握一定的脫殼技巧,進行進一步助力我們漏洞挖掘的效率。本文第二節主要講述Android啟動流程和加殼原理。本文第三節主要介紹整體加殼的實現。本文第四節主要講當下脫殼點的概念。
    FartExt是我之前學習脫殼實踐時做的一個自動脫殼機,是基于FART的主動調用思想實現對特定的抽取殼進行優化處理的工具。由于原本的FART沒有配置相關的,所以我增加了配置對指定app脫殼。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类