Android安全--运行时验证签名

我们都知道现在疯狂地利用dex2jar、apktool等工具进行的反编译二次打包,除了做代码混淆之外,我们还得做一些事情让他们难度上升,时间成本上升,当然这些都是简单的想法,还是能够被搞掉的,这些是防止那些自动工具破解。

思想是这样的:在运行时, android PackageManger允许我们得到已安装应用程序的签名,利用检查签名的指纹,然后在程序中存上一个原装指纹可以放到此处,可以放到服务器上,作对比,如果匹配就让其运行,否则。。。。

代码比较简单:

// SIGNATURE 记得要改成自己的,在得到自己的签名指纹的时候把DEBUG置为false

public class SignedCertificate {

	private static final boolean DEBUG = true;

	private static final String SIGNATURE = "U3avmVG32YEX7gfDwfOuM4nvtFY=";

	public static boolean checkAppSignature(Context context) {
		try {
			PackageInfo packageInfo = context.getPackageManager()
					.getPackageInfo(context.getPackageName(),
							PackageManager.GET_SIGNATURES);

			Signature signature = packageInfo.signatures[0];

			MessageDigest mDigest = MessageDigest.getInstance("SHA");
			mDigest.update(signature.toByteArray());
			final String currentSign = Base64.encodeToString(mDigest.digest(),
					Base64.DEFAULT).trim();
			if (DEBUG) {
				Log.d("MYapp", "Sinature:" + currentSign);
			}

			if (SIGNATURE.equals(currentSign)) {
				return true;
			}

		} catch (NameNotFoundException | NoSuchAlgorithmException e) {
			e.printStackTrace();
		}

		return false;
	}

}

原至:https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app

不过里面有些小错误不能工作,修复了如上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值