1 前言
最近在對ROM定制進行了預(yù)演,整個過程挺好玩的,這里分享一下。
目前遇到需求主要有:
- 修改系統(tǒng)交互
- 普通應(yīng)用修改為系統(tǒng)應(yīng)用
- 普通應(yīng)用繞權(quán)限檢驗
2 工具介紹:
adb: 不解釋
adb shell dumpsys activity | findstr "mFocusedActivity" //獲取當前activity名稱
adb logcat |tee log.log //將日志打印到文件
adb logcat |grep AppOps //打印指點TAG的日志
adb push E:\apk\ /sdcard/ //將文件導(dǎo)入sdcardapktool: 查看apk的資源 xml等文件
apktool.bat d -f release.apk -o releasedex2jar: 將dex轉(zhuǎn)成jar文件
dex2jar.bat classes.dexjd-gui.exe: 查看jar
baksmali: 把dex文件轉(zhuǎn)換成smali文件的工具(dex文件無法修改,要想修改源碼,必須把把dex文件轉(zhuǎn)換成smali文件)
java -jar baksmali-2.0.3.jar -x classes.dexsmali: 把smali文件轉(zhuǎn)換成為dex文件的工具(修改完smali文件,自然需要把它還原到最初的dex文件)
java -jar smali-2.0.3.jar -o classes.dex outsignapk.jar: 對apk進行簽名(沒經(jīng)過簽名的包最終會安裝失敗,提示“解析程序包出現(xiàn)問題”)
java -jar signapk.jar platform.x509.pem platform.pk8 HelloWorld.apk Signed.apkjanus.py: 利用漏洞Janus允許惡意攻擊者任意修改Android應(yīng)用中的代碼,而不會影響其簽名
python janus.py classes.dex app-debug.apk out.apkfindApkByActivity.py: 將遍歷目前下的apk,尋找包含目標Activity找對應(yīng)包名
3 修改系統(tǒng)交互
要明確一點,手機上看到的任何一個界面(撥號界面、設(shè)置界面),實際上都是對于的ROM包上的一個apk,因此如果修改這些界面或交互,實際上就是修改對應(yīng)的apk。
3.1 根據(jù)Activity尋找對應(yīng)的apk包名
通過adb命令,得知待修改界面的Activity名稱
adb shell dumpsys activity | findstr "mFocusedActivity"通過findApkByActivity.py:腳本尋找對應(yīng)包名
將ROM下的apk拷到某目錄下,執(zhí)行該腳本 。
腳本的本質(zhì)是利用apktool.bat將apk反編譯,然后讀取AndroidManifest是否包含目標Activity關(guān)鍵字。
3.2 修改apk
- apk的后綴改完zip后,打開得到class.dex;
- 使用baksmali,將class.dex換成smali文件, 修改對應(yīng)smali源碼
這個雖然是簡單的一句修改源碼,但怎么改是個藝術(shù)活; - 使用smali,把已修改smali文件轉(zhuǎn)換成為dex文件的;
- 修改完的class.dex重新添加到替換原apk的class.dex;
3.3 安裝apk
核心破壞
由于篡改了apk的文件,正常按照時會報錯,我們需要把android校驗的相關(guān)代碼去掉。
目前使用幸運修改器修改,當然也可以通過自己修改源碼實現(xiàn)。替換apk
在有root權(quán)限的情況下,將修改好的dex和apk,替換 system/priv-app以及 data/dalvik-cache,重啟即可。
3.4 結(jié)語
上述方案的簡單的可以總結(jié)為:先對ROM進行核心破壞,破壞其對apk安裝時的簽名校驗,然后可以盡情的篡改安裝系統(tǒng)apk。
以上方案在HM NOTE 1TEL(MIUI9.2、Android4.4.4)測試生效,是在手機獲取root權(quán)限后,進行篡改操作。其實也可以直接修改rom包。
3.5 實用資料
- Android安全講座第八層[二] 替換已經(jīng)安裝后的應(yīng)用的dex文件
- [原創(chuàng)]安天移動安全:Janus高危漏洞深度分析
- apk解包+修改源碼+重新打包
- APK反編譯
- MIUI ROM修改教程Ⅰ【破解安卓核心,通殺所有簽名應(yīng)用】
4 普通應(yīng)用修改為系統(tǒng)應(yīng)用
4.1 步驟
- Apk安裝正常 ;
- 將apk文件移動到system/app目錄;
- 對應(yīng)so的文件移動到system/lib目錄;
- 重啟手機;
4.2 坑
由于需要吧so文件都移動到system/lib,所以如果你的應(yīng)用里的so如果與系統(tǒng)的重名,那么就需要修改自己app的so名稱。
4.3 實用資料
Android 將自己的應(yīng)用改為系統(tǒng)應(yīng)用
5 普通應(yīng)用繞權(quán)限檢驗
碎碎念
實現(xiàn)這個功能,最先想到的是修改源碼AppOpsServie的checkOp方法,不過經(jīng)過調(diào)試,發(fā)現(xiàn)apk校驗權(quán)限時,并不會走這個方法(android 4.4)。
然而,在將應(yīng)用轉(zhuǎn)成系統(tǒng)應(yīng)用后,應(yīng)用自動獲取該有的權(quán)限,完美!
不過其它版本的需要額外預(yù)研!