Frida JavaScript-api 中文手册
  • JavaScript API 手册
  • 目录
  • 1. 运行时信息
    • 1.1 Frida
    • 1.2 Script
  • 2. 进程,线程,模块和内存
    • 2.1 线程 (Thread)
    • 2.2 进程 (Process)
    • 2.3 模块 (Module)
    • 2.4 模块映射 (ModuleMap)
    • 2.5 内存 (Memory)
    • 2.6 内存读写监视器 (MemoryAccessMonitor)
    • 2.7 C模块 (CModule)
    • 2.8 Api解析器 (ApiResolver)
    • 2.9 调试符号 (DebugSymbol)
    • 2.10 内核 (Kernel)
  • 3. 数据类型,函数和回调
    • 3.1 64位整型 (Int64)
    • 3.2 无符号64位整型 (UInt64)
    • 3.3 Native指针 (NativePointer)
    • 3.4 数组 (ArrayBuffer)
    • 3.5 Native函数 (NativeFunction)
    • 3.6 Native回调 (NativeCallback)
    • 3.7 系统函数 (SystemFunction)
  • 4. 网络
    • 4.1 套接字 (Socket)
    • 4.2 套接字监听器 (SocketListener)
    • 4.3 套接字连接 (SocketConnection)
  • 5. 文件和数据流
    • 5.1 文件 (File)
    • 5.2 读写流 (IOStream)
    • 5.3 输入流 (InputStream)
    • 5.4 输出流 (OutputStream)
    • 5.5 Unix输入流 (UnixInputStream)
    • 5.6 Unix输出流 (UnixOutputStream)
    • 5.7 Win32输入流 (Win32InputStream)
    • 5.7 Win32输出流 (Win32OutputStream)
  • 6. 数据库
    • 6.1 Sqlite数据库
    • 6.2 Sqlite语句
  • 7. 注入
    • 7.1 Interceptor
    • 7.2 Stalker
    • 7.3 ObjC
    • 7.4 Java
  • 8. CPU指令
    • 8.1 指令集
    • 8.2 X86写入
    • 8.3 X86重定位
    • 8.4 x86枚举类型
    • 8.5 Arm写入
    • 8.6 Arm重定位
    • 8.7 Thumb写入
    • 8.8 Thumb重定位
    • 8.9 ARM 枚举类型
    • 8.10 ARM64 写入
    • 8.11 ARM64 重定位
    • 8.12 AARCH64 枚举类型
    • 8.13 Mips写入
    • 8.14 Mips重定位
    • 8.15 Mips枚举类型
  • 9. 其他
    • 9.1 终端
    • 9.2 转储
    • 9.3 缩写
    • 9.4 宿主与被注入程序之间的通信
    • 9.5 时间相关
    • 9.6 垃圾回收
Powered by GitBook
On this page
  1. 2. 进程,线程,模块和内存

2.2 进程 (Process)

  • Process.id: 进程id,数字。

  • Process.arch: 架构,字符串:ia32, x64, arm, arm64

  • Process.platform: 系统,字符串:windows, darwin, linux, qnx

  • Process.pageSize: 虚拟内存页大小(单位为字节),数字。这个属性可以帮助你写出移植性更好的脚本。

  • Process.pointerSize: 指针大小(单位为字节),数字。同样可以提高你脚本的可移植性。

  • Process.codeSigningPolicy:

  • Process.isDebuggerAttached(): 指明当前是否有调试器调试,布尔值。

  • Process.getCurrentThreadId(): 后去当前线程的系统级别的ID,数字。

  • Process.enumerateThreads(): 枚举所有的线程,并返回一个对象数组,数组中每个对象都包含以下几个属性: * id: 数字,系统层级的id * state: 字符串,表示该线程的状态:running, stopped, waitting, uninterruptible, halted * context: 对象,包含 pc, sp属性,这两个属性为NativePointer对象,用于指明 EIP/RIP/PC和ESP/RSP/SP(分别对应ia32/x64/arm)。其他处理器也适用,比如eax, rax, r0, x0, 等等。

  • Process.findModuleByAddress(address), Process.getModuleByAddress(address), Process.findModuleByName(name), Process.getModuleByName(name): 返回一个Module,该模块的地址/名称匹配搜索串。若没有找到目标模块,find类函数会返回null,而get类函数会抛出异常。

  • Process.enumerateModules(): 枚举当前已加载的模块,返回值为模块对象列表。

  • Process.findRangeByAddress(address), Process.getRangeByAddress(address): 返回一个对象,该对象描述了包含目标地址的内存块的详细信息。若没有找到这样的内存范围,前者会返回null,而后者会抛出异常。列举的详细信息,详情查看Process.enumerateRanges()。

  • Process.enumerateRanges(protection|specifier): 枚举内存中满足protection条件的内存范围。protection参数应当为这样形式的字符串: rwx, 而rw-表示必须至少可写可读。或者可以传入specifier对象,该对象包含protection和coalesce两个键。protection键同上,coalesce键表示附件的range是否也是同样的保护机制(默认为false,也就是将range分离开)。该函数返回一个对象数组,其中每个对象包含以下属性: * base: NativePointer,表示基地址 * size: 大小,以字节为单位 * protection: 保护属性 * file: 对象,文件映射细节,包含以下属性: * path: 文件的系统地址 * offset: 偏移量,单位字节 * size: 文件大小,单位字节

  • Process.enumerateMallocRanges(): 和enumerateRanges()类似,但是返回系统堆部分的内存。

  • Process.setExceptionHandler(callback): 安装一个进程级的异常处理回调。该回调会在原进程处理函数调用前调用。该回调只有一个参数,details,该参数为为一个对象,包含以下属性: * type: 字符串: abort, access-violation, guard-page, illegal-instruction, stack-overflow, arithmetic, breakpoint, single-step, system * address: NativePointer,发生异常的地址 * memory: 包含以下属性的对象: * operation: 触发异常的操作,字符串: read, write, execute * address: NativePointer,异常发生时,存取的内存地址 * context: 对象,包含pc属性和sp属性,分别为指明 EIP/RIP/PC 和 ESP/RSP/SP 的NativePointer(对应 ia32/x64/arm)。其他处理器也可以使用,比如eax,rax,r0,x0等等。你也可以通过给这些属性赋值来更新寄存器的值。 * nativeContext: NativePointer,包含操作系统的地址,以及架构特异的CPU上下文结构。这个参数是对context参数的补充,防止context提供的信息不足;不过我们不推荐使用这个参数,如果出错了也不要给我们提交pr。 你的回调函数将会决定如何处理异常。你可以单纯记录,并通过send函数和阻塞的recv函数来和你的app通信,也可以修改寄存器和内存,以恢复异常。如果你真的处理了该异常,那么该回调应该返回true,之后frida会立刻恢复该线程。如果你不返回true,frida会将该异常传递给进程的异常处理器,或者让操作系统终止该进程。

Previous2.1 线程 (Thread)Next2.3 模块 (Module)

Last updated 2 years ago