Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

How To Patch (English, Chinese see below)

Requirements

Get services.jar/services.odex/boot.oat from devices

shell> adb pull /system/framework

Convert services to smali

Android 4.4 or non-odex version (services.jar > 1M)

shell> java -Xms1g -jar baksmali-2.2b4.jar d services.jar -o services

Android 5.0 - Android 5.1

shell> java -Xms1g -jar oat2dex.jar boot <path/to/boot.oat>
shell> java -Xms1g -jar oat2dex.jar <path/to/services.odex> dex
shell> java -Xms1g -jar baksmali-2.2b4.jar d <path/to/services.dex> -o services

Android 6.0 - Android 7.1

Note: If boot.oat or services.odex exists in more than one directory, you can just choose any one.

shell> java -Xms1g -jar baksmali-2.2b4.jar x -d <dir/to/boot.oat> <path/to/services.odex> -o services

Convert apk to smali

shell> java -Xms1g -jar baksmali-2.2b4.jar d <path/to/Brevent APK> -o apk

Patch it

Get patch.py from apk, you can rename apk to zip, then find it in assets/patch.py. If you can get patch.py, then use it direct instead of the one in the apk.

shell> python <path/to/patch.py> -a apk -s services

Convert patched services to services.jar

shell> java -Xms1g -jar smali-2.2b4.jar a -o classes.dex services
shell> jar -cvf services.jar classes.dex

怎样打补丁

  • 说明
命令行> 命令

表示在电脑命令行中执行命令,如果没有特别声明,Linux / Mac OS X / Windows 下均可使用。如果你没听说过命令行,或者听说过但不知道怎么打开命令行,请自行搜索。如果还是不知道怎么打开命令行,建议暂时放弃。

<XXX路径>

表示XXX电脑里的路径XXX路径,不是设备里的路径;请不要包含<>,同时,路径中不要有空格(否则需要转义)。

要求

  • adb, 存在于 Android platform tools 中
  • Python, 最新的 2.X 或者 3.X,用于运行补丁程序
  • Java, Java SE 8 (JDK) 以上,smali/baksmali 需要 Java 7,而 oat2dex 需要Java 8
  • baksmali/smali, 2.2 及以上版本,用于解包封包
  • patch.py(可选), 因为也能从黑域 APK 中提取
  • oat2dex(可选), 版本 v0.86,用于 Android 5.0 与 5.1 解包,因为 baksmali 不支持 Android 5.0 - 5.1

从设备中获取 services.jar, services.odex, boot.oat

命令行> adb pull /system/framework

执行这个命令后,电脑里会出现一些文件,如services.jarservices.odex等。

把 services 转成 smali

Android 4.4 或者非 odex 优化版本 (services.jar 在 1M 以上)

命令行> java -Xms1g -jar baksmali-2.2b4.jar d <services.jar路径,1M以上> -o services

执行完以后,会生成一个新目录services

Android 5.0 - Android 5.1

命令行> java -Xms1g -jar oat2dex.jar boot <boot.oat路径>
命令行> java -Xms1g -jar oat2dex.jar <services.odex路径> <dex目录路径>
命令行> java -Xms1g -jar baksmali-2.2b4.jar d <services.dex路径> -o services

执行完以后,会生成一个新目录services以及中间过程目录odexdex

Android 6.0 - Android 7.1

注意: Android 7.0 及以上版本中的boot.oat依赖同目录下的其它文件,请不要移动boot.oat,直接指定它所在的目录就好。

提示: 如果boot.oatservices.odex出现在多个目录,使用任何一个就好。

命令行> java -Xms1g -jar baksmali-2.2b4.jar x -d <boot.oat所在目录路径> <services.odex文件路径> -o services

执行完以后,会生成一个新目录services

把 apk 转成 smali

因为担心并不随时可以访问网络,所以把部分代码放到了安装包中。

命令行> java -Xms1g -jar baksmali-2.2b4.jar d <黑域APK路径> -o apk

执行完以后,会生成一个新目录apk

打补丁

从安装包中获取 patch.py,可以直接把 apk 后缀改为 zip,就能看到 assets/patch.py 了。如果你能直接下载到最新版的 patch.py,请直接使用它即可。

命令行> python <patch.py路径> -a apk -s services

执行完以后,会提示一共打了多个个补丁。如果出现错误,请确保使用的是原版文件,比如不包含其它补丁。

正常的话,Android 4.4 一共有 14 处补丁,5.0 以上共有 15 处补丁。

输出打过补丁的 services

提示: 你可能需要输入jar的全路径,通常它位于jdk或类似名称的目录下。

命令行> java -Xms1g -jar smali-2.2b4.jar a -o classes.dex services
命令行> jar -cvf services.jar classes.dex

执行完以后,会生成中间过程classes.dex以及目标文件services.jar

现在,补丁完成,请做好备份,替换设备中的相应文件,并删除设备中原始的services.odex,重启。