import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; PackageManager pckMan = getPackageManager(); String issuerDN = null; String subjectDN = null; String publickey = null; boolean isSystemApp = false; List<PackageInfo> packs = pckMan.getInstalledPackages(PackageManager.GET_SIGNATURES); int count = packs.size(); for (int i = 0; i < count; i++) { isSystemApp = false; PackageInfo pi = packs.get(i); if (pi.versionName == null) continue; if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) { isSystemApp = true; } try { byte[] signature = pi.signatures[0].toByteArray(); String hash = md5(signature); CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) certFactory.generateCertificate( new ByteArrayInputStream(signature)); String appname = pi.applicationInfo.loadLabel(pckMan).toString(); Log.d("TRACK", appname); issuerDN = cert.getIssuerDN().toString(); Log.d("TRACK", issuerDN); subjectDN = cert.getSubjectDN().toString(); Log.d("TRACK", subjectDN); publickey = cert.getPublicKey().toString(); Log.d("TRACK", publickey); Log.d("TRACK-HASH", hash); } catch (CertificateException e) { e.printStackTrace(); } }