ページ

2013/05/03

[Android]アプリケーション(.apk)の自己署名を検証する

簡単なリパッケージ対策のコード。
参考
Android アプリケーション(.apk)の自己署名を検証する方法 | Tech Booster

どの程度効果があるのかは知らないけど
スキルの低い人には効果があるかもしれない。
気休め程度に導入してみた。
/**
 * 正しく署名されているかチェックする
 * 
 * @param context
 * @return
 */
public static boolean checkSigneture(Context context){
    PackageManager pm = context.getPackageManager();
    try{
        PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        // 通常[0]のみ
        for(int i = 0; i < packageInfo.signatures.length; i++){
            Signature signature = packageInfo.signatures[i];
            if(BuildConfig.DEBUG){
                if(DEBUG_KEY.equals(signature.toCharsString())){
                    return true;
                }
            }else{
                if(RELEASE_KEY.equals(signature.toCharsString())){
                    return true;
                }
            }
        }
    }catch(NameNotFoundException e){
        e.printStackTrace();
    }
    return false;
}