Android通过签名验证防止二次打包
来源:互联网 发布:tp5.0 项目源码 编辑:程序博客网 时间:2024/05/23 12:15
最近android版的游戏要上线,想到打包党轻松将自己的产品破解,然后二次打包就恼火,所以就研究了下怎么防止打包党从中得益的方法。
Android的app必须要有签名才能安装到用户的手机上,开发者在开发期间调试,eclipse会自动为程序创建一个debug.keystore的证书文件,这样就能正常的安装调试。可是在正式版的时候,我们一定要申请自己的证书文件,这样在导出apk包得时候会通过这个文件进行签名。
具体操作如下:
右键项目->Export->Android->Export Android Application->Next->选择导出的项目(默认当前项目)->Next:
此时会看到如下图:
因为我之前创建过文件,所以默认会是用之前使用过的签名文件,如果你还没没有这个文件,请选择create new keystore。
然后按照说明,选择一个本地文件路径,填写上密码。
Next->
填写一些必要的描述:
依次Next,就可以导出项目了。
到此,你已经导出了自己的项目,并且已经拥有了自己的签名文件,这个文件可以应用到自己的所有项目中。
接下来我们要在程序中通过这个签名来验证项目是否是自己的了,因为打包党在将项目反编译重新打包之后,一定要用自己的签名重新打包,据我所知打包党是不太可能绕过签名就可以直接进行打包的,所以签名文件肯定会有变化,如果发现不一样,我们就可以认为当前程序是非法的。
下面是通过android的api获取程序的签名的代码:
static public String getSignature(){ Activity activity = currentActivity; PackageManager manager = activity.getPackageManager(); String md5 = ""; try { PackageInfo packageInfo = manager.getPackageInfo(activity.getPackageName(), PackageManager.GET_SIGNATURES); Signature[] signs = packageInfo.signatures; Signature sign = signs[0]; md5 = md5(sign.toCharsString()); } catch (NameNotFoundException e) { // TODO Auto-generated catch block // TODO Auto-generated catch block e.printStackTrace(); } return md5; } public static String md5(String string) { byte[] hash; try { hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("Huh, MD5 should be supported?", e); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Huh, UTF-8 should be supported?", e); } StringBuilder hex = new StringBuilder(hash.length * 2); for (byte b : hash) { if ((b & 0xFF) < 0x10) hex.append("0"); hex.append(Integer.toHexString(b & 0xFF)); } return hex.toString(); }
这个方法是获取签名的md5,由于我的游戏是cocos2d-x开发的,所以这些代码会通过cocos2d-x的.so库调用,如果是使用相同的签名的话,返回的字符串一定是唯一的,如果和自己的不匹配,就可以认为是非法应用,这时候可以强制将程序退出,或者做一些其他的操作,提醒用户去正版渠道下载。
我是通过在正式版签名的时候创建一个cocos2d-x标签来展示出md5值,然后记录下来,进行简单加密存储成一个标量保存在.so中,在调用获取md5的时候,通过解密这个变量并比对md5是否相同来识别程序是否合法。
这是乌云讲解关于怎么破解android包得文章
http://drops.wooyun.org/mobile/4296
- Android通过签名验证防止二次打包
- Unity中针对Android Apk的签名验证(C#实现),防止二次打包
- Unity中针对Android Apk的签名验证(C#实现),防止二次打包
- Android APP如何防止二次打包------对比签名
- 获取应用程序的签名,防止二次打包
- 二次打包签名apk(android)
- Android-安全-签名验证让二次打包变的更难
- Android-安全-签名验证让二次打包变的更难
- Android-安全-签名验证让二次打包变的更难
- Android APP如何防止二次打包
- Android APP如何防止二次打包
- Android APP如何防止二次打包
- Android反编译、查看源码、二次打包、签名步骤说明
- Android JNI 防二次打包应用签名检测
- android加固apk包,并防止apk被二次打包
- Android防止APK被反编译和二次打包
- APP如何防止二次打包
- 如何防止app二次打包
- java中的引用类型概念
- 阿姆斯特朗数
- RPM命令详解(安装、升级、卸载)
- 内核对象
- KMP字符串匹配算法的伪代码
- Android通过签名验证防止二次打包
- maven eclipse 插件安装
- Apple IAP官方文档
- CocoaAsyncSocket网络通信使用之数据编码和解码(二)
- iterator与const_iterator及const iterator区别
- 用转换器将word转为ppt的转换过程
- 中国と温暖化―対策の強化と前倒しを
- Mac下hosts文件配置
- asp.net 后台弹框,过一定时间跳到另外一个页面