Frida Javascript api #File #SqliteDatabase 與 #SqliteStatement (中文版)

原文鏈接: 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(): 重置內部狀態以執行接下來的語句.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容