CodePermissions¶
This is an autogenerated documentation file for the script: CodePermissions
Run it¶
$ ./androanalyze scripts_builtin/CodePermissions.py --package-names com.spotify.music
View the results¶
Non-Binary¶
$ ./androquery result -sn CodePermissions -pn com.spotify.music
{
"apk meta": {
"package name": "com.spotify.music",
"version name": "2.2.0.636",
"sha256": "bbf2c7d7b8fbbce68a97a2f0fd7e854e29b1ea9e3836615e7e6a35095915a607",
"import date": "2015-04-14T15:10:06.364000",
"build_date": "2015-02-11T12:25:40",
"path": "/mnt/stuff/btsync/apks_manual_downloads/02.03.2015_top_free_4/apps_topselling_free/MUSIC_AND_AUDIO/com.spotify.music.apk",
"tag": null
},
"script meta": {
"name": "CodePermissions",
"sha256": "af0a194e42630d36588910fc4bc58258e86b5ae2c1eddcb3e467c23e9f6c231b",
"analysis date": "2015-06-22T20:22:51.758000",
"version": "0.1"
},
"code permissions": {
"listing": {
"FACTORY_TEST": [],
"ACCESS_NETWORK_STATE": [
"Lcom.google.android.gms.internal.hu.<init>",
"Lcom.comscore.utils.e.c",
"Lcom.spotify.music.spotlets.networkoperatorpremiumactivation.NetworkOperatorConnectivityChecker.c",
"Lcom.squareup.picasso.aa.a",
"Lcom.comscore.utils.e.d",
"Lcom.c.g.a",
"Lcom.mixpanel.android.mpmetrics.x.b",
"Lcom.c.h.b",
"Lcom.squareup.picasso.j.d",
"Lcom.comscore.utils.e.e",
"Lcom.spotify.music.spotlets.networkoperatorpremiumactivation.NetworkOperatorConnectivityChecker.b",
"Lcom.spotify.mobile.android.f.x.e",
"Lcom.spotify.mobile.android.util.bm.a",
"Lcom.google.android.gms.internal.hu.a",
"Lcom.comscore.utils.e.a",
"Lcom.comscore.utils.e.b",
"Lcom.squareup.picasso.m.onReceive",
"Lcom.mixpanel.android.mpmetrics.e.a",
"Lcom.spotify.mobile.android.core.internal.ConnectivityListener.getConnectionType",
"Lcom.spotify.mobile.android.spotlets.search.a.c"
],
"NFC": [
"Lcom.spotify.mobile.android.util.a.a.<init>"
],
"BROADCAST_STICKY": [
"Lcom.spotify.mobile.android.service.am.a"
],
"MODIFY_AUDIO_SETTINGS": [
"Lcom.spotify.mobile.android.f.d.b",
"Lcom.spotify.mobile.android.f.r$14.c",
"Lcom.spotify.mobile.android.f.r$14.a"
],
"USE_CREDENTIALS": [
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$5.b",
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$3.b",
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$2.b",
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$6.b"
],
"WAKE_LOCK": [
"Lcom.spotify.mobile.android.spotlets.openaccess.util.d.q",
"Lcom.spotify.mobile.android.spotlets.video.BackgroundableVideoService.f",
"Lcom.spotify.mobile.android.spotlets.video.BackgroundableVideoService.a",
"Lcom.spotify.mobile.android.f.r$8.a",
"Lcom.spotify.mobile.android.spotlets.openaccess.util.d.g",
"Lcom.spotify.mobile.android.f.r$8.b",
"Lcom.spotify.mobile.android.f.r$15.b",
"Lcom.spotify.mobile.android.spotlets.video.BackgroundableVideoService.h",
"Lcom.spotify.mobile.android.core.internal.LocalFilePlayer.play",
"Lcom.spotify.mobile.android.f.r$15.a",
"Lcom.spotify.mobile.android.spotlets.video.BackgroundableVideoService$3.run",
"Lcom.spotify.mobile.android.spotlets.video.BackgroundableVideoService.b"
],
"VIBRATE": [],
"BLUETOOTH": [
"Lcom.ford.syncV4.transport.a.a",
"Lcom.ford.syncV4.transport.b.a",
"Lcom.ford.syncV4.transport.c.c",
"Lcom.mixpanel.android.mpmetrics.x.c",
"Lcom.ford.syncV4.transport.c.b",
"Lcom.spotify.mobile.android.applink.AppLinkBluetoothManager.a",
"Lcom.ford.syncV4.trace.e.a"
],
"ACCESS_WIFI_STATE": [
"Lcom.comscore.utils.e.a"
],
"MANAGE_ACCOUNTS": [
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$4.b"
],
"GET_ACCOUNTS": [
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$4.b",
"Lcom.spotify.mobile.android.arsenal.q.a",
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$5.b",
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$6.b",
"Lcom.sony.snei.np.android.account.oauth.a.a.c.a$2.b"
],
"READ_CONTACTS": [
"Lcom.spotify.mobile.android.service.media.provider.MediaProvider.openFile",
"Lcom.squareup.picasso.h.c",
"Lcom.spotify.mobile.android.ui.activity.AnnotatePlaylistActivity.c",
"Lcom.squareup.picasso.g.c",
"Landroid.support.v7.widget.bo.a"
],
"CHANGE_COMPONENT_ENABLED_STATE": [
"Lcom.spotify.mobile.android.spotlets.collection.service.AnnotateService.a"
],
"READ_PHONE_STATE": [
"Lcom.sony.snei.np.android.a.a.d.b",
"Lcom.spotify.mobile.android.util.an.i"
],
"INTERNET": [
"Lnet.hockeyapp.android.a.a.<init>",
"Lcom.loopj.android.http.b.<init>",
"Lcom.google.android.gms.internal.iu.a",
"Lcom.ford.syncV4.transport.g.a",
"Lcom.squareup.okhttp.internal.http.c.connect",
"Lcom.sony.snei.np.android.common.oauth.authgw.lib.b.a",
"Lcom.spotify.mobile.android.ui.fragments.y.a",
"Lcom.comscore.utils.e.c",
"Lcom.facebook.internal.n.b",
"Lcom.squareup.okhttp.g.a",
"Lcom.spotify.mobile.android.spotlets.browse.util.d.a",
"Lnet.hockeyapp.android.views.UpdateView.b",
"Lcom.ford.syncV4.proxy.j.a",
"Lcom.google.android.gms.internal.il.f",
"Lcom.squareup.picasso.ao.a",
"Lcom.google.android.gms.internal.ir$2.call",
"Lcom.squareup.okhttp.internal.http.HttpURLConnectionImpl.<init>",
"Lcom.ford.syncV4.transport.i.b",
"Lcom.c.r.<init>",
"Lcom.spotify.mobile.android.spotlets.collection.service.AnnotateServiceHelperImpl.b",
"Lcom.google.android.gms.internal.iy.<init>",
"Lcom.google.android.gms.internal.jc.onCreateWindow",
"Lcom.facebook.Request.a",
"Lcom.google.android.gms.internal.hp.a",
"Lcom.mixpanel.android.mpmetrics.ServerMessage.a",
"Lcom.google.android.gms.internal.jd.a",
"Lcom.squareup.okhttp.internal.http.ae.<init>",
"Lcom.facebook.widget.o$3.<init>",
"Lnet.hockeyapp.android.b.a",
"Lcom.google.android.gms.ads.AdActivity.setContentView",
"Lcom.comscore.metrics.a.a",
"Lcom.spotify.mobile.android.orbit.OrbitLibraryLoader.copyLibFromApk",
"Lcom.c.q.run"
]
},
"code": {
"FACTORY_TEST": [],
"ACCESS_NETWORK_STATE": [
{
"Lcom_spotify_mobile_android_spotlets_search_a_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_comscore_utils_e_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_comscore_utils_e_e": [
" public void e(android.os.Bundle p1)",
" {",
" return;",
" }"
]
},
{
"Lcom_spotify_music_spotlets_networkoperatorpremiumactivation_NetworkOperatorConnectivityChecker_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_mixpanel_android_mpmetrics_x_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_squareup_picasso_j_d": [
" public final int describeContents()",
" {",
" return 0;",
" }"
]
},
{
"Lcom_spotify_mobile_android_core_internal_ConnectivityListener_getConnectionType": [
" public int getConnectionType()",
" {",
" int v0_0 = 3;",
" if (com.spotify.mobile.android.core.internal.ConnectivityListener.sApplicationContext != null) {",
" int v3_2 = this.mConnectivityManager.getActiveNetworkInfo();",
" if ((v3_2 != 0) && (v3_2.isConnected())) {",
" int v3_3 = v3_2.getType();",
" if (v3_3 != 0) {",
" if (v3_3 == 6) {",
" return v0_0;",
" } else {",
" if (v3_3 == 1) {",
" v0_0 = 4;",
" return v0_0;",
" }",
" }",
" } else {",
" int v3_5 = this.mTelephonyManager.getNetworkType();",
" if (v3_5 >= 3) {",
" return v0_0;",
" } else {",
" if (v3_5 != 2) {",
" if (v3_5 == 1) {",
" v0_0 = 1;",
" return v0_0;",
" }",
" } else {",
" v0_0 = 2;",
" return v0_0;",
" }",
" }",
" }",
" v0_0 = -1;",
" } else {",
" v0_0 = 0;",
" }",
" return v0_0;",
" } else {",
" throw new IllegalStateException(\"application context has not been set!\");",
" }",
" }"
]
},
{
"Lcom_mixpanel_android_mpmetrics_e_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_squareup_picasso_aa_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_hu_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_hu_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_spotify_music_spotlets_networkoperatorpremiumactivation_NetworkOperatorConnectivityChecker_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_comscore_utils_e_d": [
" public final int describeContents()",
" {",
" return 0;",
" }"
]
},
{
"Lcom_mixpanel_android_mpmetrics_e_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_x_e": [
" public void e(android.os.Bundle p1)",
" {",
" return;",
" }"
]
},
{
"Lcom_c_h_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_comscore_utils_e_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_spotify_mobile_android_util_bm_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_c_g_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_hu_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_comscore_utils_e_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_squareup_picasso_m_onReceive": [
" public final void onReceive(android.content.Context p2, android.content.Intent p3)",
" {",
" if (this.a.c) {",
" this.a.b();",
" }",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_search_a_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_spotify_mobile_android_util_bm_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"NFC": [
{
"Lcom_spotify_mobile_android_util_a_a_<init>": [
" b()",
" {",
" return;",
" }"
]
}
],
"BROADCAST_STICKY": [
{
"Lcom_spotify_mobile_android_service_am_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"MODIFY_AUDIO_SETTINGS": [
{
"Lcom_spotify_mobile_android_f_r$14_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_d_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_r$14_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"USE_CREDENTIALS": [
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$2_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$6_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$6_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$2_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$5_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$5_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$3_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
}
],
"WAKE_LOCK": [
{
"Lcom_spotify_mobile_android_spotlets_video_BackgroundableVideoService$3_run": [
" public final void run()",
" {",
" if (android.support.v4.app.n.a) {",
" android.util.Log.v(\"FragmentManager\", new StringBuilder(\"Run: \").append(this).toString());",
" }",
" if ((!this.k) || (this.o >= 0)) {",
" int v10;",
" this.a(1);",
" if (android.os.Build$VERSION.SDK_INT < 21) {",
" v10 = 0;",
" } else {",
" int v0_6 = new android.util.SparseArray();",
" String v1_6 = new android.util.SparseArray();",
" this.b(v0_6, v1_6);",
" v10 = this.a(v0_6, v1_6, 0);",
" }",
" int v9;",
" if (v10 == 0) {",
" v9 = this.j;",
" } else {",
" v9 = 0;",
" }",
" String v1_7;",
" if (v10 == 0) {",
" v1_7 = this.i;",
" } else {",
" v1_7 = 0;",
" }",
" android.support.v4.app.f v8 = this.b;",
" while (v8 != null) {",
" int v7;",
" if (v10 == 0) {",
" v7 = v8.e;",
" } else {",
" v7 = 0;",
" }",
" android.support.v4.app.n v3_1;",
" if (v10 == 0) {",
" v3_1 = v8.f;",
" } else {",
" v3_1 = 0;",
" }",
" switch (v8.c) {",
" case 1:",
" int v0_32 = v8.d;",
" v0_32.Q = v7;",
" this.a.a(v0_32, 0);",
" break;",
" case 2:",
" int v5;",
" int v0_22 = v8.d;",
" if (this.a.g == null) {",
" v5 = v0_22;",
" } else {",
" int v4_2 = 0;",
" v5 = v0_22;",
" while (v4_2 < this.a.g.size()) {",
" int v0_30 = ((android.support.v4.app.Fragment) this.a.g.get(v4_2));",
" if (android.support.v4.app.n.a) {",
" android.util.Log.v(\"FragmentManager\", new StringBuilder(\"OP_REPLACE: adding=\").append(v5).append(\" old=\").append(v0_30).toString());",
" }",
" if ((v5 == 0) || (v0_30.H == v5.H)) {",
" if (v0_30 != v5) {",
" if (v8.i == null) {",
" v8.i = new java.util.ArrayList();",
" }",
" v8.i.add(v0_30);",
" v0_30.Q = v3_1;",
" if (this.k) {",
" v0_30.B = (v0_30.B + 1);",
" if (android.support.v4.app.n.a) {",
" android.util.Log.v(\"FragmentManager\", new StringBuilder(\"Bump nesting of \").append(v0_30).append(\" to \").append(v0_30.B).toString());",
" }",
" }",
" this.a.a(v0_30, v1_7, v9);",
" } else {",
" v8.d = 0;",
" v5 = 0;",
" }",
" }",
" v4_2++;",
" }",
" }",
" if (v5 == 0) {",
" } else {",
" v5.Q = v7;",
" this.a.a(v5, 0);",
" }",
" break;",
" case 3:",
" int v0_21 = v8.d;",
" v0_21.Q = v3_1;",
" this.a.a(v0_21, v1_7, v9);",
" break;",
" case 4:",
" int v0_20 = v8.d;",
" v0_20.Q = v3_1;",
" this.a.b(v0_20, v1_7, v9);",
" break;",
" case 5:",
" int v0_19 = v8.d;",
" v0_19.Q = v7;",
" this.a.c(v0_19, v1_7, v9);",
" break;",
" case 6:",
" int v0_18 = v8.d;",
" v0_18.Q = v3_1;",
" this.a.d(v0_18, v1_7, v9);",
" break;",
" case 7:",
" int v0_17 = v8.d;",
" v0_17.Q = v7;",
" this.a.e(v0_17, v1_7, v9);",
" break;",
" default:",
" throw new IllegalArgumentException(new StringBuilder(\"Unknown cmd: \").append(v8.c).toString());",
" }",
" v8 = v8.a;",
" }",
" this.a.a(this.a.n, v1_7, v9, 1);",
" if (this.k) {",
" this.a.b(this);",
" }",
" return;",
" } else {",
" throw new IllegalStateException(\"addToBackStack() called after commit()\");",
" }",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_openaccess_util_d_q": [
" final void q()",
" {",
" this.p = -1;",
" this.q = 0;",
" this.v = 0;",
" this.w = 0;",
" this.x = 0;",
" this.y = 0;",
" this.z = 0;",
" this.A = 0;",
" this.B = 0;",
" this.C = 0;",
" this.E = 0;",
" this.D = 0;",
" this.G = 0;",
" this.H = 0;",
" this.I = 0;",
" this.J = 0;",
" this.K = 0;",
" this.M = 0;",
" this.W = 0;",
" this.X = 0;",
" this.Y = 0;",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_video_BackgroundableVideoService_f": [
" public final void f(android.os.Bundle p3)",
" {",
" if (this.p < 0) {",
" this.r = p3;",
" return;",
" } else {",
" throw new IllegalStateException(\"Fragment already active\");",
" }",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_openaccess_util_d_g": [
" public final android.content.res.Resources g()",
" {",
" if (this.D != null) {",
" return this.D.getResources();",
" } else {",
" throw new IllegalStateException(new StringBuilder(\"Fragment \").append(this).append(\" not attached to Activity\").toString());",
" }",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_video_BackgroundableVideoService_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_video_BackgroundableVideoService_h": [
" public final android.support.v4.app.l h()",
" {",
" if (this.E == null) {",
" this.G();",
" if (this.k < 5) {",
" if (this.k < 4) {",
" if (this.k < 2) {",
" if (this.k > 0) {",
" this.E.l();",
" }",
" } else {",
" this.E.m();",
" }",
" } else {",
" this.E.n();",
" }",
" } else {",
" this.E.o();",
" }",
" }",
" return this.E;",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_r$15_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_video_BackgroundableVideoService_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_r$8_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_core_internal_LocalFilePlayer_play": [
" public void play()",
" {",
" if (this.mMediaPlayer != null) {",
" this.mMediaPlayer.start();",
" }",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_r$8_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_r$8_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_f_r$15_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"VIBRATE": [],
"BLUETOOTH": [
{
"Lcom_spotify_mobile_android_applink_AppLinkBluetoothManager_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_a_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_c_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_mixpanel_android_mpmetrics_x_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_ford_syncV4_transport_a_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_applink_AppLinkBluetoothManager_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_trace_e_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_applink_AppLinkBluetoothManager_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_c_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_spotify_mobile_android_applink_AppLinkBluetoothManager_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_b_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_a_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_trace_e_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"ACCESS_WIFI_STATE": [
{
"Lcom_comscore_utils_e_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"MANAGE_ACCOUNTS": [
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$4_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
}
],
"GET_ACCOUNTS": [
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$4_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$5_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$2_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_sony_snei_np_android_account_oauth_a_a_c_a$6_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_spotify_mobile_android_arsenal_q_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"READ_CONTACTS": [
{
"Lcom_squareup_picasso_h_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_squareup_picasso_g_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_squareup_picasso_h_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Landroid_support_v7_widget_bo_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_service_media_provider_MediaProvider_openFile": [
" public android.os.ParcelFileDescriptor openFile(android.net.Uri p5, String p6)",
" {",
" Throwable v0_7;",
" if (this.a()) {",
" switch (this.b.match(p5)) {",
" case 0:",
" long v2 = android.os.Binder.clearCallingIdentity();",
" try {",
" v0_7 = this.getContext().getContentResolver().openFileDescriptor(this.a.buildUpon().encodedPath(p5.getEncodedPath()).build(), p6);",
" android.os.Binder.restoreCallingIdentity(v2);",
" } catch (Throwable v0_8) {",
" android.os.Binder.restoreCallingIdentity(v2);",
" throw v0_8;",
" }",
" break;",
" default:",
" v0_7 = super.openFile(p5, p6);",
" }",
" } else {",
" v0_7 = super.openFile(p5, p6);",
" }",
" return v0_7;",
" }"
]
},
{
"Lcom_spotify_mobile_android_ui_activity_AnnotatePlaylistActivity_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_squareup_picasso_g_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_squareup_picasso_g_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
}
],
"CHANGE_COMPONENT_ENABLED_STATE": [
{
"Lcom_spotify_mobile_android_spotlets_collection_service_AnnotateService_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
}
],
"READ_PHONE_STATE": [
{
"Lcom_spotify_mobile_android_util_an_i": [
" final void i(android.os.Bundle p3)",
" {",
" this.e(p3);",
" if (this.E != null) {",
" android.os.Parcelable v0_2 = this.E.k();",
" if (v0_2 != null) {",
" p3.putParcelable(\"android:support:fragments\", v0_2);",
" }",
" }",
" return;",
" }"
]
},
{
"Lcom_sony_snei_np_android_a_a_d_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
}
],
"INTERNET": [
{
"Lcom_squareup_okhttp_g_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_c_q_run": [
" public final void run()",
" {",
" if (android.support.v4.app.n.a) {",
" android.util.Log.v(\"FragmentManager\", new StringBuilder(\"Run: \").append(this).toString());",
" }",
" if ((!this.k) || (this.o >= 0)) {",
" int v10;",
" this.a(1);",
" if (android.os.Build$VERSION.SDK_INT < 21) {",
" v10 = 0;",
" } else {",
" int v0_6 = new android.util.SparseArray();",
" String v1_6 = new android.util.SparseArray();",
" this.b(v0_6, v1_6);",
" v10 = this.a(v0_6, v1_6, 0);",
" }",
" int v9;",
" if (v10 == 0) {",
" v9 = this.j;",
" } else {",
" v9 = 0;",
" }",
" String v1_7;",
" if (v10 == 0) {",
" v1_7 = this.i;",
" } else {",
" v1_7 = 0;",
" }",
" android.support.v4.app.f v8 = this.b;",
" while (v8 != null) {",
" int v7;",
" if (v10 == 0) {",
" v7 = v8.e;",
" } else {",
" v7 = 0;",
" }",
" android.support.v4.app.n v3_1;",
" if (v10 == 0) {",
" v3_1 = v8.f;",
" } else {",
" v3_1 = 0;",
" }",
" switch (v8.c) {",
" case 1:",
" int v0_32 = v8.d;",
" v0_32.Q = v7;",
" this.a.a(v0_32, 0);",
" break;",
" case 2:",
" int v5;",
" int v0_22 = v8.d;",
" if (this.a.g == null) {",
" v5 = v0_22;",
" } else {",
" int v4_2 = 0;",
" v5 = v0_22;",
" while (v4_2 < this.a.g.size()) {",
" int v0_30 = ((android.support.v4.app.Fragment) this.a.g.get(v4_2));",
" if (android.support.v4.app.n.a) {",
" android.util.Log.v(\"FragmentManager\", new StringBuilder(\"OP_REPLACE: adding=\").append(v5).append(\" old=\").append(v0_30).toString());",
" }",
" if ((v5 == 0) || (v0_30.H == v5.H)) {",
" if (v0_30 != v5) {",
" if (v8.i == null) {",
" v8.i = new java.util.ArrayList();",
" }",
" v8.i.add(v0_30);",
" v0_30.Q = v3_1;",
" if (this.k) {",
" v0_30.B = (v0_30.B + 1);",
" if (android.support.v4.app.n.a) {",
" android.util.Log.v(\"FragmentManager\", new StringBuilder(\"Bump nesting of \").append(v0_30).append(\" to \").append(v0_30.B).toString());",
" }",
" }",
" this.a.a(v0_30, v1_7, v9);",
" } else {",
" v8.d = 0;",
" v5 = 0;",
" }",
" }",
" v4_2++;",
" }",
" }",
" if (v5 == 0) {",
" } else {",
" v5.Q = v7;",
" this.a.a(v5, 0);",
" }",
" break;",
" case 3:",
" int v0_21 = v8.d;",
" v0_21.Q = v3_1;",
" this.a.a(v0_21, v1_7, v9);",
" break;",
" case 4:",
" int v0_20 = v8.d;",
" v0_20.Q = v3_1;",
" this.a.b(v0_20, v1_7, v9);",
" break;",
" case 5:",
" int v0_19 = v8.d;",
" v0_19.Q = v7;",
" this.a.c(v0_19, v1_7, v9);",
" break;",
" case 6:",
" int v0_18 = v8.d;",
" v0_18.Q = v3_1;",
" this.a.d(v0_18, v1_7, v9);",
" break;",
" case 7:",
" int v0_17 = v8.d;",
" v0_17.Q = v7;",
" this.a.e(v0_17, v1_7, v9);",
" break;",
" default:",
" throw new IllegalArgumentException(new StringBuilder(\"Unknown cmd: \").append(v8.c).toString());",
" }",
" v8 = v8.a;",
" }",
" this.a.a(this.a.n, v1_7, v9, 1);",
" if (this.k) {",
" this.a.b(this);",
" }",
" return;",
" } else {",
" throw new IllegalStateException(\"addToBackStack() called after commit()\");",
" }",
" }"
]
},
{
"Lcom_loopj_android_http_b_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_comscore_metrics_a_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_collection_service_AnnotateServiceHelperImpl_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lnet_hockeyapp_android_b_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_squareup_picasso_ao_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_iu_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_ir$2_call": [
" public final Object call()",
" {",
" android.support.v4.content.ModernAsyncTask.a(this.a).set(1);",
" android.os.Process.setThreadPriority(10);",
" return android.support.v4.content.ModernAsyncTask.a(this.a, this.a.b());",
" }"
]
},
{
"Lcom_squareup_okhttp_internal_http_ae_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_browse_util_d_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_facebook_Request_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_facebook_internal_n_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_c_r_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_squareup_okhttp_internal_http_HttpURLConnectionImpl_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_proxy_j_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_ads_AdActivity_setContentView": [
" public void setContentView(int p2)",
" {",
" this.g().a(p2);",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_g_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_facebook_widget_o$3_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_spotlets_browse_util_d_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_sony_snei_np_android_common_oauth_authgw_lib_b_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lnet_hockeyapp_android_a_a_<init>": [
" b()",
" {",
" return;",
" }"
]
},
{
"Lcom_ford_syncV4_transport_i_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_squareup_okhttp_internal_http_c_connect": [
" public void connect()",
" {",
" try {",
" switch (com.spotify.cosmos.android.Resolver$4.$SwitchMap$com$spotify$cosmos$android$Resolver$State[this.mState.ordinal()]) {",
" case 1:",
" this.doConnect();",
" return;",
" default:",
" return;",
" }",
" } catch (Throwable v0_2) {",
" }",
" throw v0_2;",
" }"
]
},
{
"Lnet_hockeyapp_android_views_UpdateView_b": [
" public static boolean b(android.graphics.drawable.Drawable p1)",
" {",
" return android.support.v4.a.a.a.a.b(p1);",
" }"
]
},
{
"Lcom_google_android_gms_internal_ir$2_call": [
" public final Object call()",
" {",
" android.support.v4.content.ModernAsyncTask.a(this.a).set(1);",
" android.os.Process.setThreadPriority(10);",
" return android.support.v4.content.ModernAsyncTask.a(this.a, this.a.b());",
" }"
]
},
{
"Lcom_google_android_gms_internal_jd_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_hp_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_comscore_utils_e_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_spotify_mobile_android_orbit_OrbitLibraryLoader_copyLibFromApk": [
" private static boolean copyLibFromApk(java.net.URL p6, java.io.File p7)",
" {",
" java.io.IOException v2_0 = 0;",
" java.io.IOException v0_0 = 0;",
" try {",
" java.io.IOException v1 = p6.openStream();",
" try {",
" java.io.IOException v3_0 = new java.io.FileOutputStream(p7);",
" v2_0 = 512;",
" } catch (java.io.IOException v3) {",
" if (v2_0 != null) {",
" try {",
" v2_0.close();",
" } catch (java.io.IOException v2) {",
" }",
" }",
" if (v1 == null) {",
" return v0_0;",
" } else {",
" try {",
" v1.close();",
" } catch (java.io.IOException v1) {",
" }",
" return v0_0;",
" }",
" } catch (java.io.IOException v0_1) {",
" v3_0 = 512;",
" if (v3_0 != null) {",
" try {",
" v3_0.close();",
" } catch (java.io.IOException v2) {",
" }",
" }",
" if (v1 != null) {",
" try {",
" v1.close();",
" } catch (java.io.IOException v1) {",
" }",
" }",
" throw v0_1;",
" }",
" try {",
" java.io.IOException v2_1 = new byte[512];",
" } catch (java.io.IOException v2) {",
" v2_0 = v3_0;",
" } catch (java.io.IOException v0_1) {",
" }",
" while(true) {",
" int v4 = v1.read(v2_1);",
" if (v4 == -1) {",
" break;",
" }",
" v3_0.write(v2_1, 0, v4);",
" }",
" v3_0.flush();",
" try {",
" v3_0.close();",
" } catch (java.io.IOException v0) {",
" }",
" if (v1 != null) {",
" try {",
" v1.close();",
" } catch (java.io.IOException v0) {",
" }",
" }",
" v0_0 = 1;",
" return v0_0;",
" } catch (java.io.IOException v1) {",
" v1 = 0;",
" } catch (java.io.IOException v0_1) {",
" v1 = 0;",
" v3_0 = 0;",
" }",
" }"
]
},
{
"Lcom_google_android_gms_internal_il_f": [
" public final void f(android.os.Bundle p3)",
" {",
" if (this.p < 0) {",
" this.r = p3;",
" return;",
" } else {",
" throw new IllegalStateException(\"Fragment already active\");",
" }",
" }"
]
},
{
"Lcom_google_android_gms_internal_jc_onCreateWindow": [
" public final boolean onCreateWindow(android.webkit.WebView p4, boolean p5, boolean p6, android.os.Message p7)",
" {",
" int v0_1 = ((android.webkit.WebView$WebViewTransport) p7.obj);",
" android.webkit.WebView v1_1 = new android.webkit.WebView(p4.getContext());",
" v1_1.setWebViewClient(this.a.a);",
" v0_1.setWebView(v1_1);",
" p7.sendToTarget();",
" return 1;",
" }"
]
},
{
"Lcom_google_android_gms_internal_jd_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_sony_snei_np_android_common_oauth_authgw_lib_b_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_spotify_mobile_android_ui_fragments_y_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_comscore_utils_e_c": [
" public final synthetic Object createFromParcel(android.os.Parcel p2)",
" {",
" return android.support.v4.app.BackStackState$1.a(p2);",
" }"
]
},
{
"Lcom_mixpanel_android_mpmetrics_ServerMessage_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_comscore_metrics_a_a": [
" public static void a(android.graphics.drawable.Drawable p1)",
" {",
" android.support.v4.a.a.a.a.a(p1);",
" return;",
" }"
]
},
{
"Lcom_google_android_gms_internal_iy_<init>": [
" b()",
" {",
" return;",
" }"
]
}
]
}
}
}
Binary¶
For the case that the result may exceed 16MB, it is stored in MongoDB’s gridFS. Therefore we need to use a different query syntax:
View the meta data:
$ ./androquery result -sn CodePermissions -pn com.spotify.music -nd
Empty
View the raw data:
$ ./androquery result -sn CodePermissions -pn com.spotify.music -nd -r
Empty
Source¶
# encoding: utf-8
__author__ = "Nils Tobias Schmidt"
__email__ = "schmidt89 at informatik.uni-marburg.de"
from androguard.decompiler.dad import decompile
from androlyze.model.script.AndroScript import AndroScript
from androguard.core.analysis.analysis import PathP
# categories
CAT_PERMISSIONS = "code permissions"
PERMISSIONS_LISTING = "listing"
PERMISSIONS_CODE = "code"
def full_method_signature(method):
return '%s.%s.%s' % (method.get_class_name()[:-1], method.get_name(), method.get_descriptor())
def full_method_name(method):
return '%s.%s' % (method.get_class_name()[:-1].replace("/", "."), method.get_name())
class CodePermissions(AndroScript):
''' List where permissions are used in the code and decompile them '''
VERSION = "0.1"
def _analyze(self, apk, dalvik_vm_format, vm_analysis, gvm_analysis, *args, **kwargs):
res = self.res
res.register_keys([CAT_PERMISSIONS])
class_manager = dalvik_vm_format.get_class_manager()
perm_dict = vm_analysis.get_permissions([])
# register list for each used permissions keys
permissions = set(perm_dict.keys())
res.register_enum_keys(permissions, CAT_PERMISSIONS, PERMISSIONS_LISTING)
# register each permission only once!
res.register_enum_keys(permissions, CAT_PERMISSIONS, PERMISSIONS_CODE)
# use set to remove duplicates!
method_names = set()
method_analysis_objs = set()
for permission_name, pathp_obj_list in perm_dict.items():
# list<PathP>
for pathp in pathp_obj_list:
if isinstance(pathp, PathP):
# type: androguard.core.bytecodes.dvm.MethodIdItem
# the method that uses the permission
src_method = class_manager.get_method_ref(pathp.src_idx)
method_name = full_method_name(src_method)
method_names.add((permission_name, method_name))
# the api function for the permission
#dst_method = class_manager.get_method_ref(pathp.dst_idx)
# get androguard.core.bytecodes.dvm.EncodedMethod
encoded_method = dalvik_vm_format.get_method(src_method.get_name())[0]
# get androguard.core.analysis.analysis.MethodAnalysis
method_analysis = vm_analysis.get_method(encoded_method)
method_analysis_objs.add((permission_name, method_name, method_analysis))
for permission_name, method_name in method_names:
# log which classes use which permissions
res.log_append_to_enum(permission_name, method_name, CAT_PERMISSIONS, PERMISSIONS_LISTING)
for permission_name, method_name, method_analysis in method_analysis_objs:
ms = decompile.DvMethod(method_analysis)
ms.process()
source_code = ms.get_source()
# decompile these methods too!
log_val = {method_name : source_code.split("\n")[1:-1]}
res.log_append_to_enum(permission_name, log_val, CAT_PERMISSIONS, PERMISSIONS_CODE)
def needs_dalvik_vm_format(self):
return True
def needs_vmanalysis(self):
return True
if __name__ == '__main__':
for res in AndroScript.test(CodePermissions, ["../../../../testenv/apks/a2dp.Vol.apk"]):
print res
print res.write_to_json()