【001】frida API分类 总览

1.java曾API(Android专用)

用于操作Java类、方法和字段,适用于Android应用的动态分析。

Java.perform(fn):确保在Java JVM初始化后执行毁掉函数

Java.use(className):获取指定Java类的引用

Java.choose(className,callbacks);枚举堆中所有指定类的实例。

Java.enumerateLoadedClasses():列出所有已加载的Java类。

Java.enumerateClassLoaders();列出所有的类加载器

Java.openClassFile(path):加载指定路径的DEX文件

Java.registerCalss(spec): 动态注册一个新的java类

2.Native层API(跨平台)

用于操作本地函数、内存和模块,适用于所有支持的操作系统。

2.1 Interceptor模块(函数Hook)

Interceptor.attach()

Interceptor.replace(address,replacement): 替换指定地址的函数实现

Interceptor.detacheAll():移除所有已附加的钩子。

2.2NativeFunction/NattiveCallback

new NativeFunction(address,returnType,argTypes):创建一个指向本地函数的JavaScript包装器

new NativeCallback(fn,returnType,argTypes):将JavaScript函数转换为本地回调函数。

2.3 Memory模块(内存操作)

Memory.readUtf8String(ptr)/ Memory.writeUtf8String(ptr,str):读取/写入UTF-8字符串

Memory.readByteArray(ptr,length):

Memory.alloc(size): 在目标进程中分配指定大小的内存。

Memory.allocUtf8String(str) 分配内存并写入UTF-8字符串

Memory.scan(address,size,pattern,callbacks):扫描内存以查找匹配的模式。

Memory.scanSync(address,size,pattern):同步扫描内存以查找匹配的模式。

2.4 Module模块 (模块操作)

Module.findBaseAddress(name):获取指定模块的基地址。

Module.findExportByName(module,exportName): 获取模块中导出函数的地址。

Module.enumerateExports(name):列出模块的所有导出符号

Module.enumerateImports(name):列出模块的所有导入符号

Module.load(path);加载指定路径的模块

2.5 Process 模块(进程信息)

Process.enumerateModules():列出当前进程加载的所有模块。

Process.enumerateThreads():列出当前进程的所有线程。

Process.getCurrentThreadId():获取当前线程的ID

3. Object-C. API (IOS/MacOS专用)

用于操作Object-C 类和方法,使用于ios 和Macos应用的动态分析。

ObjC.classes:访问所有已注册的Object-C类。

ObjC.classes.ClassName: 获取指定的Objective-C类

ObjC.classes.ClassName("- methodName"):获取实力方法的实现

ObjC.classes.ClassName("+methodName")获取类方法的实现

ObjC.registerClass(spec):动态注册一个新的Objective-C类。

ObjC.enumerateLoadedClasses():列出所有已加载的Objective-C类。

4.辅助工具API

提供调试,数据处理和其他辅助功能。

hexdump(ptr,options):以十六进制格式打印内存内容

Thread.backtrace(context,Backtracer.ACCURATE):获取当前线程的调用堆栈

Stalker.follow(threadId,options):跟踪指定线程的执行路径。

recv(callback) / send(data):用于与主机进行消息通信。

5.Frida CLI/Python /Node.js API

用于与Firda的命令行工具和脚本进行交互。

frida.get_usb_device():获取链接的USB设备

device.attach(pid_or_name):附加到指定的进程。

device.spawn(name)/ device.resume(pid)

session.create_script(js_code):创建一个新的脚本

script.load()/script.unload():加载或卸载脚本

6.高级功能A PI

用于实现更复杂的功能,如动态类注册和内存扫描

NavtivePointer(address):创建一个指向指定地址的指针对象。

NativeFunction(address,returnTYpe,argType):创建一个本地函数的包装器

NativeCasllback(fn,returnTYpe,argTYpes):将JavaScript函数转换为本地回调。

Memory.scan(addres,size,pattern,callbacks):扫描内存以查找匹配的模式。

相关推荐
松☆1 小时前
Dart 核心语法精讲:从空安全到流程控制(3)
android·java·开发语言
_李小白3 小时前
【Android 美颜相机】第二十三天:GPUImageDarkenBlendFilter(变暗混合滤镜)
android·数码相机
小天源5 小时前
银河麒麟 V10(x86_64)离线安装 MySQL 8.0
android·mysql·adb·麒麟v10
2501_915921436 小时前
傻瓜式 HTTPS 抓包,简单抓取iOS设备数据
android·网络协议·ios·小程序·https·uni-app·iphone
csj507 小时前
安卓基础之《(20)—高级控件(2)列表类视图》
android
JMchen1237 小时前
Android计算摄影实战:多帧合成、HDR+与夜景算法深度剖析
android·经验分享·数码相机·算法·移动开发·android-studio
恋猫de小郭8 小时前
Flutter 在 Android 出现随机字体裁剪?其实是图层合并时的边界计算问题
android·flutter·ios
2501_915918419 小时前
把 iOS 性能监控融入日常开发与测试流程的做法
android·ios·小程序·https·uni-app·iphone·webview
benjiangliu10 小时前
LINUX系统-09-程序地址空间
android·java·linux
独自破碎E10 小时前
字符串相乘
android·java·jvm