android 签名验证防止重打包
2016-01-22 21:08
399 查看
网上资料很多,这里只做一个笔记
反编译 dex 修改重新打包签名后 apk 的签名信息肯定会改变,所以可以在代码中判断签名信息是否
被改变过,如果签名不一致就退出程序,以防止 apk 被重新打包。
1 java 代码中验证签名
这种纯粹的字符比较都很容易破解掉,直接在 smali 中全局搜索干掉或修改你的签名验证逻辑就行了,实际上用处不大。
2 签名验证放到 native 层用 NDK 开发
这种验证稍微安全了一点,毕竟能逆向 C 和 C++ 的人要少一些。像我这种现在还不能逆向C的就无能为力了。
但对于能逆向C的同学来说,也是很轻易的就改掉你的验证逻辑,可以考虑加上,毕竟还是有点用的。
3 验证放到服务端
感觉没什么鸟用,直接干掉或修改你接口的判断逻辑的就行了。
还有很多高级方法可以直接绕过签名验证,还待研究。
反编译 dex 修改重新打包签名后 apk 的签名信息肯定会改变,所以可以在代码中判断签名信息是否
被改变过,如果签名不一致就退出程序,以防止 apk 被重新打包。
1 java 代码中验证签名
用 PackageManager 获取签名信息
public static int getSignature(Context context) { PackageManager pm = context.getPackageManager(); PackageInfo pi; StringBuilder sb = new StringBuilder(); try { pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); Signature[] signatures = pi.signatures; for (Signature signature : signatures) { sb.append(signature.toCharsString()); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return sb.toString().hashCode(); }
这种纯粹的字符比较都很容易破解掉,直接在 smali 中全局搜索干掉或修改你的签名验证逻辑就行了,实际上用处不大。
2 签名验证放到 native 层用 NDK 开发
这种验证稍微安全了一点,毕竟能逆向 C 和 C++ 的人要少一些。像我这种现在还不能逆向C的就无能为力了。
但对于能逆向C的同学来说,也是很轻易的就改掉你的验证逻辑,可以考虑加上,毕竟还是有点用的。
3 验证放到服务端
感觉没什么鸟用,直接干掉或修改你接口的判断逻辑的就行了。
还有很多高级方法可以直接绕过签名验证,还待研究。
相关文章推荐
- Android 沉浸式状态栏的三种实现方式
- Android通过hook技术实现透明加解密保障数据安全
- Android事件构成
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
- Android Support Annotations :安卓注解快速上手
- Android View绘制流程
- android开发遇到问题之一
- android散点技术
- android高级技术之相机的前后摄像头切换
- Android使用ViewPager实现图片轮播(高度自适应,左右循环,自动轮播)
- Android 线程池来管理线程
- Android radioButton布局及监听
- Android 通知栏的使用
- BLE Android开发中的问题
- Android中Context用法详解
- Android性能优化之常见的内存泄漏
- Android Button2.监听事件
- Android Context 上下文或者叫做场景
- Android kernel
- Android图片压缩(质量压缩和尺寸压缩 File, Stream和Bitmap)