frida 跟踪所有点击事件 调用
时间: 2023-09-15 10:16:10 浏览: 128
可以使用 Frida 跟踪 Android 应用程序中的所有点击事件。以下是一个示例脚本,可以用于跟踪 Android 应用程序中的所有点击事件:
```javascript
Java.perform(function () {
var View = Java.use('android.view.View');
View.performClick.implementation = function () {
console.log('[*] performClick() called on view: ' + this);
this.performClick();
};
});
```
这个脚本会 hook `android.view.View` 的 `performClick()` 方法,并使用 `console.log()` 输出日志,以便跟踪所有的点击事件。当应用程序中的任何视图被点击时,都会触发 `performClick()` 方法,从而输出相应的日志信息。
请注意,这个脚本只能跟踪应用程序内部的点击事件。如果您想要跟踪屏幕上的所有点击事件,您需要使用更高级的技术,例如使用 AccessibilityService 或者使用 Android 系统的 MotionEvent API。
相关问题
frida 跟踪所有onResume
可以使用 Frida 跟踪 Android 应用程序中的所有 `onResume` 方法。以下是一个示例脚本,可以用于跟踪 Android 应用程序中所有活动的 `onResume` 方法:
```javascript
Java.perform(function() {
var Activity = Java.use('android.app.Activity');
Activity.onResume.implementation = function() {
console.log('[*] onResume() called on activity: ' + this);
this.onResume();
};
});
```
这个脚本会 hook `android.app.Activity` 的 `onResume()` 方法,并使用 `console.log()` 输出日志,以便跟踪所有活动的 `onResume()` 方法。当应用程序中的任何活动被恢复时,都会触发 `onResume()` 方法,从而输出相应的日志信息。
请注意,这个脚本只能跟踪应用程序中的 `onResume()` 方法。如果您想要跟踪其他生命周期方法,可以使用类似的方法 hook 相应的方法。
frida 查看方法被谁调用
要使用Frida查看一个Java方法被哪些方法调用,可以按照以下步骤操作:
1. 在需要查看的应用程序中,找到目标Java类和方法。
2. 在Frida中编写JavaScript脚本,使用Java.use()函数引用目标Java类,并使用该类的方法名作为函数名。
3. 在脚本中使用Java.use()函数引用目标Java类中调用目标方法的所有其他方法。
4. 在调用这些方法时,将它们的调用堆栈记录到Frida脚本中的一个数组中。
5. 最后,在目标应用程序中触发目标Java方法,以启动Frida脚本并捕获其输出。
6. 在Frida的控制台中查看脚本输出,以查看目标Java方法的调用情况和调用堆栈。
下面是一个示例Frida脚本,用于查看目标应用程序中的java.lang.String类的equals()方法被哪些方法调用:
```javascript
Java.perform(function() {
var StringClass = Java.use("java.lang.String");
// 定义一个数组来记录equals()方法的调用堆栈
var callStack = [];
// 用于在Java调用栈中记录方法
function recordMethodCall(method) {
var caller = Java.use("java.lang.Thread").currentThread().getStackTrace();
var callerClassName = caller[2].getClassName();
var callerMethodName = caller[2].getMethodName();
var call = {
"class": callerClassName,
"method": callerMethodName
};
method.callStack.push(call);
}
// 引用所有调用equals()方法的其他方法
var StringEquals = StringClass.equals.overload("java.lang.Object");
StringEquals.implementation = function(other) {
// 记录equals()方法的调用堆栈
var call = {
"class": "java.lang.String",
"method": "equals",
"callStack": []
};
callStack.push(call);
// 记录调用equals()方法的方法的调用堆栈
recordMethodCall(callStack[callStack.length - 1]);
// 调用equals()方法并返回结果
var result = this.equals(other);
return result;
};
// 在控制台中打印所有调用equals()方法的方法的调用堆栈
Java.use("java.lang.Runtime").getRuntime().addShutdownHook(
Java.use("java.lang.Thread").$new({
"run": function() {
console.log("equals() method call stack:");
for (var i = 0; i < callStack.length; i++) {
var call = callStack[i];
console.log(" " + call.class + "." + call.method);
for (var j = 0; j < call.callStack.length; j++) {
var stackCall = call.callStack[j];
console.log(" at " + stackCall.class + "." + stackCall.method);
}
}
}
})
);
});
```
这个脚本会在每次目标应用程序中调用String.equals()方法时,记录该方法的调用堆栈和调用该方法的方法的调用堆栈。在目标应用程序结束时,脚本会在Frida控制台中打印所有调用equals()方法的方法的调用堆栈。