apk檔案結構解析一

2021-07-03 03:10:43 字數 2716 閱讀 3262

apk檔案用winrar壓縮軟體解壓縮後,如下圖所示:主要是三個檔案(lib、meta-inf、res)和三個資料夾(androidmanifest.xml、classes.dex、resources.arsc)

用工具展開可以看到如下所示的檔案結構(資料夾中的內容可能不一致,這裡我舉得例子是乙個jni的demo)

下面再詳細介紹各個檔案或者資料夾的作用或內容

meta-inf資料夾:meta-inf目錄下存放的是簽名資訊,用來保證apk包的完整性和系統的安全。在eclipse編譯生成乙個apk包時,會對所有要打包的檔案做乙個校驗計算,並把計算結果放在meta-inf目錄下。而在android平台上安裝apk包時,應用管理器會按照同樣的演算法對包裡的檔案做校驗,如果校驗結果與meta-inf下的內容不一致,系統就不會安裝這個apk。這就保證了apk包裡的檔案不能被隨意替換。比如拿到乙個apk 包後,如果想要替換裡面的一幅,一段**,或一段版權資訊,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助於保護系 統的安全。

menifest.mf:

遍歷apk包中的所有檔案(entry),對非資料夾非簽名檔案的檔案,逐個生成sha1的數字簽名資訊,再用base64進行編碼。具體**見這個方法:

private static manifest adddigeststomanifest(jarfile jar)

關鍵**是

for (jarentry entry: byname.values()) 

attributes attr = null;

if (input != null) attr = input.getattributes(name);

attr = attr != null ? new attributes(attr) : new attributes();

attr.putvalue("sha1-digest", base64.encode(md.digest()));

output.getentries().put(name, attr);}}

之後將生成的簽名寫入manifest.mf檔案。關鍵**如下:

manifest manifest = adddigeststomanifest(inputjar);

je = new jarentry(jarfile.manifest_name);

je.settime(timestamp);

outputjar.putnextentry(je);

manifest.write(outputjar);

開啟manifest.mf

manifest-version: 1.0 created-by: 1.0 (android)

name: res/drawable-xhdpi/abc_ab_bottom_solid_light_holo.9.png

sha1-digest: 98apd0xqx5q4d+vzs6jb7lxg2go=

name: res/drawable-hdpi/abc_list_divider_holo_light.9.png sha1-digest:

poxeefe1gxgkyyjkmfn1ri2qqeo=

name: res/drawable-xhdpi/abc_textfield_search_right_default_holo_light

sha1-digest: /uifeo6oxwl7nsiu/486wbq0xls=

對前一步生成的manifest,使用sha1-rsa演算法,用私鑰進行簽名。

cert.sf

signature-version: 1.0 sha1-digest-manifest:

5c1qwho6z1gtlx93lyvpn/8j7gi= created-by: 1.0 (android)

name: res/drawable-xhdpi/abc_ab_bottom_solid_light_holo.9.png

sha1-digest: k4hrhjcffdlvbinqu1qseruvoic=

name: res/drawable-hdpi/abc_list_divider_holo_light.9.png sha1-digest:

krfdym/dt5myxkmw3p5xg9mql0k=

name: res/drawable-xhdpi/abc_textfield_search_right_default_holo_light

.9.png

sha1-digest: kktkqzaczwycfjkgha/ojn2vq7y=

注:紅色粗體sha1-digest-manifest是manifest.mf整個檔案的sha1並base64編碼的結果。cert.rsa

該檔案主要用來儲存公鑰及其相關資訊

文章參考:

apk檔案解析,學習筆記

android應用程式包檔案 apk 是一種android作業系統上的應用程式安裝檔案格式,其英文全稱為 主要方法如下 using icsharpcode.sharpziplib.zip public static dictionarygetpackageinfo string path if st...

APK資料夾結構

既然是乙個zip壓縮包,那我們就不妨先解壓出來看看其目錄結構和內容,在我這我以ndk中的two libs為例,以ndk為例,主要是要在本文中介紹sdk和ndk結合打包的方法。先看圖 其實這個目錄結構與源 的目錄結構類似,接下來我們對比看看源 我用的是eclipse 看見沒有,幾乎就是一樣的!接下來挨...

關於解析apk檔案的詳細步驟《1》

private processbuilder mbuilder private static final string split regex private static final string feature split regex aapt所在的目錄。比如你可以放在lib下 private ...