原文鏈接: https://frida.re/docs/javascript-api/#frida
歡迎加入 Frida 交流群: 1049977261
Frida
-
Frida.version
:
一個包含當前 Frida 版本的字符串. -
Frida.heapSize
:
一個被所有腳本和 Frida 自己的運行時共享的包含當前 Frida 私有堆大小的動態(tài)屬性.
這對于監(jiān)控宿主進程正在使用的內(nèi)存量很有用.
Script
-
Script.runtime
:
一個包含正在被使用的運行時的字符串. 要么是DUK
, 要么是V8
.
Process
Process.id
:
包含 PID 的數(shù)字.Process.arch
:
包含ia32
,x64
,arm
或arm64
的字符串.Process.platform
:
包含windows
,darwin
,linux
或qnx
的字符串.Process.pageSize
:
虛擬內(nèi)存頁的尺寸(以byte
為單位). 可用于使你的腳本具有更好的可移植性.Process.pointerSize
:
指針的尺寸(以byte
為單位). 可用于使你的腳本具有更好的可移植性.Process.codeSigningPolicy
:
包含optional
或required
的字符串,后者意味著 Frida 將禁止修改內(nèi)存中已有的代碼, 并且不會嘗試允許未簽名的代碼.
當前這個屬性總是被設(shè)為optional
除非你正在使用 Gadget 并且將其配置為假設(shè)代碼簽名是必要的.
此屬性使您可以確定 Interceptor API是否超出限制, 以及修改代碼或運行未簽名的代碼是否安全。Process.isDebuggerAttached()
:
返回一個布爾值用來表示當前是否有調(diào)試器被附加到進程上.Process.getCurrentThreadId()
:
獲得操作系統(tǒng)指定給當前線程的 id.-
Process.enumerateThreads()
:
列舉所有的線程, 返回一個包含以下屬性的序列:-
id
: 操作系統(tǒng)指定的 id -
state
:running
,stopped
,waiting
,uninterruptible
或halted
的字符串 -
context
: 帶有鍵pc
和sp
的NativePointer
對象, 分別為 ia32 / x64 / arm 指定 EIP / RIP / PC 和 ESP / RSP / SP. 也可以使用其他處理器特定的鍵, 例如eax
,rax
,r0
,x0
等.
-
Process.findModuleByAddress(address)
,Process.getModuleByAddress(address)
,Process.findModuleByName(name)
,Process.getModuleByName(name)
:
返回一個 address 或 name 滿足要求的 Module.
當找不到相應(yīng)的模塊時, find 前綴的方法返回 null 而 get 前綴的方法拋出異常.Process.enumerateModules()
:
列舉當前已加載的模塊, 返回一個 Module 序列.Process.findRangeByAddress(address)
,getRangeByAddress(address)
:
返回一個對象, 其中包含有關(guān)包含 address 的范圍的詳細信息.
當找不到相應(yīng)的范圍是, findRangeByAddress() 返回 null, 而 getRangeByAddress() 拋出異常.
閱讀Process.enumerateRanges()
以便了解哪些字段被包含在內(nèi).-
Process.enumerateRanges(protection|specifier)
:
列舉滿足rwx
格式的字符串參數(shù)protection
的內(nèi)存范圍, 其中rw-
意為 "必須至少是可讀可寫".
Alternatively you may provide aspecifier
object with aprotection
key whose value is as
aforementioned, and acoalesce
key set totrue
if you'd like neighboring
ranges with the same protection to be coalesced (the default isfalse
;
i.e. keeping the ranges separate).
返回一個包含以下屬性的序列:base
: 一個NativePointer
類型的基礎(chǔ)地址size
: 以byte
為單位的尺寸protection
: 讀寫權(quán)限 (如上所述)-
file
: (當可用時) 文件映射詳情, 包含以下屬性:-
path
: 完整的文件系統(tǒng)路徑字符串 -
offset
: 對應(yīng)的文件在硬盤上的偏移量, 以byte
為單位 -
size
: 對應(yīng)的文件在硬盤上的尺寸, 以byte
為單位
-
Process.enumerateMallocRanges()
: just likeenumerateRanges()
, but for
individual memory allocations known to the system heap.-
Process.setExceptionHandler(callback)
:
安裝一個進程側(cè)的異常處理回調(diào), 以便在宿主進程之前獲得處理原生異常的機會.
被調(diào)用時將伴隨包含以下屬性的details
對象:-
type
: 下列字符串中的一種:- abort
- access-violation
- guard-page
- illegal-instruction
- stack-overflow
- arithmetic
- breakpoint
- single-step
- system
-
address
:NativePointer
類型的地址, 標志著異常出現(xiàn)的地方. -
memory
: 如果有的話, 包含以下屬性:-
operation
: 觸發(fā)該異常的操作類型, 僅限于read
,write
, 或execute
. -
address
:NativePointer
類型的地址, 標志著異常出現(xiàn)的地方.
-
-
context
: 帶有鍵pc
和sp
的NativePointer
對象, 分別為 ia32 / x64 / arm 指定 EIP / RIP / PC 和 ESP / RSP / SP. 也可以使用其他處理器特定的鍵, 例如eax
,rax
,r0
,x0
等.
你也可以通過分配這些鍵來更新寄存器值. -
nativeContext
:
操作系統(tǒng)以及特定架構(gòu)的 CPU 的上下文結(jié)構(gòu)的NativePointer
類型的地址.
This is only exposed as a last resort for edge-cases wherecontext
isn't providing enough details. We would however discourage using this and rather submit a pull-request to add the missing bits needed for your use-case.
現(xiàn)在由你的回調(diào)來決定要如何應(yīng)對異常. 它可以記錄這個問題, 通過
send()
和recv()
與你的應(yīng)用進行交互, 或者它可以修改寄存器和內(nèi)存以便從異常中恢復(fù).
如果你處理好了異常, 你應(yīng)對返回true
, 這樣的話 Frida 將立即恢復(fù)線程.
如果你沒有返回true
, Frida 將會把這個異常轉(zhuǎn)發(fā)到宿主進程潛在的異常處理器, 或任由操作系統(tǒng)終止進程. -