はじめに
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」になってますね。
返信削除