android 签名验证防止重打包

网上资料很多,这里只做一个笔记
反编译 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 验证放到服务端
感觉没什么鸟用,直接干掉或修改你接口的判断逻辑的就行了。

还有很多高级方法可以直接绕过签名验证,还待研究。

时间: 2024-08-05 19:35:50

android 签名验证防止重打包的相关文章

谈谈Android重打包--架构

写在前面的话 写了这么多章的废话,今天终于开始可以算进入主题了.当然了,之后的故事发展也是我个人觉得比较激动人心的部分.因为,我们今天开始讲解的部分是架构部分. 从今以后你需要准备的东西就是你的大脑,恩,感觉说道跟动脑有关的时候有的人就会觉得好痛苦.放心把,我会尽力写的只要脑袋在头上都能看的懂的. 申明 此文章请勿转载,谢谢合作 系统架构 在这里我们说了,将会使用资源来判断Android是不是存在重打包的现象.在这一章我们将会说说这个系统的架构. 我们说过,之前有人是这么处理重打包问题,当然了,

谈谈Android重打包

写在前面的话 仅以此系列献给喜欢我CSDN的小伙伴们 申明 此文禁止转载,谢谢合作 序言 在开头说这会是一个系列,那就说明我有很多话要说.从最简单的介绍到问题的提出,解决方案的构思以及整个系统的架构实现测试都会在这个系列里一一说明.如果你还在迷茫该怎么去深入一个问题,一点点解决,那我尽力会通过这个系列让你有一点点感悟.如果你已经一览众山小,那么请给我多多提出建议. 不管你是何种程度的程序员,我的目的只有一个,这是写给大家看的东西.会用最简单最直白的方式表达,如果你不理解,一定是我的问题,你可以及

谈谈Android重打包--初语

写在前面的话 仅以此系列献给喜欢我CSDN的小伙伴们 申明 此文禁止转载,谢谢合作 序言 在开头说这会是一个系列,那就说明我有非常多话要说.从最简单的介绍到问题的提出.解决方式的构思以及整个系统的架构实现測试都会在这个系列里一一说明.假设你还在迷茫该怎么去深入一个问题,一点点解决,那我尽力会通过这个系列让你有一点点感悟.假设你已经一览众山小,那么请给我多多提出建议. 无论你是何种程度的程序猿,我的目的仅仅有一个.这是写给大家看的东西. 会用最简单最直白的方式表达.假设你不理解,一定是我的问题.你

谈谈Android重打包--雷区

写在前面的话 细节决定成败 申明 此文禁止转载,谢谢合作 雷区一: 签名 在Android系统中,所有安装到系统的应用程序都必须有一个数字证书, Android的系统不会安装一个没有数字证书的应用程序.这个数字证书用于标识应用程序的作者和其开发的应用程序之间的关系. 当一个开发者开发出一个APP并要将其发布的时候,我们要对开发出来的APK加盖数字证书,数字证书的密钥保存在开发者的手中.就是通过这种签名机制,开发者和他开发出来的应用程序建立起了一种信任关系.每一个开发者的密钥是不同的,它们开发出来

转载分享:Android APP二次打包操作步骤介绍

看到好的技术教程就想转载一下,不喜勿喷!谢谢配合,仅供菜鸟学习研究,不要做坏事哦\(^o^)/~ 关于Android APP 二次打包现象已经屡见不鲜,为何"打包党"就吃准了Android平台,二次打包的操作过程到底有多简单? 本文将从Android apk的结构.二次打包的工具.步骤等方面向移动开发者说明二次打包操作的简单性,从而引起开发者对APP安全的重视,并及时对APP进行代码混淆或加固 保护等安全措施. 安卓apk的文件结构首先来看一下Android apk的内部文件结构. 随

DotNetBar for Windows Forms 14.0.0.3_冰河之刃重打包版原创发布

关于 DotNetBar for Windows Forms 14.0.0.3_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版---------------------------------------------------------基于 官方原版的安装包 + http://www.cnblogs.com/tracky 提供的补丁DLL制作而成.安装之后,直接就可以用了.省心省事.不必再单独的打一次补丁包了.本安装包和补丁包一样都删除了官方自带

cocos2dx Android 使用ant 批量打包

参考文章: 例子:http://www.2cto.com/kf/201305/208139.html http://blog.csdn.net/ljb_blog/article/details/12709983 eclipse 如何支持ant:http://www.cnblogs.com/sw926/p/3238512.html 环境介绍: 引擎:cocos2dx2.2.2 开发平台:mac jdk 1.7 注:参考了以上文章,最后发现打包也不用自己下ant,也不用命令行, 而是设置 <proj

Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店

#1.用Eclipse的话导出app其实还是很容易的.大家看我的步骤.有图有真相哦 选择一个项目 创建一个新的,位置随便,下面是密码 这里都是一些名字,地区,组织,国家.看你们自己的了 选择你要存放apk的位置 打完收工 Android开发把项目打包成apk,安卓到手机上,或者提交到app应用商店,布布扣,bubuko.com

Android开发把项目打包成apk-(转)

做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk".将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装.Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装.生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非