首页 > 其他分享 >安卓获取应用签名

安卓获取应用签名

时间:2023-02-14 10:35:50浏览次数:46  
标签:return String 安卓 获取 签名 context null type

通过apk文件直接查看

keytool -printcert -jarfile yyb.apk

WX20230214-091554_2x

通过RSA文件查看

将apk后缀名改为zip,解压

进入META-INF文件夹,找到后缀名为RSA的文件

WX20230214-091650_2x

通过命令

keytool -printcert -file ANDROID.RSA

直接获取到签名信息

WX20230214-091802_2x

但是上面两种都没有获取到MD5的签名

下面是最有效的方式

通过Android Studio Task查看

打开Android Studio边栏的Gradle

找到Task,按理说会直接有,可能是Flutter项目的设置,这里默认是没有build task的,所以得去设置里面配置一下

WX20230214-092138_2x

配置好了再Gradle Sync之后就会出现Task列表

WX20230214-093035_2x

找到signingReport双击直接生成签名(包括debug,profile,release)的MD5,SHA1,SHA-256

WX20230214-093436_2x

用jks加密文件获取

jks作为加密文件可以直接拿到签名信息

keytool -list -v -keystore upload-keystore.jks

接下来输入密钥就可以获取到签名

cdeb31af1c407ce0c5de9024c2184101

在代码中获取

定义一个getSignInfo方法

public static ArrayList<String> getSignInfo(Context context, String type) {
    if (context == null || type == null) {
        return null;
    }
    String packageName = context.getPackageName();
    if (packageName == null) {
        return null;
    }
    if (mSignMap.get(type) != null) {
        return mSignMap.get(type);
    }
    ArrayList<String> mList = new ArrayList<String>();
    try {
        Signature[] signs = getSignatures(context, packageName);
        assert signs != null;
        for (Signature sig : signs) {
            String tmp = "error!";
            switch (type) {
                case MD5:
                    tmp = getSignatureByteString(sig, MD5);
                    break;
                case SHA1:
                    tmp = getSignatureByteString(sig, SHA1);
                    break;
                case SHA256:
                    tmp = getSignatureByteString(sig, SHA256);
                    break;
            }
            mList.add(tmp);
        }
    } catch (Exception e) {
        System.out.println(e);
    }
    mSignMap.put(type, mList);
    return mList;
}

核心代码就是

private static Signature[] getSignatures(Context context, String packageName) {
    PackageInfo packageInfo = null;
    try {
        packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
        return packageInfo.signatures;
    } catch (Exception e) {
        System.out.println(e);
    }
    return null;
}

直接获取包信息里面的签名

packageInfo = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
return packageInfo.signatures;

把签名的byte[]信息转换成 95:F4:D4:FG 这样的字符串形式

private static String getSignatureByteString(Signature sig, String type) {
    byte[] hexBytes = sig.toByteArray();
    String fingerprint = "error!";
    try {
        MessageDigest digest = MessageDigest.getInstance(type);
        byte[] digestBytes = digest.digest(hexBytes);
        StringBuilder sb = new StringBuilder();
        for (byte digestByte : digestBytes) {
            sb.append(((Integer.toHexString((digestByte & 0xFF) | 0x100)).substring(1, 3)).toUpperCase());
            sb.append(":");
        }
        fingerprint = sb.substring(0, sb.length() - 1);
    } catch (Exception e) {
        System.out.println(e);
    }
    
    return fingerprint;
}

运行时调用此方法可以获取到包括SHA1、MD5等签名信息,把对应的类型传进去就行了

通过工具获取

微信以前提供了apk,安装后输入包名就可以直接拿到签名

点击下载

标签:return,String,安卓,获取,签名,context,null,type
From: https://www.cnblogs.com/r1cardo/p/17118822.html

相关文章

  • mysql 获取系统当前时间的3种方式
    1.获取系统当前日期+时间方式一:now()方式二:sysdate()以上两种方式,对应日期类型:datetime。方式三:CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP对应日期类型:timestamp。方式四:to_da......
  • python +高德 +批量获取经纬度
    importjsonfromurllib.requestimporturlopenfromurllib.parseimportquoteimportopenpyxl#定义函数defGetlngat(address):url='https://restapi.......
  • Mybatis06 - 获取参数的两种方式 #{} ${}
    数据输入实际使用时仅需考虑两种情况:实体类型:接口传参是实体类,则在SQL语句中直接使用类的属性#{属性1},#{属性2}...非实体类型:在接口传参时使用@Param("key")value......
  • 获取 个位数 十位数 百位数 千位数
    以c语言为例,js需要向下取整个位​​​num%10​​​==​​num/1%10​​​十位​​num/10%10​​百位​​num/100%10​​千位​​num/1000%10​​......
  • java通过属性名称获取属性值或设置属性值
    一、实体类publicclassMessageBean{privateintcode=200;//编码privateStringmessage="";//信息publicintgetCode(){returncode;}pu......
  • 抓取安卓闪退日志教程
    在开发手机APP时,如果遇到应用闪退、卡顿无反应情况,往往需要抓取日志,帮助定位问题。本文简要介绍使用adb抓取日志的方法。分以下三步进行介绍:1.安装java运行环境jdk,并......
  • 抓取安卓闪退日志教程
    在开发手机APP时,如果遇到应用闪退、卡顿无反应情况,往往需要抓取日志,帮助定位问题。本文简要介绍使用adb抓取日志的方法。分以下三步进行介绍:1.安装java运行环境jdk,并配......
  • python+uiautomator2安卓,混合app 操作h5页面
    参考文章:https://testerhome.com/topics/15998uiautomator2app原生+webview的实际操作记录(安卓)1.首先 chrome://inspect/#devices通过连接查看自己的版本号......
  • abp6.0获取currentuser的值
    在host的启动项目里面,MedicalClusterHttpApiHostModule里面增加```AbpClaimTypes.UserId=JwtClaimTypes.Subject;AbpClaimTypes.UserName=JwtClaimTypes.P......
  • 安卓混淆加固重签名工具1.7.7更新(附下载地址)
    安卓APK混淆加密重签名软件,可以对安卓APP进行混淆加固加密处理,对代码和资源文件进行混淆,进行重新签名等.  可以保护APK,增加逆向分析难度,防止误报毒等.   安卓......