apkunpacker / AntiFrida_Bypass

Generic Script To Bypass Some AntiFrida Checks
400 stars 113 forks source link

Checker not working if java like this. #1

Open gaplan opened 2 years ago

gaplan commented 2 years ago

Hello @apkunpacker , I have a java code that checks anti-frida, and when I call apk with the code you wrote, I get the following error.

Error code is : Error: unable to find module containing 0xffe1db0c Error: unable to find module containing 0xffe1db10 Error: unable to find module containing 0xdceffad0 Error: unable to find module containing 0xca7a56f4 Error: unable to find module containing 0xca7a56f8 Error: unable to find module containing 0xdceffb50 Error: unable to find module containing 0x0 Error: unable to find module containing 0xdf123a00 Error: unable to find module containing 0xffe1d328 Error: unable to find module containing 0xffe1d34c Error: unable to find module containing 0xdcedaf00 Error: unable to find module containing 0xffe1d1e8 Error: unable to find module containing 0xffe1d20c Error: unable to find module containing 0xdcedb400 Error: unable to find module containing 0xffe1d248 Error: unable to find module containing 0xffe1d26c

Java Code is :

`public class SecurityUtils { public static ChangeQuickRedirect changeQuickRedirect; public static Boolean isSecure;

static {
    Covode.recordClassIndex(114126);
}

public static boolean isFridaExist() {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[0], null, changeQuickRedirect, true, 11);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    try {
        InetAddress.getByName(decode("3132372e302e302e31"));
        new Socket("3132372e302e302e31", Integer.parseInt(decode("3237303432")));
        return true;
    } catch (IOException unused) {
        return false;
    }
}

public static boolean isRoot() {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[0], null, changeQuickRedirect, true, 3);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    if (getRoSecureProp() == 0) {
        return true;
    }
    return isSUExist();
}

public static boolean isSecure() {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[0], null, changeQuickRedirect, true, 1);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    Boolean bool = isSecure;
    if (bool == null || bool.booleanValue()) {
        return true;
    }
    return false;
}

public static int getRoSecureProp() {
    Object invoke;
    String str = null;
    PatchProxyResult proxy = PatchProxy.proxy(new Object[0], null, changeQuickRedirect, true, 5);
    if (proxy.isSupported) {
        return ((Integer) proxy.result).intValue();
    }
    try {
        invoke = INVOKESTATIC_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_ss_android_ugc_aweme_lancet_mira_opt_MiraReflectLancet_forName("android.os.SystemProperties").getMethod("get", String.class).invoke(null, decode("726f2e736563757265"));
    } catch (Exception unused) {
    }
    if (invoke == null) {
        return 1;
    }
    str = (String) invoke;
    if (str == null || !"0".equals(str)) {
        return 1;
    }
    return 0;
}

public static boolean isSUExist() {
    String[] strArr;
    int i;
    PatchProxyResult proxy = PatchProxy.proxy(new Object[0], null, changeQuickRedirect, true, 7);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    try {
        strArr = new String[]{decode("2f7362696e2f7375"), decode("2f73797374656d2f62696e2f7375"), decode("2f73797374656d2f7862696e2f7375"), decode("2f646174612f6c6f63616c2f7862696e2f7375"), decode("2f646174612f6c6f63616c2f62696e2f7375"), decode("2f73797374656d2f73642f7862696e2f7375"), decode("2f73797374656d2f62696e2f6661696c736166652f7375"), decode("2f646174612f6c6f63616c2f7375")};
        i = 0;
    } catch (Exception unused) {
    }
    while (!new File(strArr[i]).exists()) {
        i++;
        if (i >= 8) {
            return false;
        }
    }
    return true;
}

public static boolean findHookAppFile() {
    MethodCollector.i(14877);
    PatchProxyResult proxy = PatchProxy.proxy(new Object[0], null, changeQuickRedirect, true, 13);
    if (proxy.isSupported) {
        boolean booleanValue = ((Boolean) proxy.result).booleanValue();
        MethodCollector.o(14877);
        return booleanValue;
    }
    try {
        HashSet<String> hashSet = new HashSet();
        BufferedReader bufferedReader = new BufferedReader(new FileReader("/proc/" + Process.myPid() + "/maps"));
        while (true) {
            String readLine = bufferedReader.readLine();
            if (readLine == null) {
                break;
            } else if (readLine.endsWith(".so") || readLine.endsWith(".jar")) {
                hashSet.add(readLine.substring(readLine.lastIndexOf(" ") + 1));
            }
        }
        bufferedReader.close();
        for (String str : hashSet) {
            if (str.contains(decode("636f6d2e73617572696b2e737562737472617465"))) {
                MethodCollector.o(14877);
                return true;
            } else if (str.contains(decode("58706f7365644272696467652e6a6172"))) {
                MethodCollector.o(14877);
                return true;
            } else if (str.contains(decode("6c696273616e64686f6f6b2e656478702e736f"))) {
                MethodCollector.o(14877);
                return true;
            }
        }
    } catch (Exception unused) {
    }
    MethodCollector.o(14877);
    return false;
}

public static String decode(String str) {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{str}, null, changeQuickRedirect, true, 15);
    if (proxy.isSupported) {
        return (String) proxy.result;
    }
    return DownloadUtils.hexToString(str);
}

public static Class INVOKESTATIC_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_ss_android_ugc_aweme_lancet_mira_opt_MiraReflectLancet_forName(String str) {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{str}, null, changeQuickRedirect, true, 6);
    if (proxy.isSupported) {
        return (Class) proxy.result;
    }
    if (!C0Y5.LIZ()) {
        return Class.forName(str);
    }
    try {
        return Class.forName(str);
    } catch (Throwable th) {
        if (th instanceof PluginClassNotFoundException) {
            throw th;
        } else if ((th instanceof ClassNotFoundException) || (th instanceof NoClassDefFoundError)) {
            return MiraPluginFix.forName(str);
        } else {
            throw th;
        }
    }
}

public static boolean hasSimCard(Context context) {
    int simState;
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{context}, null, changeQuickRedirect, true, 10);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    try {
        simState = ((TelephonyManager) context.getSystemService("phone")).getSimState();
    } catch (Throwable unused) {
    }
    if (simState == 1 || simState == 0) {
        return false;
    }
    return true;
}

public static boolean isDebug(Context context) {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{context}, null, changeQuickRedirect, true, 4);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    if ((context.getApplicationInfo().flags & 2) != 0) {
        return true;
    }
    return false;
}

public static boolean isXposedExist(Context context) {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{context}, null, changeQuickRedirect, true, 12);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    if (findHookAppFile() || findHookAppName(context)) {
        return true;
    }
    return false;
}

public static boolean findHookAppName(Context context) {
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{context}, null, changeQuickRedirect, true, 14);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    List<String> asList = Arrays.asList(decode("64652e726f62762e616e64726f69642e78706f736564"), decode("636f6d2e746f706a6f686e77752e6d616769736b"), decode("696f2e76612e6578706f736564"), decode("636f6d2e77696e642e636f74746572"), decode("6f72672e6d656f776361742e656478706f7365642e6d616e61676572"), decode("6d652e7765697368752e657870"), decode("636f6d2e73617572696b2e737562737472617465"));
    PackageManager packageManager = context.getPackageManager();
    for (String str : asList) {
        if (packageManager.getPackageInfo(str, 0) != null) {
            return true;
        }
    }
    return false;
}

public static synchronized void init(Context context) {
    synchronized (SecurityUtils.class) {
        MethodCollector.i(14876);
        boolean z = true;
        if (PatchProxy.proxy(new Object[]{context}, null, changeQuickRedirect, true, 2).isSupported) {
            MethodCollector.o(14876);
            return;
        }
        if (isSecure == null) {
            try {
                if (isRoot() || isDebug(context) || isUsbCharging(context) || !hasSimCard(context) || isFridaExist() || isXposedExist(context)) {
                    z = false;
                }
                isSecure = Boolean.valueOf(z);
                MethodCollector.o(14876);
                return;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        MethodCollector.o(14876);
    }
}

public static boolean isUsbCharging(Context context) {
    Intent INVOKEVIRTUAL_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_bytedance_sysoptimizer_ReceiverRegisterLancet_registerReceiver;
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{context}, null, changeQuickRedirect, true, 8);
    if (proxy.isSupported) {
        return ((Boolean) proxy.result).booleanValue();
    }
    if ((!RomUtils.isEmui() || Build.VERSION.SDK_INT > 23) && (INVOKEVIRTUAL_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_bytedance_sysoptimizer_ReceiverRegisterLancet_registerReceiver = INVOKEVIRTUAL_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_bytedance_sysoptimizer_ReceiverRegisterLancet_registerReceiver(context, null, new IntentFilter("android.intent.action.BATTERY_CHANGED"))) != null && INVOKEVIRTUAL_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_bytedance_sysoptimizer_ReceiverRegisterLancet_registerReceiver.getIntExtra("plugged", -1) == 2) {
        return true;
    }
    return false;
}

public static Intent INVOKEVIRTUAL_com_ss_android_socialbase_appdownloader_util_SecurityUtils_com_bytedance_sysoptimizer_ReceiverRegisterLancet_registerReceiver(Context context, BroadcastReceiver broadcastReceiver, IntentFilter intentFilter) {
    String str;
    PatchProxyResult proxy = PatchProxy.proxy(new Object[]{context, broadcastReceiver, intentFilter}, null, changeQuickRedirect, true, 9);
    if (proxy.isSupported) {
        return (Intent) proxy.result;
    }
    if (broadcastReceiver != null) {
        str = broadcastReceiver.toString();
    } else {
        str = "";
    }
    ReceiverRegisterLancet.loge("optimize_receiver", str);
    try {
        return context.registerReceiver(broadcastReceiver, intentFilter);
    } catch (Exception e) {
        if (ReceiverRegisterCrashOptimizer.fixedOpen()) {
            return ReceiverRegisterCrashOptimizer.registerReceiver(broadcastReceiver, intentFilter);
        }
        throw e;
    }
}

}`

