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
相关推荐
本文将深入探讨Java如何生成及验证Android签名文件,并解析源码中的相关概念。 首先,让我们理解Android签名文件的核心作用。Android签名文件(通常为`.keystore`格式)是一个包含了应用开发者私钥的加密文件,用于...
#### 二、Android签名证书文件解析方法 对于Android签名证书文件的解析,主要有以下几种途径: 1. **使用Android提供的解析类**:这是最直接也是最便捷的方式,适用于Android平台上的开发。 2. **利用Java提供的...
Gen_Signature_Android是一个专门用于Android应用签名解析的工具,它可以帮助开发者和安全研究人员深入理解APK文件的签名机制,以及验证APK的签名信息。下面将详细介绍Android应用的签名过程、签名的重要性以及如何...
1. 读取SO文件的证书信息:这部分代码会解析.so文件,提取其中的数字签名。 2. 获取APK的证书信息:这一步是从APK的META-INF目录下的CERT.RSA文件中获取签名信息。 3. 比较两个证书:如果两者匹配,说明SO文件和APK...
1. 签名文件(.keystore)非常重要,包含开发者身份信息,应妥善保管,避免丢失或被盗。 2. 修改过的APK可能需要适配原应用的版本号和签名,否则可能会导致升级失败或其他兼容性问题。 3. 反编译和重新打包操作可能...
2. **signapk.jar**:这是Android签名的主要工具,由Google提供。它使用Java编译并运行,可以对APK或者系统图像进行签名。SignApk需要两个密钥文件(`.x509.pem`和`.pk8`)来对APK进行签名,生成一个新的APK,其中...
Apktool是一个流行的Android应用反编译工具,它可以解包APK文件,提取其中的资源和代码,并允许开发者重新打包和签名。Apktool.yml文件可能是Apktool在处理APK时生成或使用的配置文件,用于记录反编译过程中的元数据...
1. **解压文件**:首先,你需要解压缩"android签名工具.zip",得到可执行的安卓应用。 2. **安装应用**:将解压后的应用安装到你的Android设备上。 3. **输入包名**:打开应用后,输入你想要获取签名的APK的包名...
- 使用工具如`Apktool`,它能够解析APK的资源文件和二进制XML,将其转换为人类可读的格式。首先,你需要下载并安装Apktool,然后运行相应的命令来解包APK。 - 命令示例:`apktool d yourapk.apk -o output_...
1. **PDF文件解析**: PDF(Portable Document Format)是一种通用的文件格式,用于保持文档的布局和内容不变。在Android中,由于原生SDK并不支持PDF解析,我们需要借助第三方库。这里提到的是`libmupdf.so`,这是...
- **signed_logcat.apk**:这是已经签名的APK文件,可以被安装到Android设备上。 - **sign.cmd**:这可能是一个批处理脚本,用于自动化签名过程。它可能包含了调用Signapk工具(signapk.jar)和Keytool的命令。 - **...
jadx-gui 安卓 Android系统获取包名、平台公钥、签名 MD5 值, pepk.jar 生成的签名密钥指引以及工具。...把Pepk.jar和你项目的签名文件(xxx.jks)复制到JDK的bin目录下,运行命令打包、加密签名密钥文件
一、Android签名机制 Android系统的签名机制是为了保证应用的完整性和防止篡改。每个APK文件在打包后都会包含一个数字签名,这个签名验证了应用的代码和资源没有被修改过。当用户尝试安装应用时,Android系统会检查...
每个开发者都应该有自己的签名文件,因为一旦应用发布,应该始终使用同一签名文件更新应用,否则系统将识别为不同的应用,导致用户无法自动更新。 5. **最新.txt**:这个文件可能包含了关于反编译、编译和签名过程...
在Android平台上,应用程序的签名是安全性和权限管理的重要组成部分。签名不仅验证了应用程序的来源,还确保了应用程序的完整性和可更新性。本资源“APP获取安卓签名工具”旨在帮助开发者或用户方便地获取已安装在...
而安装签名apk则是指使用特定的签名文件对apk进行签名,以便在设备上安装和运行。 使用“新浪微博签名apk”,开发者需要特别注意输入正确的包名。包名在Android开发中是一个全局唯一的标识符,由一系列小写的反向...
本文将详细解析“Android签名工具”及其重要性,以及如何使用这类工具对APK进行签名或重签名。 首先,理解Android签名的概念。Android签名是为了确保应用的完整性和开发者身份的一种机制。每个APK在发布前都需要...
此外,我们将详细解析如何实现签名的缩放以及撤销操作。 首先,Mupdf是一个开源的轻量级PDF阅读器库,由Artifex Software开发。它提供了基本的PDF查看、导航和渲染功能,是许多移动应用中的首选PDF处理库。在...
这个"Android签名板"项目,从其标题和描述来看,似乎是一个轻量级的Android库,旨在帮助开发者快速集成签名和画板功能。博客链接虽然未提供具体细节,但通常会包含项目的使用方法、API介绍以及示例代码等。 首先,...
在Android开发领域,APK文件是应用程序的二进制包,包含了应用的所有资源、代码、配置文件等。本文将深入探讨如何使用Java代码解析指定的APK文件,从而获取其中的关键信息。 首先,理解APK文件的结构至关重要。APK...