Interceptor.attach(Module.findExportByName("libunity.so", "_ZN3com6unity3d3ads9UnityAds4loadERKNS1_4IAdE")
时间: 2023-07-10 15:19:40 浏览: 122
这段代码使用了Frida的Interceptor来hook UnityAds.load方法,但是函数名是C++的符号名,需要使用C++符号名来进行hook。在C++中,函数名会被编译器进行名称修饰(name mangling),因此在使用Frida hook C++函数时需要使用名称修饰后的符号名。
你可以使用命令行工具`nm`来查看符号表中的名称修饰符号名:
```
$ nm -D libunity.so | grep UnityAds
```
你会看到类似下面这样的输出:
```
0000000001234567 T _ZN3com6unity3d3ads9UnityAds4loadERKNS1_4IAdE
```
其中`_ZN3com6unity3d3ads9UnityAds4loadERKNS1_4IAdE`就是名称修饰后的符号名。你可以将这个符号名拷贝到Frida脚本中。
另外,你需要确保在Frida脚本中正确声明参数类型,并使用正确的传递方式。在C++中,参数的传递方式可能是引用、指针或者值传递等,因此需要根据函数声明中的参数传递方式来正确声明Frida脚本中的参数类型。
相关问题
frida 查看com.unity3d.ads.UnityAds.load方法被谁调用
你可以使用Frida的Interceptor来hook UnityAds.load方法,然后在方法被调用时打印调用堆栈信息,以此来查看该方法被谁调用。
具体的Frida脚本代码如下:
```javascript
Interceptor.attach(Module.findExportByName("libunity.so", "_ZN3com6unity3d3ads9UnityAds4loadERKNS1_4IAdE"), {
onEnter: function(args) {
console.log("[*] UnityAds.load method called from:\n" + Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n"));
}
});
```
这个脚本会hook UnityAds.load方法,当该方法被调用时,会打印调用堆栈信息,包括调用该方法的函数名和调用该函数的地址。
com.unity3d.ads.UnityAds.load 被谁调用的
要查找`com.unity3d.ads.UnityAds.load`方法被谁调用,可以使用Frida的`Interceptor`来hook该方法,并在方法被调用时打印调用堆栈信息。
以下是一个使用Frida的JavaScript代码片段,用于hook `com.unity3d.ads.UnityAds.load`方法并打印调用堆栈信息:
```js
Java.perform(function() {
var UnityAds = Java.use("com.unity3d.ads.UnityAds");
var load = UnityAds.load.overload("com.unity3d.ads.IUnityAdsInitializationListener");
Interceptor.attach(load.implementation, {
onEnter: function(args) {
console.log("[*] UnityAds.load method called from:\n" + Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join("\n"));
}
});
});
```
这段代码使用`Java.use`获取到`com.unity3d.ads.UnityAds`类,并使用`UnityAds.load.overload`获取到`com.unity3d.ads.UnityAds.load`方法。然后,它使用`Interceptor.attach`来hook该方法,并在方法被调用时打印调用堆栈信息。
当你运行该代码片段时,它会在目标应用程序中hook `com.unity3d.ads.UnityAds.load`方法,并打印出所有调用该方法的堆栈信息。你可以查看输出,找到你感兴趣的调用者所在的堆栈帧。