Info Call to dynamic code loading API

Description

List of all dynamic code loading API calls in the application. Loading code from untrsuted sources could allow the execution of malicious code in the context of the current application.

Recommendation

This entry is informative, no recommendations applicable.

Technical details

Method okhttp3.internal.platform.Platform.isConscryptPreferred() calling method java.lang.System.getProperty()


    public static boolean isConscryptPreferred()
    {
        if (!"conscrypt".equals(System.getProperty("okhttp.platform"))) {
            return "Conscrypt".equals(java.security.Security.getProviders()[0].getName());
        } else {
            return 1;
        }
    }

Method io.realm.internal.RealmCore.osIsWindows() calling method java.lang.System.getProperty()


    public static boolean osIsWindows()
    {
        return System.getProperty("os.name").toLowerCase(java.util.Locale.getDefault()).contains("win");
    }

Method io.realm.internal.RealmCore.loadLibraryWindows() calling method java.lang.System.getProperty()


    private static String loadLibraryWindows()
    {
        io.realm.internal.RealmCore.addNativeLibraryPath(io.realm.internal.RealmCore.BINARIES_PATH);
        io.realm.internal.RealmCore.resetLibraryPath();
        String v1_7 = new String[2];
        v1_7[0] = "realm_jni32d";
        v1_7[1] = "realm_jni64d";
        String v1_0 = io.realm.internal.RealmCore.loadCorrectLibrary(v1_7);
        if (v1_0 == null) {
            RuntimeException v0_1 = new String[2];
            v0_1[0] = "realm_jni32";
            v0_1[1] = "realm_jni64";
            v1_0 = io.realm.internal.RealmCore.loadCorrectLibrary(v0_1);
            if (v1_0 == null) {
                String v1_4 = new StringBuilder();
                v1_4.append("Searched java.library.path=");
                v1_4.append(System.getProperty("java.library.path"));
                System.err.println(v1_4.toString());
                throw new RuntimeException("Couldn\'t load the Realm JNI library \'realm_jni32.dll or realm_jni64.dll\'. Please include the directory to the library in java.library.path.");
            }
        } else {
            System.out.println("!!! Realm debug version loaded. !!!\n");
        }
        return v1_0;
    }

Method io.realm.internal.RealmCore.addNativeLibraryPath() calling method java.lang.System.getProperty()


    public static void addNativeLibraryPath(String p2)
    {
        try {
            RuntimeException v0_1 = new StringBuilder();
            v0_1.append(System.getProperty("java.library.path"));
            v0_1.append(io.realm.internal.RealmCore.PATH_SEP);
            v0_1.append(p2);
            v0_1.append(io.realm.internal.RealmCore.PATH_SEP);
            System.setProperty("java.library.path", v0_1.toString());
            return;
        } catch (Exception v2_2) {
            throw new RuntimeException("Cannot set the library path!", v2_2);
        }
    }

Method com.dimelo.glide.load.model.LazyHeaders$Builder.<clinit>() calling method java.lang.System.getProperty()


    static LazyHeaders$Builder()
    {
        com.dimelo.glide.load.model.LazyHeaders$Builder.DEFAULT_USER_AGENT = System.getProperty("http.agent");
        java.util.Map v0_4 = new java.util.HashMap(2);
        if (!android.text.TextUtils.isEmpty(com.dimelo.glide.load.model.LazyHeaders$Builder.DEFAULT_USER_AGENT)) {
            v0_4.put("User-Agent", java.util.Collections.singletonList(new com.dimelo.glide.load.model.LazyHeaders$StringHeaderFactory(com.dimelo.glide.load.model.LazyHeaders$Builder.DEFAULT_USER_AGENT)));
        }
        v0_4.put("Accept-Encoding", java.util.Collections.singletonList(new com.dimelo.glide.load.model.LazyHeaders$StringHeaderFactory("identity")));
        com.dimelo.glide.load.model.LazyHeaders$Builder.DEFAULT_HEADERS = java.util.Collections.unmodifiableMap(v0_4);
        return;
    }

