原文链接: https://frida.re/docs/javascript-api/#apiresolver
欢迎加入 Frida 交流群: 1049977261
ApiResolver
-
new ApiResolver(type)
:
根据指定的type
创建一个新的查找器, 查找器允许你快速的通过名称找到对应的方法. 可用的查找器类型取决于当前平台以及当前进程中加载的运行环境.
目前, 可用的类型包括:-
module
: 可查找当前已加载的共享库的导入与导出方法. 总是可用. -
objc
: 可查找当前已加载的 Object-C 类中的方法. 当进程中已加载
Objective-C 运行环境时可在 macOS 和 iOS 上使用此类型. 您可以在
运行时使用ObjC.available
来检测, 或者将new ApiResolver('objc')
包裹在 try-catch 中.
查找器在创建时将加载最少量的必要数据, 然后在它收到请求时延时加载剩余的内容. 因此我们推荐您在批量查询时使用同一个实例, 但在之后需要避免在旧数据上搜索时重新创建一个实例.
-
-
enumerateMatches(query)
:
根据query
字符串进行查询, 返回一个包含以下属性的数组:-
name
: 被找到的 API 的名称 -
address
:NativePointer
类型的地址
-
var resolver = new ApiResolver('module');
var matches = resolver.enumerateMatches('exports:*!open*');
var first = matches[0];
/*
* Where `first` is an object similar to:
*
* {
* name: '/usr/lib/libSystem.B.dylib!opendir$INODE64',
* address: ptr('0x7fff870135c9')
* }
*/
var resolver = new ApiResolver('objc');
var matches = resolver.enumerateMatches('-[NSURL* *HTTP*]');
var first = matches[0];
/*
* Where `first` contains an object like this one:
*
* {
* name: '-[NSURLRequest valueForHTTPHeaderField:]',
* address: ptr('0x7fff94183e22')
* }
*/
DebugSymbol
-
DebugSymbol.fromAddress(address)
,DebugSymbol.fromName(name)
:
查询指定位置address
或指定符号name
的调试信息, 并返回包含以下属性的对象:-
address
: 该符号的地址,NativePointer
. -
name
: 该符号的名字字符串, 如果未知则是 null. -
moduleName
: 持有这个符号的模块名称字符串, 如果未知则是 null. -
fileName
: 持有这个符号的文件名称字符串, 如果未知则是 null. -
lineNumber
: 在文件fileName
的行号数字, 如果未知则是 null.
您也可以对这个对象调用
toString()
, 当与Thread.backtrace()
一同使用时非常有用: -
var f = Module.getExportByName('libcommonCrypto.dylib',
'CCCryptorCreate');
Interceptor.attach(f, {
onEnter: function (args) {
console.log('CCCryptorCreate called from:\n' +
Thread.backtrace(this.context, Backtracer.ACCURATE)
.map(DebugSymbol.fromAddress).join('\n') + '\n');
}
});
DebugSymbol.getFunctionByName(name)
:
通过名称查找一个方法, 返回NativePointer
类型的地址.
如果不止一个方法被找到, 则返回第一个. 如果找不到, 则抛出异常.DebugSymbol.findFunctionsNamed(name)
:
通过名称查找方法, 返回一个包含类似方法的NativePointer
类型的地址的数组.DebugSymbol.findFunctionsMatching(glob)
:
查找名称满足条件glob
的方法, 返回它们的NativePointer
类型的地址的数组.