Android的.apk文件實(shí)際上就是一個(gè)zip文件 可以直接用winrar打開 如下圖所示: 包括了一個(gè)META-INF目錄 一個(gè)res目錄 一個(gè)AndroidManifest.xml 一個(gè)classes.dex
AndroidManifest.xml是每個(gè)應(yīng)用都必須定義和包含的,它描述了應(yīng)用的名字、版本、權(quán)限、引用的庫文件等等信息,如要把a(bǔ)pk上傳到Google Market上,也要對(duì)這個(gè)xml做一些配置。 META-INF目錄 META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統(tǒng)的安全。在eclipse編譯生成一個(gè)apk包時(shí),會(huì)對(duì)所有要打包的文件做一個(gè)校驗(yàn)計(jì)算,并把計(jì)算結(jié)果放在META-INF目錄下。而在Android平臺(tái)上安裝apk包時(shí),應(yīng)用管理器會(huì)按照同樣的算法對(duì)包里的文件做校驗(yàn),如果校驗(yàn)結(jié)果與META-INF下的內(nèi)容不一致,系統(tǒng)就不會(huì)安裝這個(gè)apk。這就保證了apk包里的文件不能被隨意替換。比如拿到一個(gè)apk 包后,如果想要替換里面的一幅圖片,一段代碼,或一段版權(quán)信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助于保護(hù)系 統(tǒng)的安全。 classes.dex文件 classes.dex是java源碼編譯后生成的java字節(jié)碼文件。但由于Android使用的dalvik虛擬機(jī)與標(biāo)準(zhǔn)的java虛擬機(jī)是不兼容 的,dex文件與class文件相比,不論是文件結(jié)構(gòu)還是opcode都不一樣。目前常見的java反編譯工具都不能處理dex文件。 Android模擬器中提供了一個(gè)dex文件的反編譯工具dexdump。用法為首先啟動(dòng)Android模擬器,把要查看的dex文件用adb push上傳的模擬器中,然后通過adb shell登錄,找到要查看的dex文件,執(zhí)行dexdump xxx.dex。 目前在網(wǎng)上能找到的另一個(gè)dex文件的反編譯工具是Dedexer。Dedexer可以讀取dex格式的文件,生成一種類似于匯編語言的輸出。這種輸出與jasmin[ ]的輸出相似,但包含的是Dalvik的字節(jié)碼。我們會(huì)在下一節(jié)詳細(xì)介紹一下Dedexer。 res 目錄 res目錄存放資源文件。 resources.arsc 編譯后的二進(jìn)制資源文件。
apk文件解壓后反編譯: 圖片等多媒體文件:沒有編譯,無需反編譯。 layout等二進(jìn)制xml文件:使用AXMLPrinter將其轉(zhuǎn)換為可讀的xml文件:java -jar AXMLPrinter2.jar main.xml > new_main.xml 下圖是直接打印出來一個(gè)main.xml 要打開AndroidManifest.xml或者其他xml也同理
class文件反編譯:
然后找到上傳的要打開的dex
然后可以看到反匯編之后的代碼如下 目前在網(wǎng)上能找到的另一個(gè)dex文件的反編譯工具是Dedexer。Dedexer可以讀取dex格式的文件,生成一種類似于匯編語言的輸出。這種輸出與jasmin[ ]的輸出相似,但包含的是Dalvik的字節(jié)碼。
resources.arsc這個(gè)文件我是用了 漢化浪子編寫的 AndroidResEdit 軟件 能看到里面的所有字段 直接用記事本打開大多數(shù)是亂碼
打開如下圖所示
以上就是apk文件的詳細(xì)結(jié)構(gòu)分析 apk文件如果把其中的資源文件進(jìn)行替換修改 比如進(jìn)行類似漢化操作的時(shí)候 需要重新對(duì)其簽名
具體的可以替換的內(nèi)容有res文件下下的資源文件 而且res下面的資源文件中的圖片等多媒體文件:沒有編譯,無需反編譯,這樣就可以很輕松地獲得一些比較好的apk應(yīng)用里的圖片,通過解碼xml文件,可以還原原來應(yīng)用的xml文件,這樣,可以獲得其界面布局文件。
在替換了之后,只需要使用Auto-sign工具重新對(duì)其進(jìn)行簽名即可,首先,刪掉META-INF文件夾下的簽名文件
刪除CERT.RASA CERT.SF 只留下MANIFEST.MF文件即可 然后使用Auto-sign工具重新對(duì)其進(jìn)行簽名
具體的調(diào)用格式如下
重新簽名之后的apk包即可和原來的包一樣正常地安裝到手機(jī)上 |
|