Method android.support.multidex.MultiDex.doInstallation() calling method java.lang.System.getProperty()


    private static void doInstallation(android.content.Context p5, java.io.File p6, java.io.File p7, String p8, String p9)
    {
        try {
            if (!android.support.multidex.MultiDex.installedApk.contains(p6)) {
                android.support.multidex.MultiDex.installedApk.add(p6);
                if (android.os.Build$VERSION.SDK_INT > 20) {
                    String v3_1 = new StringBuilder();
                    v3_1.append("MultiDex is not guaranteed to work in SDK version ");
                    v3_1.append(android.os.Build$VERSION.SDK_INT);
                    v3_1.append(": SDK version higher than ");
                    v3_1.append(20);
                    v3_1.append(" should be backed by ");
                    v3_1.append("runtime with built-in multidex capabilty but it\'s not the ");
                    v3_1.append("case here: java.vm.version=\"");
                    v3_1.append(System.getProperty("java.vm.version"));
                    v3_1.append("\"");
                    android.util.Log.w("MultiDex", v3_1.toString());
                }
                ClassLoader v1_3 = p5.getClassLoader();
                if (v1_3 != null) {
                    try {
                        android.support.multidex.MultiDex.clearOldDexDir(p5);
                    } catch (Throwable v2_7) {
                        android.util.Log.w("MultiDex", "Something went wrong when trying to clear old MultiDex extraction, continuing without cleaning.", v2_7);
                    }
                    java.io.File v7_2 = android.support.multidex.MultiDex.getDexDir(p5, p7, p8);
                    android.support.multidex.MultiDex.installSecondaryDexes(v1_3, v7_2, android.support.multidex.MultiDexExtractor.load(p5, p6, v7_2, p9, 0));
                    return;
                } else {
                    android.util.Log.e("MultiDex", "Context class loader is null. Must be running in test mode. Skip patching.");
                    return;
                }
            } else {
                return;
            }
        } catch (java.util.List v5_4) {
            throw v5_4;
        }
    }

Method android.support.multidex.MultiDex.<clinit>() calling method java.lang.System.getProperty()


    static MultiDex()
    {
        android.support.multidex.MultiDex.installedApk = new java.util.HashSet();
        android.support.multidex.MultiDex.IS_VM_MULTIDEX_CAPABLE = android.support.multidex.MultiDex.isVMMultidexCapable(System.getProperty("java.vm.version"));
        return;
    }

Method com.getkeepsafe.relinker.SystemLibraryLoader.loadPath() calling method java.lang.System.load()


    public void loadPath(String p1)
    {
        System.load(p1);
        return;
    }

Method com.getkeepsafe.relinker.SystemLibraryLoader.loadLibrary() calling method java.lang.System.loadLibrary()


    public void loadLibrary(String p1)
    {
        System.loadLibrary(p1);
        return;
    }

Method io.realm.internal.RealmCore.loadCorrectLibrary() calling method java.lang.System.loadLibrary()


    private static varargs String loadCorrectLibrary(String[] p3)
    {
        int v0 = p3.length;
        int v1 = 0;
        while (v1 < v0) {
            String v2 = p3[v1];
            try {
                System.loadLibrary(v2);
                return v2;
            } catch (Throwable) {
                v1++;
            }
        }
        return 0;
    }

Method android.support.multidex.MultiDex$V4.install() calling method dalvik.system.DexFile.loadDex()


    private static void install(ClassLoader p10, java.util.List p11)
    {
        dalvik.system.DexFile[] v0_0 = p11.size();
        reflect.Field v1_1 = android.support.multidex.MultiDex.access$300(p10, "path");
        StringBuilder v2_1 = new StringBuilder(((String) v1_1.get(p10)));
        String[] v3_0 = new String[v0_0];
        java.io.File[] v4 = new java.io.File[v0_0];
        java.util.zip.ZipFile[] v5 = new java.util.zip.ZipFile[v0_0];
        dalvik.system.DexFile[] v0_1 = new dalvik.system.DexFile[v0_0];
        String v11_1 = p11.listIterator();
        while (v11_1.hasNext()) {
            dalvik.system.DexFile v6_2 = ((java.io.File) v11_1.next());
            String v7 = v6_2.getAbsolutePath();
            v2_1.append(58);
            v2_1.append(v7);
            int v8_1 = v11_1.previousIndex();
            v3_0[v8_1] = v7;
            v4[v8_1] = v6_2;
            v5[v8_1] = new java.util.zip.ZipFile(v6_2);
            dalvik.system.DexFile v6_4 = new StringBuilder();
            v6_4.append(v7);
            v6_4.append(".dex");
            v0_1[v8_1] = dalvik.system.DexFile.loadDex(v7, v6_4.toString(), 0);
        }
        v1_1.set(p10, v2_1.toString());
        android.support.multidex.MultiDex.access$400(p10, "mPaths", v3_0);
        android.support.multidex.MultiDex.access$400(p10, "mFiles", v4);
        android.support.multidex.MultiDex.access$400(p10, "mZips", v5);
        android.support.multidex.MultiDex.access$400(p10, "mDexs", v0_1);
        return;
    }

Method com.google.android.gms.dynamite.zzh.<init>() calling method dalvik.system.PathClassLoader.<init>()


    zzh(String p1, ClassLoader p2)
    {
        super(p1, p2);
        return;
    }