Android Hook怎么劫持参数是接口并且调用接口里面的方法
if(!lpparam?.packageName.equals("com.xxx.xxx")) returnXposedBridge.log("找到相关应用")
val onClickListener = lpparam?.classLoader?.loadClass("android.view.View\$OnClickListener")
XposedHelpers.findAndHookMethod(
"android.view.View",
lpparam!!.classLoader,
"setOnClickListener",
onClickListener,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
super.beforeHookedMethod(param)
for (item in param.args){
XposedBridge.log(item.toString())
if(item is Class<*>){
XposedBridge.log("找到相关接口")
item.getMethod("onClick").invoke(item,"这里是View")
}
}
param.result = {}
}
})就是类似于android用户点击事件,劫持setOnClickListener方法,并且拿到OnClickListener参数然后执行这个接口参数的onClick的方法。实现用户没有点击,又hook程序主动调用onClick方法骗过应用,让应用以为用户点击了。图片上的只是一个实现例子,现在的问题是这个参数转化不了Class,然后就无法调用里面的方法 本帖最后由 Tsihen 于 2021-10-31 22:30 编辑
楼主这个意思吗
```kotlin
if(!lpparam?.packageName.equals("com.xxx.xxx")) return
XposedBridge.log("找到相关应用")
val cls_onClickListener = lpparam?.classLoader?.loadClass("android.view.View\$OnClickListener")
XposedHelpers.findAndHookMethod(
"android.view.View",
lpparam!!.classLoader,
"setOnClickListener",
cls_onClickListener,
object : XC_MethodHook() {
override fun beforeHookedMethod(param: MethodHookParam) {
super.beforeHookedMethod(param)
for (item in param.args){
XposedBridge.log(item.toString())
if(itemjavaClass.isAssignableFrom(cls_onClickListener)){ // Class<*>.isAssignableFrom(c: Class<*>) 表示获取继承关系。返回 true 表示 this 继承自 c 或者 this 实现了接口 c
XposedBridge.log("找到相关接口")
// 我记得 onClick 方法不需要额外的参数
item.javaClass.getMethod("onClick").invoke(item,"这里是View")
}
}
param.result = {}
} })
```
页:
[1]