原文鏈接: https://frida.re/docs/javascript-api/#file
歡迎加入 Frida 交流群: 1049977261
File
-
new File(filePath, mode)
:
在filePath
處使用mode
模式打開或創建文件.
mode
指明了這個文件應該如何被打開. 例如,"wb"
意為以寫入二進制內容的方式打開文件 (它的格式和 C 語言標準庫中的fopen()
相同).
write(data)
:
將data
同步地寫入文件,data
可以是字符串, 也可以是通過NativePointer#readByteArray
返回的緩沖區.flush()
:
直接將緩沖區中的數據寫入底層的文件.close()
:
關閉文件. 您應當在操作完文件后調用這個方法, 除非您可以接受這個對象被當做垃圾回收掉或者腳本被卸載時自動觸發.
SqliteDatabase
SqliteDatabase.open(path[, options])
:
打開path
處的 SQLite v3 數據庫,path
是數據庫在文件系統上的路徑字符串.
默認情況下, 數據庫將以讀寫模式被打開, 但您也可以通過提供一個包含flags
屬性的options
對象來自定義這一行為,flags
是一個由一個或多個以下值構成的數組:readonly
,readwrite
,create
.
返回的SqliteDatabase
對象將允許您對數據庫進行操作.SqliteDatabase.openInline(encodedContents)
:
類似于open()
但數據庫的內容將以 Base64 編碼過的字符串形式被提供.
我們推薦您在對數據庫進行 Base64 編碼之前進行一次 gzip 壓縮, 但這是可選的并且這個函數會檢查文件是否有 gzip 文件頭. 數據庫是在內存中以讀寫模式被打開的, 并不會接觸到文件系統中的原數據庫. 這對于需要自帶一份預計算數據的代理來說十分有用, 比如用來引導動態分析的靜態分析數據.
close()
:
關閉數據庫. 您應當在操作完文件后調用這個方法, 除非您可以接受這個對象被當做垃圾回收掉或者腳本被卸載時自動觸發.exec(sql)
:
執行一條原生 SQL 語句,sql
是基于文本的語句字符串.
由于執行結果是被忽略的, 因此您應當使用配置數據庫相關的語句, 例如, 創建一張表.-
prepare(sql)
:
將提供的語句sql
編譯為 SqliteStatement 對象.例如:
var db, smt, row, name, bio;
db = SqliteDatabase.open('/path/to/people.db');
smt = db.prepare('SELECT name, bio FROM people WHERE age = ?');
console.log('People whose age is 42:');
smt.bindInteger(1, 42);
while ((row = smt.step()) !== null) {
name = row[0];
bio = row[1];
console.log('Name:', name);
console.log('Bio:', bio);
}
smt.reset();
-
dump()
:
將數據庫轉儲為 gzip 壓縮過的 Base64 編碼的二進制大型對象 (blob), 并以字符串返回.
對于通過SqliteDatabase.openInline()
來內聯一份緩存到您的代理代碼中時很有用.
SqliteStatement
-
bindInteger(index, value)
: 將整型value
綁定到index
-
bindFloat(index, value)
: 將浮點數value
綁定到index
-
bindText(index, value)
: 將文本value
綁定到index
-
bindBlob(index, bytes)
: 將ArrayBuffer
, 字節數組或字符串bytes
綁定到index
-
bindNull(index)
: 將空值綁定到index
-
step()
:
要么開始一次新的查詢并獲取第一個結果, 要么移動到下一行.
返回一個包含查詢語句中指定順序的值的數組, 如果沒有結果的話則返回null
.
如果此時您意圖再次使用這個對象的話, 您應該調用reset()
. -
reset()
: 重置內部狀態以執行接下來的語句.