[黑科技] ROM定制

1 前言

最近在对ROM定制进行了预演,整个过程挺好玩的,这里分享一下。
目前遇到需求主要有:

  • 修改系统交互
  • 普通应用修改为系统应用
  • 普通应用绕权限检验

2 工具介绍:

  • adb: 不解释
    adb shell dumpsys activity | findstr "mFocusedActivity" //获取当前activity名称
    adb logcat |tee log.log //将日志打印到文件
    adb logcat |grep AppOps //打印指点TAG的日志
    adb push E:\apk\ /sdcard/ //将文件导入sdcard

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

  • dex2jar: 将dex转成jar文件
    dex2jar.bat classes.dex

  • jd-gui.exe: 查看jar

  • baksmali: 把dex文件转换成smali文件的工具(dex文件无法修改,要想修改源码,必须把把dex文件转换成smali文件)
    java -jar baksmali-2.0.3.jar -x classes.dex

  • smali: 把smali文件转换成为dex文件的工具(修改完smali文件,自然需要把它还原到最初的dex文件)
    java -jar smali-2.0.3.jar -o classes.dex out

  • signapk.jar: 对apk进行签名(没经过签名的包最终会安装失败,提示“解析程序包出现问题”)
    java -jar signapk.jar platform.x509.pem platform.pk8 HelloWorld.apk Signed.apk

  • janus.py: 利用漏洞Janus允许恶意攻击者任意修改Android应用中的代码,而不会影响其签名
    python janus.py classes.dex app-debug.apk out.apk

  • findApkByActivity.py: 将遍历目前下的apk,寻找包含目标Activity找对应包名

3 修改系统交互

要明确一点,手机上看到的任何一个界面(拨号界面、设置界面),实际上都是对于的ROM包上的一个apk,因此如果修改这些界面或交互,实际上就是修改对应的apk。

3.1 根据Activity寻找对应的apk包名

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

  2. 通过findApkByActivity.py:脚本寻找对应包名
    将ROM下的apk拷到某目录下,执行该脚本 。
    脚本的本质是利用apktool.bat将apk反编译,然后读取AndroidManifest是否包含目标Activity关键字。

3.2 修改apk

  1. apk的后缀改完zip后,打开得到class.dex;
  2. 使用baksmali,将class.dex换成smali文件, 修改对应smali源码
    这个虽然是简单的一句修改源码,但怎么改是个艺术活;
  3. 使用smali,把已修改smali文件转换成为dex文件的;
  4. 修改完的class.dex重新添加到替换原apk的class.dex;

3.3 安装apk

  1. 核心破坏
    由于篡改了apk的文件,正常按照时会报错,我们需要把android校验的相关代码去掉。
    目前使用幸运修改器修改,当然也可以通过自己修改源码实现。

  2. 替换apk
    在有root权限的情况下,将修改好的dex和apk,替换 system/priv-app以及 data/dalvik-cache,重启即可。

3.4 结语

上述方案的简单的可以总结为:先对ROM进行核心破坏,破坏其对apk安装时的签名校验,然后可以尽情的篡改安装系统apk。
以上方案在HM NOTE 1TEL(MIUI9.2、Android4.4.4)测试生效,是在手机获取root权限后,进行篡改操作。其实也可以直接修改rom包。

3.5 实用资料

  • Android安全讲座第八层[二] 替换已经安装后的应用的dex文件
  • [原创]安天移动安全:Janus高危漏洞深度分析
  • apk解包+修改源码+重新打包
  • APK反编译
  • MIUI ROM修改教程Ⅰ【破解安卓核心,通杀所有签名应用】

4 普通应用修改为系统应用

4.1 步骤

  1. Apk安装正常 ;
  2. 将apk文件移动到system/app目录;
  3. 对应so的文件移动到system/lib目录;
  4. 重启手机;

4.2 坑

由于需要吧so文件都移动到system/lib,所以如果你的应用里的so如果与系统的重名,那么就需要修改自己app的so名称。

4.3 实用资料

Android 将自己的应用改为系统应用

5 普通应用绕权限检验

碎碎念

实现这个功能,最先想到的是修改源码AppOpsServie的checkOp方法,不过经过调试,发现apk校验权限时,并不会走这个方法(android 4.4)。
然而,在将应用转成系统应用后,应用自动获取该有的权限,完美!
不过其它版本的需要额外预研!

你可能感兴趣的:([黑科技] ROM定制)