whale:安卓隐私合规调试工具

964 阅读1分钟

前不久上市场遇到“违规获取用户隐私”相关调整,所以看到一文章(Android 违规获取用户隐私(获取MAC地址)整改)。 用Hook系统方法来实现实现功能,但觉得有点麻烦,需要每个Activity和Service都要调用特定方法。就想有没有全局hook的实现,最后找到 Whale这个hook库还比较方便,但 只支持Android5.0.0 ~ 9.0.0,不过作为调试工具也够用了。 在自己项目,我是建了个调试用的hook分支,来排查用户同意协议前哪里调用了id类方法,然后做相应修改。完成后代码提交到master分支,hook相关逻辑仅在hook分支。

作者提供了所有代码,让用户直接复制到项目中使用,有点麻烦。我Fork了一份代码,然后增加了个whale-jitpack打包

implementation 'com.github.DonaldDu:whale:1.0.0'

以下是hook的逻辑代码,尽早调用WhaleHook.init(),以确保在能hook到对就方法。

object WhaleHook {
    fun init() {
        hookAndroidId()
    }

    private fun hookAndroidId() {
        XposedBridge.log("start androidId")
        //android.provider.Settings.Secure#getString
        val clazz = android.provider.Settings.Secure::class.java
        val getString = clazz.getDeclaredMethod(
            "getString", android.content.ContentResolver::class.java, java.lang.String::class.java
        )
        XposedBridge.hookMethod(getString, object : XC_MethodHook() {
            override fun beforeHookedMethod(param: MethodHookParam) {
                val key = param.args.last()
                if (key == android.provider.Settings.Secure.ANDROID_ID) {
                    val msg = "hookAndroidId to 0"
                    println(msg)
                    Exception(msg).printStackTrace()//print call StackTrace
                    param.result = "0"
                }
            }
        })
    }
}