對於/system/app下的odex,我們使用baksmali工具,就可以反編譯出smali文件,我們對些smali文件做修改之後,在目標機器上,使用dexopt-wrapper工具進行odex化之後,push到/system/app下就ok。但是,對於framework下面的文件,壹般不能如此修改,修改之後,push到/system/framework下面的時候,壹般都會把系統搞掛掉。如果framework下面文件不能修改,那麽玩android系統不是缺少很多樂趣?
[Toturial][Windows] How Editing The ODEX framework files?
這個方法需要改進壹下就可以適合各種機型了。
framework下面的odex進行反編譯之後,在打包,push到機器上運行不起來主要有兩點原因。
第壹點,就是framework下面的jar包,很多都是dalvik虛擬需要使用的BOOTCLASSPATH,android對此有特別的安全機制,所有我們進行odex化的時候,需要加入$BOOTCLASSPATH
第二點,就是簽名的問題,如果前面不對,那麽還是會啟動fail的,這個我們copy原有的odex文件頭就可以解決。
具體的方法,我們以下面壹個例子,修改android.policy.odex為例子。
我們提取目標機器中的android.policy.odex和android.policy.jar的,然後使用baksmali,修改smali之後,使用smali工具之後,打包成classes.dex,然後替換到android.policy.jar中。
下面開始我們的正文方法:
1,在/data/local/tmp中建立壹個zangcf_changed目錄和zangcf_original目錄
adb shell
cd /data/local/tmp
mkdir zangcf_changed
mkdir zangcf_original
exit
2,把原始文件和修改後的文件copy到目標機器
adb shell
adb push ./zangcf_changed/android.policy.jar /data/local/tmp/zangcf_changed/
adb push ./zangcf_original/android.policy.jar /data/local/tmp/zangcf_original/
adb push ./zangcf_original/android.policy.odex /data/local/tmp/zangcf_original/
exit
3, 準備執行環境
adb shell
su
mount -o rw,remount /system
chmod 777 /system/bin
chmod 777 /system/framework/
exit
exit
adb push ./dexopt-wrapper /system/bin
adb shell
su
chmod 777 /system/bin/dexopt-wrapper
exit
exit
4, 進行odex化
adb shell
su
cp /data/local/tmp/zangcf_changed/android.policy.jar /system/framework/android.policy.jar
dexopt-wrapper /system/framework/android.policy.jar /system/framework/new_android.policy.odex $BOOTCLASSPATH
cp -f /sdcard/amestris_original/android.policy.jar /system/framework
chmod 777 /system/framework/android.policy.odex
chmod 777 /system/framework/android.policy.jar
chmod 777 /system/framework/new_android.policy.odex
exit
5, copy原文件的頭。
adb shell
su
busybox dd if=/system/framework/android.policy.odex of=/system/framework/new_android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
cp /system/framework/new_android.policy.odex /system/framework/android.policy.odex
exit
exit
6, 刪除臨時文件和修改文件屬性
adb shell
su
chmod 644 /system/framework/android.policy.odex
chown root.root /system/framework/android.policy.odex
rm /system/framework/new_android.policy.odex
exit
exit
7,ok,然後重啟
adb reboot