TikTok.apk(点击下载) / AndHook.java


package andhook.lib;

import android.app.Application;
import android.os.Build;
import android.util.Log;
import i.am.jaggu;
import java.io.File;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public final class AndHook {
    private static final String LIB_NAME = "AK";
    public static final String LOG_TAG = "AndHook";
    private static final String PREF_KEY_MODDING_OPTIONS_WARNING_SHOWN = "modding_options_warning_shown";
    public static final String VERSION = "3.6.2";

    private static final class Dalvik {
        private Dalvik() {
        }

        public static native boolean invokeBooleanMethod(int i2, Object obj, Object... objArr);

        public static native byte invokeByteMethod(int i2, Object obj, Object... objArr);

        public static native char invokeCharMethod(int i2, Object obj, Object... objArr);

        public static native double invokeDoubleMethod(int i2, Object obj, Object... objArr);

        public static native float invokeFloatMethod(int i2, Object obj, Object... objArr);

        public static native int invokeIntMethod(int i2, Object obj, Object... objArr);

        public static native long invokeLongMethod(int i2, Object obj, Object... objArr);

        public static native Object invokeObjectMethod(int i2, Object obj, Object... objArr);

        public static native short invokeShortMethod(int i2, Object obj, Object... objArr);

        public static native void invokeVoidMethod(int i2, Object obj, Object... objArr);
    }

    public static native int backup(Class<?> cls, String str, String str2);

    public static native int backup(Member member);

    public static native void deoptimizeMethod(Member member);

    public static native void disableLogging(boolean z);

    public static void dumpClassMethods(Class<?> cls) {
        dumpClassMethods(cls, null);
    }

    private static native void dumpClassMethods(Class<?> cls, String str);

    public static void dumpClassMethods(String str) {
        dumpClassMethods(null, str);
    }

    public static native void enableFastDexLoad(boolean z);

    public static boolean ensureClassInitialized(Class<?> cls) {
        if (!cls.isInterface() && !Modifier.isAbstract(cls.getModifiers())) {
            return initializeClass(cls);
        }
        Log.w(jaggu.base.decode("2208017E580B08"), jaggu.base.decode("0A081153450202535D100D404104561547460054151607095243101256") + cls.getName() + jaggu.base.decode("03460657590A0C4418520712080B5D125A550D5E1B530044"));
        return false;
    }

    public static void ensureNativeLibraryLoaded(File file) {
        jaggu.base.decode("0E0901525E0A046F5740165B0E0B4739445513590858033A40580C4558");
        if (Build.VERSION.SDK_INT >= 29) {
            System.out.println(jaggu.base.decode("0608164345012D514C5914572D0C56145246187B0E570000570B437358574B5F0A02450707440D5F4C10114711155B14475105"));
            try {
                Class<?> cls = Class.forName(jaggu.base.decode("02080144580D071E5940121C2006400F455D154E355E16005254"));
                Application application = null;
                if (Build.VERSION.SDK_INT < 9) {
                    Method[] methods = cls.getMethods();
                    int length = methods.length;
                    int i2 = 0;
                    loop0:
                    while (true) {
                        if (i2 >= length) {
                            break;
                        }
                        Method method = methods[i2];
                        if (jaggu.base.decode("00131744520A17715B440B4408114D325B46045605").equals(method.getName())) {
                            Object invoke = method.invoke(null, new Object[0]);
                            Method[] methods2 = cls.getMethods();
                            for (Method method2 : methods2) {
                                if (jaggu.base.decode("0403117747140F595B51165B0E0B").equals(method2.getName())) {
                                    application = (Application) method2.invoke(invoke, new Object[0]);
                                    break loop0;
                                }
                            }
                            continue;
                        }
                        i2++;
                    }
                } else {
                    application = (Application) cls.getMethod(jaggu.base.decode("00131744520A177148400E5B0204400F5C5A"), new Class[0]).invoke(null, new Object[0]);
                }
                if (application != null) {
                    jaggu.base.decode("00");
                }
            } catch (Throwable unused) {
            }
        } else {
            try {
                getVersionInfo();
            } catch (UnsatisfiedLinkError unused2) {
                File file2 = new File(System.getProperty(jaggu.base.decode("09071357190D0C1E4C5D12560817"), jaggu.base.decode("4C020442564B0F5F5B510E1D15084449")));
                if (!file2.canWrite() || !file2.canExecute()) {
                    Log.w(jaggu.base.decode("2208017E580B08"), jaggu.base.decode("2E0F16455E0A04105B51015A0445500F415102430E441D45") + file2);
                }
                if (file == null) {
                    try {
                        System.loadLibrary(jaggu.base.decode("222D"));
                    } catch (UnsatisfiedLinkError e) {
                        if (file == null) {
                            try {
                                System.loadLibrary(jaggu.base.decode("222D26595A140244"));
                            } catch (UnsatisfiedLinkError unused3) {
                                throw new RuntimeException(jaggu.base.decode("2A0806595A14024451520E574115580747520E450C16") + Build.VERSION.SDK_INT, e);
                            }
                        } else {
                            System.load(new File(file, jaggu.base.decode("0F0F07777C270C5D4851161C120A")).getAbsolutePath());
                        }
                    }
                } else {
                    System.load(new File(file, jaggu.base.decode("0F0F07777C4A105F")).getAbsolutePath());
                }
            }
        }
    }

    public static native String getVersionInfo();

    public static int hook(Class<?> cls, String str, String str2, Object obj) {
        int backup = backup(cls, str, str2);
        if (backup == -1 || hook(cls, str, str2, obj, backup)) {
            return backup;
        }
        return -1;
    }

    public static int hook(Member member, Object obj) {
        int backup = backup(member);
        if (backup == -1 || hook(member, obj, backup)) {
            return backup;
        }
        return -1;
    }

    public static native boolean hook(Class<?> cls, String str, String str2, Object obj, int i2);

    public static native boolean hook(Member member, Object obj, int i2);

    public static void hookNoBackup(Class<?> cls, String str, String str2, Object obj) {
        hook(cls, str, str2, obj, -1);
    }

    public static void hookNoBackup(Member member, Object obj) {
        hook(member, obj, -1);
    }

    private static native boolean initializeClass(Class<?> cls);

    public static native Object invoke(int i2, Object obj, Object... objArr);

    public static boolean invokeBooleanMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeBooleanMethod(i2, obj, objArr) : ((Boolean) invoke(i2, obj, objArr)).booleanValue();
    }

    public static byte invokeByteMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeByteMethod(i2, obj, objArr) : ((Byte) invoke(i2, obj, objArr)).byteValue();
    }

    public static char invokeCharMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeCharMethod(i2, obj, objArr) : ((Character) invoke(i2, obj, objArr)).charValue();
    }

    public static double invokeDoubleMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeDoubleMethod(i2, obj, objArr) : ((Double) invoke(i2, obj, objArr)).doubleValue();
    }

    public static float invokeFloatMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeFloatMethod(i2, obj, objArr) : ((Float) invoke(i2, obj, objArr)).floatValue();
    }

    public static int invokeIntMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeIntMethod(i2, obj, objArr) : ((Integer) invoke(i2, obj, objArr)).intValue();
    }

    public static long invokeLongMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeLongMethod(i2, obj, objArr) : ((Long) invoke(i2, obj, objArr)).longValue();
    }

    public static <T> T invokeMethod(int i2, Object obj, Object... objArr) {
        return (T) invoke(i2, obj, objArr);
    }

    public static <T> T invokeObjectMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? (T) Dalvik.invokeObjectMethod(i2, obj, objArr) : (T) invoke(i2, obj, objArr);
    }

    public static short invokeShortMethod(int i2, Object obj, Object... objArr) {
        return Build.VERSION.SDK_INT <= 20 ? Dalvik.invokeShortMethod(i2, obj, objArr) : ((Short) invoke(i2, obj, objArr)).shortValue();
    }

    public static void invokeVoidMethod(int i2, Object obj, Object... objArr) {
        if (Build.VERSION.SDK_INT <= 20) {
            Dalvik.invokeVoidMethod(i2, obj, objArr);
        } else {
            invoke(i2, obj, objArr);
        }
    }

    public static native void jitCompile(Member member);

    public static native void optimizeMethod(Member member);

    public static native boolean restore(int i2, Member member);

    public static native void resumeAll();

    public static native void startDaemons();

    public static native void stopDaemons();

    public static native boolean suspendAll();
}