您的位置:首页 > 移动开发 > Android开发

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

2015-07-20 10:24 537 查看
我们都知道现在疯狂地利用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
不过里面有些小错误不能工作,修复了如上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: