Android签名验证——Hook签名第一步

网上虽然很多Hook Android App 签名的方法,例如:
一键绕过App签名验证
一键破解APK签名校验
但是要想知道其中Hook的实现原理,并且能自己编写Hook实现,那么我们首先得知道以下几个问题:

  • Android开发如何进行签名验证
  • Hook签名原理,及其实现

这篇文章先讲第一个问题——Android签名验证
由于网上相关文章比较多,这里就不赘术,仅提供核心代码
能研究这个肯定有一定的技术基础,所以下面代码肯定能看懂

	String getSignatures() {
        try {
            //获取签名信息
            byte[] cert = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures[0].toByteArray();
            //将签名转换为字节数组流
            InputStream input = new ByteArrayInputStream(cert);
            //证书工厂类,这个类实现了出厂合格证算法的功能
            CertificateFactory cf = CertificateFactory.getInstance("X509");
            //X509 证书,X.509 是一种非常通用的证书格式
            X509Certificate c = (X509Certificate) cf.generateCertificate(input);
            //加密算法的类,这里的参数可以使 MD5 等加密算法
            MessageDigest md = MessageDigest.getInstance("SHA1");
            //获得公钥
            byte[] publicKey = md.digest(c.getEncoded());
            //字节到十六进制的格式转换
            return byte2HexFormatted(publicKey);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    //转成可待比较的十六进制字符串格式
    String byte2HexFormatted(byte[] arr) {
        StringBuilder str = new StringBuilder();
        String temp = null;
        for (int i = 0; i < arr.length; i++) {
            temp = Integer.toHexString(arr[i] & 0xFF);
            if (temp.length() == 1)
                str.append("0");
            str.append(temp.toUpperCase() + ":");
        }
        str.deleteCharAt(str.length() - 1);
        return str.toString();
    }
以上是Android中获取签名指纹(SHA1)的代码。
下面通过命令行和官方签名文件获取官方签名指纹
	看图???

在这里插入图片描述

Android验证代码如下:

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Android Hook是一种技术,可以通过修改或替换第三方应用程序的代码,来实现对其行为的控制和监控。这种技术可以用于安全测试、应用程序性能优化、反编译等方面。但是,使用Android Hook技术需要谨慎,因为它可能会违反应用程序的使用协议或法律法规。 ### 回答2: Android Hook 是一种技术,用于修改和扩展第三方应用程序的功能和行为。通过 Hook,我们可以在不修改应用程序源代码的情况下,注入自己的代码进行改变。 通过Hook,可以实现以下功能: 1. 动态修改应用程序行为:通过在目标应用程序的关键方法中插入自己的代码,我们可以改变应用程序的行为,如修改某个变量的值、替换某个方法的实现等。 2. 拦截和修改应用程序的数据:通过Hook,我们可以截获应用程序发送和接收的数据包,实现数据的篡改、替换等操作。这对于进行数据分析和调试非常有用。 3. 绕过应用程序的限制:有些应用程序会对某些功能进行限制,通过Hook,我们可以绕过这些限制,获得更多的操作权限。 4. 添加额外的功能:比如,可以通过Hook在应用程序中添加广告拦截的功能、自动点击的功能等。 实现Hook的方式多种多样,常见的有Xposed框架和Frida工具。Xposed框架通过修改系统的ClassLoader,实现对应用程序代码的动态替换和修改。Frida则通过动态插入JavaScript代码,实现对应用程序的动态分析和修改。 需要注意的是,对第三方应用进行Hook可能会触及到法律和道德的底线,如隐私侵犯、数据篡改等。因此,在进行Hook操作时,我们要遵守相关法律法规,并且尊重其他人的权益和隐私。另外,由于Hook操作需要对应用程序的运行时进行修改,如果不小心操作不当,可能会导致应用程序崩溃或无法正常运行,因此需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值