前段时间在工作中遇到一个问题,即在非android环境下获取apk签名信息,网上查了不少资料整理出一份代码,分享出来希望对看到的人有所帮助。
主要思路:读META-INF/路径下的证书,获取签名信息后,转换成字符数组(tochar方法是关键)。
解决方法整理程序如下:
private static char[] toChars(byte[] mSignature) { byte[] sig = mSignature; final int N = sig.length; final int N2 = N*2; char[] text = new char[N2]; for(int j=0;j<N;j++){ byte v = sig[j]; int d = (v>>4)&0xf; text[j*2] = (char)(d >= 10 ? ('a' + d - 10) : ('0' + d)); d = v&0xf; text[j*2+1] = (char)(d >= 10 ? ('a' + d - 10) : ('0' + d)); } return text; } private static java.security.cert.Certificate[] loadCertificates(JarFile jarFile, JarEntry je, byte[] readBuffer) { try { InputStream is = jarFile.getInputStream(je); while(is.read(readBuffer,0,readBuffer.length)!=-1) { } is.close(); return (java.security.cert.Certificate[])(je!=null?je.getCertificates():null); } catch (Exception e) { e.printStackTrace(); System.err.println("Exception reading "+je.getName()+" in "+jarFile.getName()+": "+e); } return null; } public static String getApkSignInfo(String apkFilePath){ byte[] readBuffer = new byte[8192]; java.security.cert.Certificate[] certs = null; try{ JarFile jarFile = new JarFile(apkFilePath); Enumeration entries = jarFile.entries(); while(entries.hasMoreElements()){ JarEntry je = (JarEntry)entries.nextElement(); if(je.isDirectory()){ continue; } if(je.getName().startsWith("META-INF/")){ continue; } java.security.cert.Certificate[] localCerts = loadCertificates(jarFile,je,readBuffer); System.out.println("File " + apkFilePath + " entry " + je.getName()+ ": certs=" + certs + " ("+ (certs != null ? certs.length : 0) + ")"); if (certs == null) { certs = localCerts; }else{ for(int i=0; i<certs.length; i++){ boolean found = false; for (int j = 0; j < localCerts.length; j++) { if (certs[i] != null && certs[i].equals(localCerts[j])) { found = true; break; } } if (!found || certs.length != localCerts.length) { jarFile.close(); return null; } } } } jarFile.close(); return new String(toChars(certs[0].getEncoded())); }catch(Exception e){ e.printStackTrace(); } return null; }
欢迎拍砖!
相关推荐
android安卓获取apk签名工具
android10 apk签名文件,签名后可以获取系统权限
具体使用方法可以参考相关博客:http://blog.csdn.net/i5suoi/article/details/19036975
本文实例讲述了Android获取apk签名指纹的md5值以防止重新被打包的实现方法。分享给大家供大家参考,具体如下: 做个记录(这里只是Java层的签名校验,java层容易被破解,我建议apk加固下) 获取md5值来进行Apk签名校验...
上次发的代码: http://download.csdn.net/detail/iloveyoueveryday/6909583 好多人说调不通,于是做了个小例子,改了一些东西(其实还是一样的),给大家看看,要是还有问题,就说明是你的NDK环境没有设置好了
该APP提供了获取手机上已安装的所有应用的签名信息,并支持直接复制。
微信官方的下载链接失效了。可以用这个下载。
adb脚本,android批处理,用于批量处理android相关操作,用于批量自动化处理。用于批量测试,用于批量群控基础
获取apk的sha256哈希值,对apk的签名进行验证,仅供参考
主要介绍了Android实现获取签名及公钥的方法,可实现Android通过包名获取相关签名及公钥的功能,具有一定参考借鉴价值,需要的朋友可以参考下
获取android安装的APP(apk)签名md5值,输入包名点击查询,即可显示包名对应的签名md5值 查询后,自动保存;这个本来是写来自己公司用的小工具,在之前app开发的时候,调试微信登录等等需要用到签名的地方,因为...
主要介绍了Android获取apk程序签名信息的方法,大家参考使用吧
新浪微博的签名工具类,分享时输入使用。1 打包发布版apk 2 安装签名apk 3输入包名(注意,包名一个字母都不能错),自动检测apk生成签名
如果应用需要使用system权限,必须保证APK签名与Framework签名一致,等等。 什么是签名 首先我们得知道什么是摘要,摘要是指采用单向Hash函数对数据进行计算生成的固定长度的Hash值,摘要算法有Md5,Sha1等,Md5生成...
android 应用签名工具,微信开放平台要求填写签名,获取手机应用的数字签名,用于对当前应用进行二次身份校验,开发者可以使用签名生成工具直接从安装当前应用的手机中获取。应用签名由开发者签名该应用的keystore...
通过jni的方式获取android应用的签名的md5值,可以在so中作安全验证
Android apk获得系统权限签名工具
android,获取安装到手机的第三方应用签名的 apk 包