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 com.google.android.gms.internal.zzcz.zza() calling method dalvik.system.DexClassLoader.<init>()


    public static com.google.android.gms.internal.zzcz zza(android.content.Context p9, String p10, String p11, boolean p12)
    {
        int v0_0 = 1;
        void v3_0 = new com.google.android.gms.internal.zzcz(p9);
        v3_0.zzaib = java.util.concurrent.Executors.newCachedThreadPool();
        v3_0.zzahg = p12;
        if (p12) {
            v3_0.zzaig = v3_0.zzaib.submit(new com.google.android.gms.internal.zzda(v3_0));
        }
        v3_0.zzaib.execute(new com.google.android.gms.internal.zzdc(v3_0));
        try {
            String v2_5;
            com.google.android.gms.internal.zzcz.zzain = com.google.android.gms.common.zze.zzaex();
        } catch (int v0) {
            v3_0.zza(0, 1);
            if ((!com.google.android.gms.internal.zzde.zzaq()) || (!((Boolean) com.google.android.gms.ads.internal.zzbv.zzen().zzd(com.google.android.gms.internal.zzmn.zzblx)).booleanValue())) {
                v3_0.zzaid = new com.google.android.gms.internal.zzcu(0);
                v3_0.zzaie = v3_0.zzaid.zzk(p10);
                try {
                    int v0_29 = v3_0.zzahz.getCacheDir();
                } catch (int v0_14) {
                    throw new com.google.android.gms.internal.zzcw(v0_14);
                } catch (int v0_13) {
                    throw new com.google.android.gms.internal.zzcw(v0_13);
                }
                if (v0_29 == 0) {
                    v0_29 = v3_0.zzahz.getDir("dex", 0);
                    if (v0_29 == 0) {
                        throw new com.google.android.gms.internal.zzcw();
                    }
                }
                String v1_19 = v0_29;
                Object[] v5_5 = new Object[2];
                v5_5[0] = v1_19;
                v5_5[1] = "1496809943795";
                String v4_9 = new java.io.File(String.format("%s/%s.jar", v5_5));
                if (!v4_9.exists()) {
                    int v0_35 = v3_0.zzaid.zzb(v3_0.zzaie, p11);
                    v4_9.createNewFile();
                    Object[] v5_8 = new java.io.FileOutputStream(v4_9);
                    v5_8.write(v0_35, 0, v0_35.length);
                    v5_8.close();
                }
                v3_0.zzb(v1_19, "1496809943795");
                try {
                    v3_0.zzaic = new dalvik.system.DexClassLoader(v4_9.getAbsolutePath(), v1_19.getAbsolutePath(), 0, v3_0.zzahz.getClassLoader());
                } catch (int v0_3) {
                    com.google.android.gms.internal.zzcz.zza(v4_9);
                    v3_0 = v3_0.zza(v1_19, "1496809943795");
                    Object[] v5_2 = new Object[2];
                    v5_2[0] = v1_19;
                    v5_2[1] = "1496809943795";
                    com.google.android.gms.internal.zzcz.zzl(String.format("%s/%s.dex", v5_2));
                    throw v0_3;
                }
                com.google.android.gms.internal.zzcz.zza(v4_9);
                v3_0 = v3_0.zza(v1_19, "1496809943795");
                String v4_4 = new Object[2];
                v4_4[0] = v1_19;
                v4_4[1] = "1496809943795";
                com.google.android.gms.internal.zzcz.zzl(String.format("%s/%s.dex", v4_4));
                v3_0.zzaij = new com.google.android.gms.internal.zzcm(v3_0);
                v3_0.zzaip = 1;
                return v3_0;
            } else {
                throw new IllegalStateException("Task Context initialization must not be called from the UI thread.");
            }
        }
        if (com.google.android.gms.common.zze.zzbw(v3_0.zzahz) <= 0) {
            v2_5 = 0;
        } else {
            v2_5 = 1;
        }
        v3_0.zzaik = v2_5;
        if (com.google.android.gms.internal.zzcz.zzain.isGooglePlayServicesAvailable(v3_0.zzahz) != 0) {
            v0_0 = 0;
        }
        v3_0.zzaim = v0_0;
    }

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


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

Method mono.MonoPackageManager.LoadApplication() calling method java.lang.System.loadLibrary()


    public static void LoadApplication(android.content.Context p11, android.content.pm.ApplicationInfo p12, String[] p13)
    {
        try {
            if ((p11 instanceof android.app.Application)) {
                mono.MonoPackageManager.Context = p11;
            }
        } catch (int v0_2) {
            throw v0_2;
        }
        if (!mono.MonoPackageManager.initialized) {
            p11.registerReceiver(new mono.android.app.NotifyTimeZoneChanges(), new android.content.IntentFilter("android.intent.action.TIMEZONE_CHANGED"));
            int v0_3 = java.util.Locale.getDefault();
            int v0_6 = new StringBuilder().append(v0_3.getLanguage()).append("-").append(v0_3.getCountry()).toString();
            String[] v1_7 = p11.getFilesDir().getAbsolutePath();
            String[] v5_0 = p11.getCacheDir().getAbsolutePath();
            String[] v6_0 = mono.MonoPackageManager.getNativeLibraryPath(p11);
            ClassLoader v4 = p11.getClassLoader();
            String v2_3 = android.os.Environment.getExternalStorageDirectory();
            String v7_6 = new java.io.File(v2_3, new StringBuilder().append("Android/data/").append(p11.getPackageName()).append("/files/.__override__").toString()).getAbsolutePath();
            int v8_10 = new java.io.File(v2_3, new StringBuilder().append("../legacy/Android/data/").append(p11.getPackageName()).append("/files/.__override__").toString()).getAbsolutePath();
            System.loadLibrary("monodroid");
            String v2_5 = mono.MonoPackageManager.getNativeLibraryPath(p12);
            String[] v3_5 = new String[3];
            v3_5[0] = v1_7;
            v3_5[1] = v5_0;
            v3_5[2] = v6_0;
            String[] v5_1 = new String[2];
            v5_1[0] = v7_6;
            v5_1[1] = v8_10;
            mono.android.Runtime.init(v0_6, p13, v2_5, v3_5, v4, v5_1, mono.MonoPackageManager_Resources.Assemblies, p11.getPackageName(), android.os.Build$VERSION.SDK_INT, mono.android.app.XamarinAndroidEnvironmentVariables.Variables);
            mono.android.app.ApplicationRegistration.registerApplications();
            mono.MonoPackageManager.initialized = 1;
        }
        return;
    }