frida 16.3.1 → 16.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/device.js +1 -4
- package/dist/system_parameters.d.ts +21 -0
- package/lib/device.ts +1 -4
- package/lib/system_parameters.ts +25 -0
- package/package.json +2 -2
- package/releng/deps.py +1 -1
- package/releng/deps.toml +11 -5
- package/src/device.cc +11 -3
- package/src/iostream.cc +2 -6
- package/src/runtime.cc +42 -6
- package/subprojects/frida-core.wrap +1 -1
- package/subprojects/nan.wrap +1 -1
package/dist/device.js
CHANGED
|
@@ -97,11 +97,8 @@ class Device {
|
|
|
97
97
|
return this.impl.spawn(program, argv, envp, env, cwd, stdio, aux, cancellable);
|
|
98
98
|
function consumeOption(name) {
|
|
99
99
|
const value = pendingOptions[name];
|
|
100
|
-
if (value === undefined) {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
100
|
delete pendingOptions[name];
|
|
104
|
-
return value;
|
|
101
|
+
return value !== null && value !== void 0 ? value : null;
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
async input(target, data, cancellable) {
|
|
@@ -15,6 +15,10 @@ export interface SystemParameters {
|
|
|
15
15
|
* Human-readable version string, e.g. `"11.2.2"`.
|
|
16
16
|
*/
|
|
17
17
|
version?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Build version, e.g. `"21B91"`.
|
|
20
|
+
*/
|
|
21
|
+
build?: string;
|
|
18
22
|
};
|
|
19
23
|
/**
|
|
20
24
|
* Platform, same as `Process.platform` in GumJS.
|
|
@@ -24,6 +28,23 @@ export interface SystemParameters {
|
|
|
24
28
|
* Architecture, same as `Process.arch` in GumJS.
|
|
25
29
|
*/
|
|
26
30
|
arch: "ia32" | "x64" | "arm" | "arm64" | "mips";
|
|
31
|
+
/**
|
|
32
|
+
* Hardware details.
|
|
33
|
+
*/
|
|
34
|
+
hardware?: {
|
|
35
|
+
/**
|
|
36
|
+
* Product type, e.g. `"iPad6,3"`.
|
|
37
|
+
*/
|
|
38
|
+
product?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Hardware platform, e.g. `"t8010"`.
|
|
41
|
+
*/
|
|
42
|
+
platform?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Hardware model, e.g. `"J71bAP"`.
|
|
45
|
+
*/
|
|
46
|
+
model?: string;
|
|
47
|
+
};
|
|
27
48
|
/**
|
|
28
49
|
* Level of access.
|
|
29
50
|
*/
|
package/lib/device.ts
CHANGED
|
@@ -141,11 +141,8 @@ export class Device {
|
|
|
141
141
|
|
|
142
142
|
function consumeOption(name) {
|
|
143
143
|
const value = pendingOptions[name];
|
|
144
|
-
if (value === undefined) {
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
144
|
delete pendingOptions[name];
|
|
148
|
-
return value;
|
|
145
|
+
return value ?? null;
|
|
149
146
|
}
|
|
150
147
|
}
|
|
151
148
|
|
package/lib/system_parameters.ts
CHANGED
|
@@ -17,6 +17,11 @@ export interface SystemParameters {
|
|
|
17
17
|
* Human-readable version string, e.g. `"11.2.2"`.
|
|
18
18
|
*/
|
|
19
19
|
version?: string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Build version, e.g. `"21B91"`.
|
|
23
|
+
*/
|
|
24
|
+
build?: string;
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
/**
|
|
@@ -29,6 +34,26 @@ export interface SystemParameters {
|
|
|
29
34
|
*/
|
|
30
35
|
arch: "ia32" | "x64" | "arm" | "arm64" | "mips";
|
|
31
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Hardware details.
|
|
39
|
+
*/
|
|
40
|
+
hardware?: {
|
|
41
|
+
/**
|
|
42
|
+
* Product type, e.g. `"iPad6,3"`.
|
|
43
|
+
*/
|
|
44
|
+
product?: string;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Hardware platform, e.g. `"t8010"`.
|
|
48
|
+
*/
|
|
49
|
+
platform?: string;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Hardware model, e.g. `"J71bAP"`.
|
|
53
|
+
*/
|
|
54
|
+
model?: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
32
57
|
/**
|
|
33
58
|
* Level of access.
|
|
34
59
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frida",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.4.0",
|
|
4
4
|
"authors": [
|
|
5
5
|
"Frida Developers"
|
|
6
6
|
],
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"homepage": "https://frida.re",
|
|
23
23
|
"engines": {
|
|
24
|
-
"node": ">=
|
|
24
|
+
"node": ">=16 || 14 >=14.17"
|
|
25
25
|
},
|
|
26
26
|
"main": "./dist",
|
|
27
27
|
"files": [
|
package/releng/deps.py
CHANGED
|
@@ -497,7 +497,7 @@ class Builder:
|
|
|
497
497
|
|
|
498
498
|
if sourcedir.exists():
|
|
499
499
|
self._print_status(pkg.name, "Reusing existing checkout")
|
|
500
|
-
current_rev = git("rev-parse", "FETCH_HEAD", check=True).stdout.strip()
|
|
500
|
+
current_rev = git("rev-parse", "FETCH_HEAD", cwd=sourcedir, check=True).stdout.strip()
|
|
501
501
|
if current_rev != pkg.version:
|
|
502
502
|
self._print_status(pkg.name, "WARNING: Checkout does not match version in deps.toml")
|
|
503
503
|
else:
|
package/releng/deps.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[dependencies]
|
|
2
|
-
version = "
|
|
3
|
-
bootstrap_version = "
|
|
2
|
+
version = "20240627"
|
|
3
|
+
bootstrap_version = "20240625"
|
|
4
4
|
|
|
5
5
|
[ninja]
|
|
6
6
|
scope = "toolchain"
|
|
@@ -20,7 +20,7 @@ dependencies = [
|
|
|
20
20
|
[vala]
|
|
21
21
|
scope = "toolchain"
|
|
22
22
|
name = "Vala"
|
|
23
|
-
version = "
|
|
23
|
+
version = "2c7a02d29332dedfdf803ce21b0540bc8461a035"
|
|
24
24
|
url = "https://github.com/frida/vala.git"
|
|
25
25
|
dependencies = [
|
|
26
26
|
"glib",
|
|
@@ -158,7 +158,7 @@ url = "https://github.com/frida/sqlite.git"
|
|
|
158
158
|
[libunwind]
|
|
159
159
|
when = "machine.os in {'linux', 'android', 'freebsd', 'qnx'}"
|
|
160
160
|
name = "libunwind"
|
|
161
|
-
version = "
|
|
161
|
+
version = "4d0abea0effd3c80916e70abe38c2a6156596f05"
|
|
162
162
|
url = "https://github.com/frida/libunwind.git"
|
|
163
163
|
options = [
|
|
164
164
|
"-Dgeneric_library=disabled",
|
|
@@ -207,6 +207,12 @@ dependencies = [
|
|
|
207
207
|
"openssl",
|
|
208
208
|
]
|
|
209
209
|
|
|
210
|
+
[libusb]
|
|
211
|
+
when = "machine.os in {'windows', 'macos', 'linux'}"
|
|
212
|
+
name = "libusb"
|
|
213
|
+
version = "be4d8ec1012f35ff6ce9474ed8d7c3ec4182ac55"
|
|
214
|
+
url = "https://github.com/frida/libusb.git"
|
|
215
|
+
|
|
210
216
|
[lwip]
|
|
211
217
|
name = "lwIP"
|
|
212
218
|
version = "9f64c40cac2e77eddf6b3913961fdd056d307716"
|
|
@@ -216,7 +222,7 @@ options = [
|
|
|
216
222
|
"-Dipv6=enabled",
|
|
217
223
|
"-Ddns=disabled",
|
|
218
224
|
"-Darp=disabled",
|
|
219
|
-
"-Dethernet=
|
|
225
|
+
"-Dethernet=enabled",
|
|
220
226
|
"-Dtcp_mss=1360",
|
|
221
227
|
"-Dtcp_snd_buf=65535",
|
|
222
228
|
"-Dtcp_wnd=65535",
|
package/src/device.cc
CHANGED
|
@@ -759,11 +759,19 @@ NAN_METHOD(Device::Spawn) {
|
|
|
759
759
|
for (uint32_t i = 0; i != n; i++) {
|
|
760
760
|
auto key = Nan::Get(keys, i).ToLocalChecked();
|
|
761
761
|
auto value = Nan::Get(object, key).ToLocalChecked();
|
|
762
|
+
if (value->IsUndefined()) {
|
|
763
|
+
continue;
|
|
764
|
+
}
|
|
762
765
|
|
|
763
|
-
Nan::Utf8String
|
|
766
|
+
Nan::Utf8String k(key);
|
|
764
767
|
|
|
765
|
-
|
|
766
|
-
|
|
768
|
+
auto v = Runtime::ValueToVariant(value);
|
|
769
|
+
if (v == NULL) {
|
|
770
|
+
valid = false;
|
|
771
|
+
break;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
g_hash_table_insert(aux, g_strdup(*k), g_variant_ref_sink(v));
|
|
767
775
|
}
|
|
768
776
|
} else {
|
|
769
777
|
Nan::ThrowTypeError("Bad argument, 'aux' must be an object");
|
package/src/iostream.cc
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
#define IOSTREAM_DATA_CONSTRUCTOR "iostream:ctor"
|
|
7
7
|
|
|
8
|
-
using v8::CopyablePersistentTraits;
|
|
9
8
|
using v8::DEFAULT;
|
|
10
9
|
using v8::External;
|
|
11
10
|
using v8::Function;
|
|
@@ -185,12 +184,9 @@ class WriteOperation : public Operation<GIOStream> {
|
|
|
185
184
|
public:
|
|
186
185
|
WriteOperation(Isolate* isolate, Local<Value> buffer)
|
|
187
186
|
: stream_(NULL),
|
|
188
|
-
buffer_(isolate, buffer),
|
|
189
187
|
data_(node::Buffer::Data(buffer)),
|
|
190
188
|
count_(node::Buffer::Length(buffer)) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
~WriteOperation() {
|
|
189
|
+
buffer_.Reset(buffer);
|
|
194
190
|
}
|
|
195
191
|
|
|
196
192
|
protected:
|
|
@@ -211,7 +207,7 @@ class WriteOperation : public Operation<GIOStream> {
|
|
|
211
207
|
|
|
212
208
|
private:
|
|
213
209
|
GOutputStream* stream_;
|
|
214
|
-
Persistent<Value, CopyablePersistentTraits<Value>> buffer_;
|
|
210
|
+
Nan::Persistent<Value, Nan::CopyablePersistentTraits<Value>> buffer_;
|
|
215
211
|
const void* data_;
|
|
216
212
|
gsize count_;
|
|
217
213
|
};
|
package/src/runtime.cc
CHANGED
|
@@ -16,6 +16,7 @@ using v8::Local;
|
|
|
16
16
|
using v8::Number;
|
|
17
17
|
using v8::Object;
|
|
18
18
|
using v8::String;
|
|
19
|
+
using v8::Symbol;
|
|
19
20
|
using v8::Value;
|
|
20
21
|
|
|
21
22
|
namespace frida {
|
|
@@ -274,14 +275,39 @@ GVariant* Runtime::ValueToVariant(Local<Value> value) {
|
|
|
274
275
|
}
|
|
275
276
|
|
|
276
277
|
if (value->IsArray()) {
|
|
278
|
+
auto array = Local<Array>::Cast(value);
|
|
279
|
+
uint32_t n = array->Length();
|
|
280
|
+
if (n == 2) {
|
|
281
|
+
auto first = Nan::Get(array, 0).ToLocalChecked();
|
|
282
|
+
if (first->IsSymbol()) {
|
|
283
|
+
auto sym = first.As<Symbol>();
|
|
284
|
+
auto desc = sym->Description(
|
|
285
|
+
#if V8_MAJOR_VERSION > 9 || (V8_MAJOR_VERSION == 9 && V8_MINOR_VERSION >= 5)
|
|
286
|
+
Isolate::GetCurrent()
|
|
287
|
+
#endif
|
|
288
|
+
);
|
|
289
|
+
Nan::Utf8String type(desc);
|
|
290
|
+
|
|
291
|
+
auto val = ValueToVariant(Nan::Get(array, 1).ToLocalChecked());
|
|
292
|
+
if (val == NULL) {
|
|
293
|
+
return NULL;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
GVariant* t[2] = { g_variant_new_string(*type), val };
|
|
297
|
+
return g_variant_new_tuple(t, G_N_ELEMENTS(t));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
277
301
|
GVariantBuilder builder;
|
|
278
302
|
g_variant_builder_init(&builder, G_VARIANT_TYPE ("av"));
|
|
279
303
|
|
|
280
|
-
auto array = Local<Array>::Cast(value);
|
|
281
|
-
uint32_t n = array->Length();
|
|
282
304
|
for (uint32_t i = 0; i != n; i++) {
|
|
283
|
-
auto
|
|
284
|
-
|
|
305
|
+
auto v = ValueToVariant(Nan::Get(array, i).ToLocalChecked());
|
|
306
|
+
if (v == NULL) {
|
|
307
|
+
g_variant_builder_clear(&builder);
|
|
308
|
+
return NULL;
|
|
309
|
+
}
|
|
310
|
+
g_variant_builder_add(&builder, "v", v);
|
|
285
311
|
}
|
|
286
312
|
|
|
287
313
|
return g_variant_builder_end(&builder);
|
|
@@ -302,9 +328,19 @@ GVariant* Runtime::ValueToVariant(Local<Value> value) {
|
|
|
302
328
|
for (uint32_t i = 0; i != n; i++) {
|
|
303
329
|
auto key = Nan::Get(names, i).ToLocalChecked();
|
|
304
330
|
auto val = Nan::Get(object, key).ToLocalChecked();
|
|
331
|
+
if (val->IsUndefined()) {
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
Nan::Utf8String k(key);
|
|
336
|
+
|
|
337
|
+
auto v = ValueToVariant(val);
|
|
338
|
+
if (v == NULL) {
|
|
339
|
+
g_variant_builder_clear(&builder);
|
|
340
|
+
return NULL;
|
|
341
|
+
}
|
|
305
342
|
|
|
306
|
-
|
|
307
|
-
g_variant_builder_add(&builder, "{sv}", *key_str, ValueToVariant(val));
|
|
343
|
+
g_variant_builder_add(&builder, "{sv}", *k, v);
|
|
308
344
|
}
|
|
309
345
|
|
|
310
346
|
return g_variant_builder_end(&builder);
|