原文链接: 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()
: 重置内部状态以执行接下来的语句.