[黑科技] ROM定制

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)入sdcard

  • apktool: 查看apk的資源 xml等文件
    apktool.bat d -f release.apk -o release

  • dex2jar: 將dex轉(zhuǎn)成jar文件
    dex2jar.bat classes.dex

  • jd-gui.exe: 查看jar

  • baksmali: 把dex文件轉(zhuǎn)換成smali文件的工具(dex文件無法修改,要想修改源碼,必須把把dex文件轉(zhuǎn)換成smali文件)
    java -jar baksmali-2.0.3.jar -x classes.dex

  • smali: 把smali文件轉(zhuǎn)換成為dex文件的工具(修改完smali文件,自然需要把它還原到最初的dex文件)
    java -jar smali-2.0.3.jar -o classes.dex out

  • signapk.jar: 對apk進行簽名(沒經(jīng)過簽名的包最終會安裝失敗,提示“解析程序包出現(xiàn)問題”)
    java -jar signapk.jar platform.x509.pem platform.pk8 HelloWorld.apk Signed.apk

  • janus.py: 利用漏洞Janus允許惡意攻擊者任意修改Android應(yīng)用中的代碼,而不會影響其簽名
    python janus.py classes.dex app-debug.apk out.apk

  • findApkByActivity.py: 將遍歷目前下的apk,尋找包含目標Activity找對應(yīng)包名

3 修改系統(tǒng)交互

要明確一點,手機上看到的任何一個界面(撥號界面、設(shè)置界面),實際上都是對于的ROM包上的一個apk,因此如果修改這些界面或交互,實際上就是修改對應(yīng)的apk。

3.1 根據(jù)Activity尋找對應(yīng)的apk包名

  1. 通過adb命令,得知待修改界面的Activity名稱
    adb shell dumpsys activity | findstr "mFocusedActivity"

  2. 通過findApkByActivity.py:腳本尋找對應(yīng)包名
    將ROM下的apk拷到某目錄下,執(zhí)行該腳本 。
    腳本的本質(zhì)是利用apktool.bat將apk反編譯,然后讀取AndroidManifest是否包含目標Activity關(guān)鍵字。

3.2 修改apk

  1. apk的后綴改完zip后,打開得到class.dex;
  2. 使用baksmali,將class.dex換成smali文件, 修改對應(yīng)smali源碼
    這個雖然是簡單的一句修改源碼,但怎么改是個藝術(shù)活;
  3. 使用smali,把已修改smali文件轉(zhuǎn)換成為dex文件的;
  4. 修改完的class.dex重新添加到替換原apk的class.dex;

3.3 安裝apk

  1. 核心破壞
    由于篡改了apk的文件,正常按照時會報錯,我們需要把android校驗的相關(guān)代碼去掉。
    目前使用幸運修改器修改,當然也可以通過自己修改源碼實現(xiàn)。

  2. 替換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 實用資料

4 普通應(yīng)用修改為系統(tǒng)應(yīng)用

4.1 步驟

  1. Apk安裝正常 ;
  2. 將apk文件移動到system/app目錄;
  3. 對應(yīng)so的文件移動到system/lib目錄;
  4. 重啟手機;

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ù)研!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容