Android 台灣中文網
標題: apk和odex的合併,讓軟體成為完整的apk包以便反編譯 [打印本頁]
作者: 暗桌之光 時間: 2012-3-4 15:37
標題: apk和odex的合併,讓軟體成為完整的apk包以便反編譯
Android的ROM中正常的軟體都是apk內包含有一個classes.dex,但也有有時會沒有(比如MIUI或有些HTC的ROM),卻有很多odex文件,相對於APK中的dex文件而言這個odex有什麼作用呢?
首先分析一下apk文件的安裝過程。安裝apk包,會在/data/app目錄複製一份安裝包,在/data/dalvikvm-cache目錄放一個解壓出來的classes.dex,如果有so文件,還要複製到對應的文件夾。但是,如果把一個apk分解為apk+odex,情況就大大不同了,這時完全可以把apk內的lib文件夾和classes.dex文件刪掉,然後簽名,配合odex一起使用,當然so文件也不能丟。所以,
正常的包占的的空間=原包+classes.dex+so;
分解後的包占的空間=分解包+odex+so。
這樣做可以使其廠商保證一定的反盜版,因為沒有沒有dex文件的 apk是無法正常安裝的,而廠商直接將odex和不完整的apk文件放到手機rom固化到/system/bin中可以讓一般用戶無法正常導出使用,同時apk帶odex不僅節約空間,而且還能優化加載速度。
而那個 apk 是殘缺的,裡面沒有 classes.dex 文件,殘缺的 apk 是裝不了的,只能把這個 apk 跟 odex 合併成一個完整的 apk 才能安裝。
下面介紹合併的方法:
需要的工具:
1.smali-1.2.6.jar 和 baksmali-1.2.6.jar
2.還需要這個 apk 所在的 rom 裡面的一些 jar 文件,都在 /system/framework 裡面: core.jar, ext. jar, framework. jar, Android.policy. jar, services. jar 。當然,這五個是最基本的,有可能還不夠,最好將整個framework文件夾裡面的都放這裡(不然可能會出異常)。
總共分四步:
1. 首先你的電腦要配置好java環境,不懂的自己Google。
2.把下載好的 smali-1.2.6.jar 和 baksmali-1.2.6.jar ,還有 rom 裡面摳出來的 jar ,放到工作目錄,然後 apk 和 odex 也放到一起。
3.分解 odex 文件為 class 文件。
命令: java -jar baksmali-1.2.6.jar -x <a.odex>
<a.odex> 處是你要分解的 odex 文件的名字(沒有角括號),命令完成之後,會生成一個 out 文件夾,裡面就是所有的 class 文件。
4.將 class 生成為 classes.dex 文件。
命令: java -Xmx512M -jar smali-1.2.6.jar out -o classes.dex
這一步應該不會有什麼問題,然後會生成 classes.dex 文件。
5.把 classes.dex 放入 apk 裡面。
最後這一步最簡單了,用解壓縮軟體開啟 apk ,然後把千辛萬苦生成的 classes.dex 拖進去替換原來的dex文件就 OK 了。這個 apk 就能用了。如果想給他重新簽個名的話,去找個 Auto Sign 簽名工具簽署一下就行。
tool.rar
(2.12 MB, 下載次數: 914)