apkunpacker commented 2 years ago

Hi @gaplan . Thanks for Report. May you share this sample apk on which you trying script so i can reproduce and fix if possible?

gaplan commented 2 years ago

@apkunpacker Thank you very much for the quick reply. That's the apk name. douyin-20-5-0.apk The download address is below.

https://dw62.uptodown.com/dwn/lXdJABRVrWQEtWrGwg-7igQYr7_6PsZI5thBL86fGXuw3PMoDl3jF4u7-Y0FaVjhQ-eNomGiFA3UL5ue5f8OdsQ6TnvZkJP8elfBe7wFSroC91u3byE-UHmlTVsGpXrK/0y1jnVDeVt0soLFwI3MFAu8TmwR5IgDcM9tpxa7W0DsTZwrHRl9mU0A3ZY5ejX92T-LjodMpOO_httneU2-fXmSxE49LVkqL6Y7ZkXJwJtGWE9cCci8hcFonCwsCv4RH/2v901e7t3wDmWBjMRBIDg3uQOjbguWzBNKuV92x7bcwlxnUXrG3903oxAONschPe/douyin-20-5-0.apk

gaplan commented 2 years ago

Any news ?

gaplan commented 2 years ago

And the second one

package com.appsflyer.internal;

enum a$d { XPOSED("xps"), FRIDA("frd");

/* renamed from: ɩ  reason: contains not printable characters */
public String f157;

a$d(String str) {
    this.f157 = str;
}

}