1. Android Studio默认的apk打包文件地址
用户根目录/.android/debug.keystore
Android Studio - debug keystore
Where the debug.keystore in Android Studio
Eclipse ADT基本一致:Windows->Preference->Android->Build 可以查看
2. 通过keytool计算apk的签名
对于jdk7及以上版本可以直接通过如下命令
keytool -list -printcert -jarfile apk_file_path
如果有keystore文件
keytool -list -keystore file_path
默认的debug.keystore密码为android
I have never set any passwords to my keystore and alias, so how are they created
如果知道keystore的alias和密码,可以显示更详细的信息
keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android -v
对于jdk7以下的版本,可以先解压apk,对目标文件META-INF/CERT.RSA计算签名
keytool -printcert -file file_path
How to find out which key was used to sign an app
How to get the certificate signing information from an Android APK
How can I verify the authenticity of an APK file I downloaded(对RSA文件有个简短的介绍)
3. 在android运行时计算apk的签名
/* standard MessageDigest algorithms: MD5 SHA-1 SHA-256 */ private String getCertificateFingerprint(Context mContext, String algorithm, String packageName) { PackageManager pm = mContext.getPackageManager(); int flags = PackageManager.GET_SIGNATURES; PackageInfo packageInfo = null; try { packageInfo = pm.getPackageInfo(packageName, flags); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (packageInfo == null) return null; Signature[] signatures = packageInfo.signatures; //此处我直接默认只有一个签名 byte[] cert = signatures[0].toByteArray(); InputStream input = new ByteArrayInputStream(cert); CertificateFactory cf = null; try { cf = CertificateFactory.getInstance("X509"); } catch (CertificateException e) { e.printStackTrace(); } if (cf == null) return null; X509Certificate c = null; try { c = (X509Certificate) cf.generateCertificate(input); } catch (CertificateException e) { e.printStackTrace(); } if (c==null) return null; String hexString = null; try { MessageDigest md = MessageDigest.getInstance(algorithm); byte[] publicKey = md.digest(c.getEncoded()); hexString = byte2HexFormatted(publicKey); } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (CertificateEncodingException e) { e.printStackTrace(); } return hexString; } public static String byte2HexFormatted(byte[] arr) { StringBuilder str = new StringBuilder(arr.length * 2); for (int i = 0; i < arr.length; i++) { String h = Integer.toHexString(arr[i]); int l = h.length(); if (l == 1) h = "0" + h; if (l > 2) h = h.substring(l - 2, l); str.append(h.toUpperCase()); if (i < (arr.length - 1)) str.append(':'); } return str.toString(); }
Get certificate fingerprint from android app
How to read SHA and MD5 fingerprint programmatically in Android
第二个链接提及了一个开源项目 apk-parser
4. 直接通过java程序获取
1) 读取apk中的RSA签名文件
ZipFile zipFile = new ZipFile("demo-debug.apk_2.0.4.apk"); Enumeration<? extends ZipEntry> entries = zipFile.entries(); while(entries.hasMoreElements()){ ZipEntry entry = entries.nextElement(); if (entry.getName().endsWith("RSA")) { ZipEntry entry = entries.nextElement(); //TODO with zipFile.getInputStream(entry) } }
Read Content from Files which are inside Zip file
2) 计算RSA文件签名
public static String[] getSign(InputStream input, String algorithm) throws CertificateException, NoSuchAlgorithmException { CertificateFactory cf = CertificateFactory.getInstance("X509"); Collection<? extends Certificate> c = cf.generateCertificates(input); Certificate[] certs = c.toArray(new Certificate[c.size()]); String[] hexString = new String[certs.length]; for (int i=0; i<certs.length; i++) { X509Certificate x509Cert = (X509Certificate)certs[i]; MessageDigest md = MessageDigest.getInstance(algorithm); byte[] publicKey = md.digest(x509Cert.getEncoded()); //byte2HexFormatted和android那边的一致 hexString[i] = byte2HexFormatted(publicKey); } return hexString; }
主要参考了java KeyTool源码,可以搜索printcert,其中printCertFromStream是主要需要关注的函数
private void printCertFromStream(InputStream in, PrintStream out)
相关的一个开源项目android-apk-parser
相关推荐
Android签名证书文件的解析和签名校验的加强
安卓APK资源混淆加密重签名工具,可以对安卓APK文件的代码和资源文件进行混淆加密处理,可以对安卓APK文件进行加固,对代码和资源文件进行混淆,重新签名等功能. 可以保护APK,增加破解难度,防止误报毒等功能. ...
上一篇文章,我们介绍了如何去实现读取手机文件及文件夹,并以列表的形式显示出来,今天我们将说说如何读入pdf文件。具体请参照博客:http://blog.csdn.net/acrambler
apk.zip 最近需要,顺便把学到的相关知识跟大家分享一下 主要内容如下: ...3、apk签名文件转换:jks和keystore相互装换 4、查看签名文件的信息 5、adb方式和java代码方式查看apk签名信息:MD5,SHA1,SHA256
android检测版本自动更新并弹出对话框提示用户下载,带有进度条,服务端解析xml,已测过好多次,主要包名更签名.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
目录 第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 ...4.5.2 卖东西也要签名——生成签名文件 4.5.3 打包、签名、发布应用 4.6 本章小结
安卓APK资源混淆加密重签名工具,可以对安卓APK文件的代码和资源文件进行混淆加密处理,可以对安卓APK文件进行加固,对代码和资源文件进行混淆,重新签名等功能. 可以保护APK,增加破解难度,防止误报毒等功能. ...
解决android中混淆代码签名导出报错的proguard.cfg 第三方jar包,可类似 -libraryjars libs/android-support-v4.jar 添加在文件中
安卓apk查看器 apk解析器 apk文件解密 apk签名读取
这里共享一个android在线版本更新的代码,本代码采用json解析版本控制文件,有注释,希望大家批评指正。 注意:版本更新需要对apk文件进行签名!
android检测版本自动更新并弹出对话框提示用户下载,带有进度条,服务端解析xml,已测过好多次,主要包名更签名!
也有程序直接把文字写在java程序了,所以在smali目录下也可能会有一些,smali目录的.smali文件是对java文件的解析,不能瞎改,汉化的话要注意,搜索整个目录,找到你要汉化的文字,替换成就行,注意,里面的参数别瞎改,不然...
apk反编译工具可以有效地对apk文件反编译,帮助你解析apk文件,并对相应的文件进行修改,不仅如此它还可以修改签名、反编译dex等,十分实用。 apk反编译工具安装方法: 把文件都解压放在同一个目录,共三个文件 ...
Android安全安全技术: 基础文件格式解析 Android安全安全技术: Android应用安全防护技术 Android安全安全技术: 其他Android安全知识总结 Android安全开发基础: 开发基础常识 Android安全开发基础: 四大组件之活动...
4.5.2 卖东西也要签名——生成签名文件 4.5.3 打包、签名、发布应用 4.6 本章小结 第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3...
4.5.2 卖东西也要签名——生成签名文件 4.5.3 打包、签名、发布应用 4.6 本章小结 第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3...
4.5.2 卖东西也要签名——生成签名文件 46 4.5.3 打包、签名、发布应用 48 4.6 本章小结 51 第5章 千里之行 始于足下——第一个应用helloworld 52 5.1 helloworld应用分析 52 5.1.1 新建一个android...
基础篇包括第1~7章,主要介绍移动应用安全的基础知识,包括Android中NDK开发知识、逆向中需要用到的命令、编译之后的apk包含的四类主要文件格式解析等。防护篇包括第8~14章,主要介绍移动应用安全防护的相关技术,...
1. 查看Apk 的元信息,如标题、图标、SDK版本、权限、支持的语言等 2. 解析Apk 中任意的Binary Xml 文件,翻译成可读的Xml 文本 3. 查看Apk Dex 文件中包含的Class 信息 4. 验证Apk 签名,查看签名的信息
支持任意数据结构的自动解析。 支持添加动态参数例如timeStamp时间戳、token、签名sign。 支持自定义的扩展API。 支持多个请求合并。 支持Cookie管理。 支持异步、同步请求。 支持Https、自签名网站Https的访问、...