Android deodex(odex 反編譯工具的使用)


需要進行deodex的原因
今天在破解MOTO雙卡雙待手機APN設置的時候, 發現靠網上搜集的信息不足以完成任務, 於是只能自己針對現有手機進行破解。
我遇到的問題是, 如何判斷當前的手機是MOTO雙卡雙待手機, 以及此手機中的APN切換是操作哪些數據庫,邏輯是怎樣的。
於是使用adb pull 將手機中/system/app/, /system/framework/ 下所有的東西都拉取到本地。 理論上應該通過反編譯這些apk和jar包中某些就能夠解決問題。
但是我發現所有的apk包和jar包都進行了odex處理,據說這么處理能夠讓系統一次性加載整個包, 從而提高運行時的效率。(我們的應用是否也有類似的需求?)
進行odex處理后, 所有的apk或者jar包都變成了兩個文件: 1. test1.jar 2. test1.odex; 1. test2.apk 2. test2.odex
發現test1.jar和test2.apk中不包含任何代碼, 於是只能反編譯odex文件。 我們的目的是為了看到代碼, 分4步:
1. 准備工具: 
    准備dex2jar工具,  http://code.google.com/p/dex2jar/
 
2. deodex 將odex文件轉換為smali
示例:
java -jar baksmali-1.4.2.jar -a 7 -x /home/workspace/test1.odex -d /home/workspace/ -o /home/workspace/test1deodex

命令說明:
baksmali
-a <api_level>-x <odex_file>-d <framework_dir> -o <output_dir>
 
3. 將smali打包為dex
java -jar smali-1.4.2.jar /home/workspace/test1deodex/ -o /home/workspace/test1.dex
 
4. 將dex反編譯為jar包
sh dex2jar.sh /home/workspace/test1.dex
 
拿到jar包后就能通過jd-gui看到反編譯的代碼了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM