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
不过里面有些小错误不能工作,修复了如上
思想是这样的:在运行时, 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
不过里面有些小错误不能工作,修复了如上
相关文章推荐
- Android学习之模拟器上面应用的sdcard的创建使用
- Android中新建的文件在R没有显示对应的文件解决办法总结
- 安卓自定义组合控件 android.view.InflateException: Binary XML file #23:error inflate
- android stdio出现的 问题
- 自定义View(三)Android圆环两个颜色交替出现的等待效果
- Android Studio中安装Genymotion插件解决方案
- Android Service 之三(Bind Service, 继承自 Binder 类)
- Android -- DiskLruCache
- 六款值得推荐的android开源框架简介
- Android开发学习笔记:Service的简介和启动方式
- android 截图保存位置不在已选择的“SD卡”中
- Android文件访问权限
- 推荐一本Android开发入门书籍
- Android学习之SharePreferences轻量级数据存储
- Google I/O 2015 为 Android 开发者带来了哪些福利?
- Android 中的 Service 全面总结
- Android:不同drawable文件夹的区别
- Android 混淆代码总结
- Android Studio ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and c
- Android 内存溢出问题