Android 篡改apk檔案的可行性分析

來源:互聯網
上載者:User

Android的.apk檔案實際上就是一個zip檔案 可以直接用winrar開啟

如所示:

包括了一個META-INF目錄

一個res目錄

一個AndroidManifest.xml

一個classes.dex

 

 

AndroidManifest.xml是每個應用都必須定義和包含的,它描述了應用的名字、版本、許可權、引用的庫檔案等等資訊,如要把apk上傳到Google Market上,也要對這個xml做一些配置。

  META-INF目錄

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

  classes.dex檔案

  classes.dex是java源碼編譯後產生的java位元組碼檔案。但由於Android使用的dalvik虛擬機器與標準的java虛擬機器是不相容 的,dex檔案與class檔案相比,不論是檔案結構還是opcode都不一樣。目前常見的java反編譯工具都不能處理dex檔案。

  Android模擬器中提供了一個dex檔案的反編譯工具dexdump。用法為首先啟動Android模擬器,把要查看的dex檔案用adb push上傳的模擬器中,然後通過adb shell登入,找到要查看的dex檔案,執行dexdump xxx.dex。

  目前在網上能找到的另一個dex檔案的反編譯工具是Dedexer。Dedexer可以讀取dex格式的檔案,產生一種類似於組合語言的輸出。這種輸出與jasmin[ ]的輸出相似,但包含的是Dalvik的位元組碼。我們會在下一節詳細介紹一下Dedexer。

  res 目錄

  res目錄存放資源檔。

  resources.arsc

  編譯後的二進位資源檔。

其中dex的格式參見:http://www.retrodev.com/android/dexformat.html

 

 

 

apk檔案解壓後反編譯: 

圖片等多媒體檔案:沒有編譯,無需反編譯。

 layout等二進位xml檔案:使用AXMLPrinter將其轉換為可讀的xml檔案:java -jar AXMLPrinter2.jar main.xml > new_main.xml 
工具:http://code.google.com/p/android4me/downloads/list 

是直接列印出來一個main.xml

要開啟AndroidManifest.xml或者其他xml也同理

 

class檔案反編譯: 
Android模擬器中提供了一個dex檔案的反編譯工具,dexdump。用法為首先啟動Android模擬器,把要查看的dex檔案用adb push上傳的模擬器中,然後通過adb shell登入,找到要查看的dex檔案,執行dexdump xxx.dex。 

 

然後找到上傳的要開啟的dex

 

然後可以看到反組譯碼之後的代碼如下

目前在網上能找到的另一個dex檔案的反編譯工具是Dedexer。Dedexer可以讀取dex格式的檔案,產生一種類似於組合語言的輸出。這種輸出與jasmin[ ]的輸出相似,但包含的是Dalvik的位元組碼。 

 

 

resources.arsc這個檔案我是用了

漢化浪子編寫的 AndroidResEdit 軟體 能看到裡面的所有欄位

直接用記事本開啟大多數是亂碼

 

開啟如所示

 

以上就是apk檔案的詳細結構分析

apk檔案如果把其中的資源檔進行替換修改 比如進行類似漢化操作的時候

需要重新對其簽名

 

具體的可以替換的內容有res檔案下下的資源檔

而且res下面的資源檔中的圖片等多媒體檔案:沒有編譯,無需反編譯,這樣就可以很輕鬆地獲得一些比較好的apk應用裡的圖片,通過解碼xml檔案,可以還原原來應用的xml檔案,這樣,可以獲得其介面布局檔案。

 

在替換了之後,只需要使用Auto-sign工具重新對其進行簽名即可,首先,刪掉META-INF檔案夾下的簽名檔案

 

 

刪除CERT.RASA  CERT.SF

只留下MANIFEST.MF檔案即可

然後使用Auto-sign工具重新對其進行簽名

 

具體的調用格式如下

@ECHO OFF<br />Echo Auto-sign Created By Dave Da illest 1<br />Echo Update.zip is now being signed and will be renamed to update_signed.zip<br />java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update_signed.zip<br />Echo Signing Complete </p><p>Pause<br />EXIT<br /> 


重新簽名之後的apk包即可和原來的包一樣正常地安裝到手機上

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.