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: 对象,包含 pcsp属性,这两个属性为NativePointer对象,用于指明 EIP/RIP/PCESP/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对象,该对象包含protectioncoalesce两个键。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/PCESP/RSP/SPNativePointer(对应 ia32/x64/arm)。其他处理器也可以使用,比如eaxraxr0x0等等。你也可以通过给这些属性赋值来更新寄存器的值。 * nativeContext: NativePointer,包含操作系统的地址,以及架构特异的CPU上下文结构。这个参数是对context参数的补充,防止context提供的信息不足;不过我们不推荐使用这个参数,如果出错了也不要给我们提交pr。 你的回调函数将会决定如何处理异常。你可以单纯记录,并通过send函数和阻塞的recv函数来和你的app通信,也可以修改寄存器和内存,以恢复异常。如果你真的处理了该异常,那么该回调应该返回true,之后frida会立刻恢复该线程。如果你不返回true,frida会将该异常传递给进程的异常处理器,或者让操作系统终止该进程。

Last updated