博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 签名验证防止重打包
阅读量:5161 次
发布时间:2019-06-13

本文共 981 字,大约阅读时间需要 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 验证放到服务端
感觉没什么鸟用,直接干掉或修改你接口的判断逻辑的就行了。

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

 

转载于:https://www.cnblogs.com/lesliefang/p/5152358.html

你可能感兴趣的文章
Noip2016day2 组合数问题problem
查看>>
django中widget小部件
查看>>
训练记录
查看>>
使用 Windows Live ID 登录 Windows 8---------互联网时代的云端革命
查看>>
横屏模式注意点
查看>>
虚拟机对网卡的设置
查看>>
after()和inserAfter(),before()和inserBefore()区别
查看>>
JDBC——释放资源的代码
查看>>
bootstrap模态框垂直居中
查看>>
用数据管理过程(3)——可预测级别的量化管理(麦当劳的管理方式)
查看>>
DataGridView的Validating事件注册后删除操作的处理
查看>>
我的IOS学习历程-第七天
查看>>
json的两种表示结构(对象和数组).。
查看>>
iOS Undefined symbols for architecture xxx问题的总结
查看>>
bzoj 3685: 普通van Emde Boas树
查看>>
关于线程池,那些你还不知道的事
查看>>
二分类问题F-score评判指标(转载)
查看>>
JAVA基础之字符串和面向对象
查看>>
大数据R语言简析
查看>>
Ant自己主动编译打包&公布 android项目
查看>>