はじめに
AppNetBlockerというINTERNETパーミッションを消しちゃうアプリが出ました。
そもそもアプリ改竄自体いいのかどうか。まぁ怪しいパーミッション消したいとかいうのも判るけども。
AppNetBlockerに限らず実際にはINTERNETパーミッションどころじゃなくこんなアプリ↓まで既にAndroid Marketでは販売されています。
https://market.android.com/details?id=com.gmail.exathink.appshield
一部でapk改竄は著作権の侵害に当たるといった声もありますねー。しらんけど。
僕はよくわからないんでとりあえずなんとも言えないですけど、
パーミッション改竄されたかどうかは検知しとくかー
という感じです。実装
どっかのUtilクラスにでもコピペして下さい。
private static List<String> missingPermissions(Context context, String[] expectations) { return missingPermissions(context, new ArrayList<String>(Arrays.asList(expectations))); } private static List<String> missingPermissions(Context context, List<String> expectations){ if (context == null || expectations == null) { return null; } try { PackageManager pm = context.getPackageManager(); PackageInfo pi = pm.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS); String[] info = pi.requestedPermissions; if (info != null) { for (String i : info) { expectations.remove(i); } } return expectations; } catch (NameNotFoundException e) { e.printStackTrace(); } return null; }
使い方
missingPermissionsにアプリケーションが本来持っているべきパーミッションのリストを渡すと、消えてる奴が返ってきます。
改竄されてなければ空リストが返るはずです。nullの時は多分何かエラーが発生していると思います。知らん。
import android.Manifest.permission; //〜〜略〜〜 List<String> missing = missingPermissions(this, new String[]{permission.INTERNET, permission.WRITE_EXTERNAL_STORAGE} ); if(mission != null && !missing.isEmpty()){ //なんか改竄されてる! }
こういう風に使えるかもしれないですね
おわりに
Twitterを引き続き注視していきまーす。
「使い方」のコードの6行目のnullチェックしている変数名が「missing」でなく「mission」になってますね。
返信削除