如何防止APP被二次打包
2015-12-02 17:03
561 查看
要实现代码内部防止APP被二次打包首先得了解APK的机器识别原理,APK的唯一识别是依靠包名和签名来做鉴定的,类似豌豆夹的洗白白、360手机卫士等安全软件对APK的山寨识别,他们就是依赖包名来确定APK然后通过签名来确定其是否山寨。所以说自己的程序内部在启动的时候可以通过获取APK本身的签名然后和正确的签名做对比来识别自己是否被二次打包。
要实现代码内部防止APP被二次打包首先得了解APK的机器识别原理,APK的唯一识别是依靠包名和签名来做鉴定的,类似豌豆夹的洗白白、360手机卫士等安全软件对APK的山寨识别,他们就是依赖包名来确定APK然后通过签名来确定其是否山寨。所以说自己的程序内部在启动的时候可以通过获取APK本身的签名然后和正确的签名做对比来识别自己是否被二次打包。
通过对签名的码就可以识别其APK是否被盗版。此方法能够起到一定的安全作用,一般的打包党面对它是无可奈何的,如果你了解一些smali语法它的作用就等于0了。
要实现代码内部防止APP被二次打包首先得了解APK的机器识别原理,APK的唯一识别是依靠包名和签名来做鉴定的,类似豌豆夹的洗白白、360手机卫士等安全软件对APK的山寨识别,他们就是依赖包名来确定APK然后通过签名来确定其是否山寨。所以说自己的程序内部在启动的时候可以通过获取APK本身的签名然后和正确的签名做对比来识别自己是否被二次打包。
/** * 获取应用签名 * * @param context * @param pkgName */ public static String getSign(Context context, String pkgName) { try { PackageInfo pis = context.getPackageManager().getPackageInfo( pkgName, PackageManager.GET_SIGNATURES); return hexdigest(pis.signatures[0].toByteArray()); } catch (NameNotFoundException e) { throw new RuntimeException(SystemTool.class.getName() + "the " + pkgName + "'s application not found"); } }
/** * 将签名字符串转换成需要的32位签名 */ private static String hexdigest(byte[] paramArrayOfByte) { final char[] hexDigits = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102 }; try { MessageDigest localMessageDigest = MessageDigest.getInstance("MD5"); localMessageDigest.update(paramArrayOfByte); byte[] arrayOfByte = localMessageDigest.digest(); char[] arrayOfChar = new char[32]; for (int i = 0, j = 0;; i++, j++) { if (i >= 16) { return new String(arrayOfChar); } int k = arrayOfByte[i]; arrayOfChar[j] = hexDigits[(0xF & k >>> 4)]; arrayOfChar[++j] = hexDigits[(k & 0xF)]; } } catch (Exception e) { } return ""; }
通过对签名的码就可以识别其APK是否被盗版。此方法能够起到一定的安全作用,一般的打包党面对它是无可奈何的,如果你了解一些smali语法它的作用就等于0了。
相关文章推荐
- EditText设置cursor位置
- iOS 多线程下的NStimer 的使用
- PullToRefreshListView 如何返回顶部
- iOS开发常见正则表达式
- ios textField 输入值监听
- iOS RunLoop 初识
- iOS开发笔记-判断输入的是否是字母
- iOS开发之核心动画
- iOS开发笔记- 判断是否是数字
- 二、WorldWindJavaApplet
- [原]iOS--字符编码,NSString和UTF-8间的转换
- Android4.4设置状态栏为透明
- Error:Execution failed for task ':app:packageRelease'. > Failed to read key brautyfarm from store "G
- 好的iOS GitHub链接
- iOS客户端学习-SDWebImage
- Unity3d 手游之旅
- cocos2dx-lua方法笔记
- Android开发中Activity属性设置
- 深入分析:Android中app之间的交互(二,使用ComponentName)
- Android引导指示层的制作 (ViewStub + SharePreference)