原文鏈接: https://frida.re/docs/javascript-api/#file
歡迎加入 Frida 交流群: 1049977261
File
-
new File(filePath, mode)
:
在filePath
處使用mode
模式打開或創(chuàng)建文件.
mode
指明了這個(gè)文件應(yīng)該如何被打開. 例如,"wb"
意為以寫入二進(jìn)制內(nèi)容的方式打開文件 (它的格式和 C 語言標(biāo)準(zhǔn)庫中的fopen()
相同).
write(data)
:
將data
同步地寫入文件,data
可以是字符串, 也可以是通過NativePointer#readByteArray
返回的緩沖區(qū).flush()
:
直接將緩沖區(qū)中的數(shù)據(jù)寫入底層的文件.close()
:
關(guān)閉文件. 您應(yīng)當(dāng)在操作完文件后調(diào)用這個(gè)方法, 除非您可以接受這個(gè)對象被當(dāng)做垃圾回收掉或者腳本被卸載時(shí)自動(dòng)觸發(fā).
SqliteDatabase
SqliteDatabase.open(path[, options])
:
打開path
處的 SQLite v3 數(shù)據(jù)庫,path
是數(shù)據(jù)庫在文件系統(tǒng)上的路徑字符串.
默認(rèn)情況下, 數(shù)據(jù)庫將以讀寫模式被打開, 但您也可以通過提供一個(gè)包含flags
屬性的options
對象來自定義這一行為,flags
是一個(gè)由一個(gè)或多個(gè)以下值構(gòu)成的數(shù)組:readonly
,readwrite
,create
.
返回的SqliteDatabase
對象將允許您對數(shù)據(jù)庫進(jìn)行操作.SqliteDatabase.openInline(encodedContents)
:
類似于open()
但數(shù)據(jù)庫的內(nèi)容將以 Base64 編碼過的字符串形式被提供.
我們推薦您在對數(shù)據(jù)庫進(jìn)行 Base64 編碼之前進(jìn)行一次 gzip 壓縮, 但這是可選的并且這個(gè)函數(shù)會檢查文件是否有 gzip 文件頭. 數(shù)據(jù)庫是在內(nèi)存中以讀寫模式被打開的, 并不會接觸到文件系統(tǒng)中的原數(shù)據(jù)庫. 這對于需要自帶一份預(yù)計(jì)算數(shù)據(jù)的代理來說十分有用, 比如用來引導(dǎo)動(dòng)態(tài)分析的靜態(tài)分析數(shù)據(jù).
close()
:
關(guān)閉數(shù)據(jù)庫. 您應(yīng)當(dāng)在操作完文件后調(diào)用這個(gè)方法, 除非您可以接受這個(gè)對象被當(dāng)做垃圾回收掉或者腳本被卸載時(shí)自動(dòng)觸發(fā).exec(sql)
:
執(zhí)行一條原生 SQL 語句,sql
是基于文本的語句字符串.
由于執(zhí)行結(jié)果是被忽略的, 因此您應(yīng)當(dāng)使用配置數(shù)據(jù)庫相關(guān)的語句, 例如, 創(chuàng)建一張表.-
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()
:
將數(shù)據(jù)庫轉(zhuǎn)儲為 gzip 壓縮過的 Base64 編碼的二進(jìn)制大型對象 (blob), 并以字符串返回.
對于通過SqliteDatabase.openInline()
來內(nèi)聯(lián)一份緩存到您的代理代碼中時(shí)很有用.
SqliteStatement
-
bindInteger(index, value)
: 將整型value
綁定到index
-
bindFloat(index, value)
: 將浮點(diǎn)數(shù)value
綁定到index
-
bindText(index, value)
: 將文本value
綁定到index
-
bindBlob(index, bytes)
: 將ArrayBuffer
, 字節(jié)數(shù)組或字符串bytes
綁定到index
-
bindNull(index)
: 將空值綁定到index
-
step()
:
要么開始一次新的查詢并獲取第一個(gè)結(jié)果, 要么移動(dòng)到下一行.
返回一個(gè)包含查詢語句中指定順序的值的數(shù)組, 如果沒有結(jié)果的話則返回null
.
如果此時(shí)您意圖再次使用這個(gè)對象的話, 您應(yīng)該調(diào)用reset()
. -
reset()
: 重置內(nèi)部狀態(tài)以執(zhí)行接下來的語句.