zoukankan      html  css  js  c++  java
  • 【转】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 验证放到服务端
    感觉没什么鸟用,直接干掉或修改你接口的判断逻辑的就行了。

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

    from:https://www.cnblogs.com/lesliefang/p/5152358.html

  • 相关阅读:
    (六)面向对象进阶
    (五)绑定方法与非绑定方法
    (四)封装
    (三)多态与多态性
    (二)继承与派生
    (一)面向对象的程序设计
    网络协议
    三.计算机网络简介
    二.计算机的发展史及多道技术
    一.计算机基础知识
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/11028188.html
Copyright © 2011-2022 走看看