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会将该异常传递给进程的异常处理器,或者让操作系统终止该进程。
Last updated