android獲取APK檔案,及應用內部簽名信息方法
1.獲取APK的簽名信息
private String showUninstallAPKSignatures(String apkPath) { String PATH_PackageParser = "android.content.pm.PackageParser"; try { // apk包的檔案路徑 // 這是一個Package 直譯器, 是隱藏的 // 建構函式的引數只有一個, apk檔案的路徑 // PackageParser packageParser = new PackageParser(apkPath); Class pkgParserCls = Class.forName(PATH_PackageParser); Class[] typeArgs = new Class[1]; typeArgs[0] = String.class; Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs); Object[] valueArgs = new Object[1]; valueArgs[0] = apkPath; Object pkgParser = pkgParserCt.newInstance(valueArgs); MediaApplication.logD(DownloadApk.class, "pkgParser:" + pkgParser.toString()); // 這個是與顯示有關的, 裡面涉及到一些畫素顯示等等, 我們使用預設的情況 DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); // PackageParser.Package mPkgInfo = packageParser.parsePackage(new // File(apkPath), apkPath, // metrics, 0); typeArgs = new Class[4]; typeArgs[0] = File.class; typeArgs[1] = String.class; typeArgs[2] = DisplayMetrics.class; typeArgs[3] = Integer.TYPE; Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage", typeArgs); valueArgs = new Object[4]; valueArgs[0] = new File(apkPath); valueArgs[1] = apkPath; valueArgs[2] = metrics; valueArgs[3] = PackageManager.GET_SIGNATURES; Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, valueArgs); typeArgs = new Class[2]; typeArgs[0] = pkgParserPkg.getClass(); typeArgs[1] = Integer.TYPE; Method pkgParser_collectCertificatesMtd = pkgParserCls.getDeclaredMethod("collectCertificates", typeArgs); valueArgs = new Object[2]; valueArgs[0] = pkgParserPkg; valueArgs[1] = PackageManager.GET_SIGNATURES; pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs); // 應用程式資訊包, 這個公開的, 不過有些函式, 變數沒公開 Field packageInfoFld = pkgParserPkg.getClass().getDeclaredField("mSignatures"); Signature[] info = (Signature[]) packageInfoFld.get(pkgParserPkg); MediaApplication.logD(DownloadApk.class, "size:"+info.length); MediaApplication.logD(DownloadApk.class, info[0].toCharsString()); return info[0].toCharsString(); } catch (Exception e) { e.printStackTrace(); } return null; }
獲取程式自身的簽名:
private String getSign(Context context) { PackageManager pm = context.getPackageManager(); List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES); Iterator<PackageInfo> iter = apps.iterator(); while(iter.hasNext()) { PackageInfo packageinfo = iter.next(); String packageName = packageinfo.packageName; if (packageName.equals(instance.getPackageName())) { MediaApplication.logD(DownloadApk.class, packageinfo.signatures[0].toCharsString()); return packageinfo.signatures[0].toCharsString(); } } return null; }
對比2個方法的返回值來判斷APK升級包的簽名是否一致,一致就提示可以安裝。
2.獲取指定已安裝完整簽名信息,包括MD5指紋:
public void getSingInfo() { try { PackageInfo packageInfo = getPackageManager().getPackageInfo("com.sina,weibo", PackageManager.GET_SIGNATURES); Signature[] signs = packageInfo.signatures; Signature sign = signs[0]; parseSignature(sign.toByteArray()); } catch (Exception e) { e.printStackTrace(); } } public void parseSignature(byte[] signature) { try { CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new ByteArrayInputStream(signature)); String pubKey = cert.getPublicKey().toString(); String signNumber = cert.getSerialNumber().toString(); System.out.println("signName:" + cert.getSigAlgName()); System.out.println("pubKey:" + pubKey); System.out.println("signNumber:" + signNumber); System.out.println("subjectDN:"+cert.getSubjectDN().toString()); } catch (CertificateException e) { e.printStackTrace(); } }
3.如何檢視指定證書的指紋
D:>keytool -list -alias 在匯出時程式的別名(-alias 這個命令,好像不用也行,沒有試,反正我一直都在使用) -keystore tangshan.keystore(匯出時使用的證書名稱) -storepass 123456-keypass 123456 出的結果為: 在匯出時程式的別名, 2011-7-29, PrivateKeyEntry, 認證指紋 (MD5): 90:13:AF:46:0A:DC:5C:6C:77:0E:AA:AF:DA:8A:AB:72
相關推薦
android獲取APK檔案,及應用內部簽名信息方法
1.獲取APK的簽名信息 private String showUninstallAPKSignatures(String apkPath) { String PATH_PackageParser = "android.content.pm.PackageParser";
關於nginx獲取真實ip,proxy_set_head設置頭部信息的理解
代理模塊 真是ip 代理模塊 真是ip代理模塊 真是ip代理 $proxy_add_x_forwarded_for $http_x_forwarded_for這兩個的變量的值的區別,就在於,proxy_add_x_forwarded_for 比http_x_forwarded_for 多了一個$rem
Android獲取本地檔案的真實路徑,content型別轉為file型別
來源網路。記錄知識點以防備用..... 相容不同的機型獲取到的檔案路徑型別,以防異常情況發生。 public static String getPath(Context context, Uri uri) { if ("content".equalsIgnoreCase(uri.ge
反編譯apk檔案,獲取strings.xml檔案的內容——使用apktool反編譯
現在通過AXMLPrinter2.jar獲取AndroidManifest.xml內容時,發現有些值是放在strings.xml中,而strings.xml檔案是被打包在resources.arsc檔案裡面,在網上找了下,說是用arsceditor進行編輯,但是我下載了個arsceditor時(下載地址:ht
android原始碼下加入替換鈴聲檔案,及設定預設鈴聲
系統鈴聲檔案的路徑在frameworks/base/data/sounds資料夾 有四個主要資料夾alarms ,notifications,ringtones,effects,分別對應系統的鬧鐘鈴聲,通知鈴聲,來電鈴聲,音效 如果需要新增鈴聲檔案,只需把鈴聲放入對應的資料
android獲取目錄檔案values/arrays.xml資料的方法,簡易快捷
在Android中,用string-array是一種簡單的提取XML資原始檔資料的方法。 例: 把相應的資料放到values/arrays.xml檔案裡 <?xml version="1.0" encoding="utf-8"?> <r
JAVA WEB 獲取properties檔案,存放路徑 及 獲取路徑
首先明白,ClassPath : 指的是:WEB-INF\classes這個目錄下,通常把檔案放在src資料夾下,或者新建檔案並且新增到build path即可。IDE在同步檔案到tomcat時會自動將檔案放在classes下。 獲取properties的程式碼:
Android scrollTo() scrollBy() Scroller解說及應用
render 設置 pop generate gnu 結束 last androi nds 版本號:1.0 日期:2014.6.17 2014.6.18版權:? 2014 kince 轉載註明出處 scrollTo() 、scrollBy()及 Scroller在視圖
JavaScript中的label語句,及應用
sta 添加 con col 使用 int nbsp 位置 javascrip label語句:可以在代碼中添加標簽,以便將來使用。 語法:label : statement 示例: start: for(var i=0;i<10;i++){ c
PHP -- 遍歷出目錄下所有檔案,及演算法優化
在想解決這個問題的時候,我也查找了很多資料。推薦給大家我個人覺得比較好的一篇:PHP遍歷檔案目錄 文中第四個演算法可以遍歷出文件夾下的所有檔案,程式碼如下: $dir = 'E:\phpStudy\PHPTutorial\WWW'; echo '<pre>'; functio
Android逆向 APK檔案組成
一 瞭解APK檔案 我們知道Android系統能執行的程式是.apk檔案格式,其實它就是一個壓縮包而已,把.apk修改成.zip,然後解壓就可以得到該apk內部的檔案結構。 PS: 既然可以把apk檔案改成zip解壓,能不能再把這些檔案壓縮成zip格式,再修改成apk檔案安裝到手機裡呢
全部博文集錦第三期CHM檔案,及十三個經典演算法研究PDF文件
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Android 獲取Mac地址,相容6.0以下和6.0以上
import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.text.Te
Android Studio建立檔案,自動生成類頭
設定路徑:file->settings->Editor->File and Code Templates 1.選擇Includes欄目,把File Header裡面studio自動生成的模板刪掉,新增下面的模板。 /** * @ClassName ${NAME
列出指定目錄下所有副檔名為.txt的檔案,及出現的問題
/*7.列出指定目錄下所有副檔名為.txt的檔案*/ /* System.out.println(file.isDirectory());當file是一個沒有後綴的檔案時,這裡會輸出false
Android中APK安裝過程及原理解析
應用安裝是智慧機的主要特點,即使用者可以把各種應用(如遊戲等)安裝到手機上,並可以對其進行解除安裝等管理操作。APK是Android Package的縮寫,即Android安裝包。APK是類似Symbian Sis或Sisx的檔案格式。通過將APK檔案直接傳到Android模擬器或Android手機中執行即可
Android開發獲取GPS位置,包含apn\wifi\gps 幾種方法
1.gps定位: 優點:最簡單的手機定位方式當然是通過GPS模組(現在大部分的智慧機應該都有了)。GPS方式準確度是最高的 缺點1.比較耗電; 2.絕大部分使用者預設不開啟GPS模組; 3.從GPS模組啟動到獲取第一次定位資料,可能需要比較長的時間; 4.室內幾乎
Android 匯出CSV檔案,解決中文亂碼問題
亂碼,無非就是編碼對不上的問題,只要編碼一樣那就沒問題,使用了Okio,直接上程式碼: try { //寫入檔案 String data = stringB
使用JDK生成android-apk證書,以及給未簽名的apk簽名
讓我們使用JDK中的命令列工具生成私有jks證書 keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048
Android 獲取所有Activity,這裡演示了使用者按兩次back鍵退出app
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit();