frida-java-bridge 6.1.3 → 6.2.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/index.js +13 -0
- package/lib/android.js +26 -2
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -21,6 +21,19 @@ const jsizeSize = 4;
|
|
|
21
21
|
const pointerSize = Process.pointerSize;
|
|
22
22
|
|
|
23
23
|
class Runtime {
|
|
24
|
+
ACC_PUBLIC = 0x0001;
|
|
25
|
+
ACC_PRIVATE = 0x0002;
|
|
26
|
+
ACC_PROTECTED = 0x0004;
|
|
27
|
+
ACC_STATIC = 0x0008;
|
|
28
|
+
ACC_FINAL = 0x0010;
|
|
29
|
+
ACC_SYNCHRONIZED = 0x0020;
|
|
30
|
+
ACC_BRIDGE = 0x0040;
|
|
31
|
+
ACC_VARARGS = 0x0080;
|
|
32
|
+
ACC_NATIVE = 0x0100;
|
|
33
|
+
ACC_ABSTRACT = 0x0400;
|
|
34
|
+
ACC_STRICT = 0x0800;
|
|
35
|
+
ACC_SYNTHETIC = 0x1000;
|
|
36
|
+
|
|
24
37
|
constructor () {
|
|
25
38
|
this.classFactory = null;
|
|
26
39
|
this.ClassFactory = ClassFactory;
|
package/lib/android.js
CHANGED
|
@@ -30,6 +30,7 @@ const kAccSkipAccessChecks = 0x00080000;
|
|
|
30
30
|
const kAccSingleImplementation = 0x08000000;
|
|
31
31
|
const kAccNterpEntryPointFastPathFlag = 0x00100000;
|
|
32
32
|
const kAccNterpInvokeFastPathFlag = 0x00200000;
|
|
33
|
+
const kAccCompileDontBother = 0x01000000;
|
|
33
34
|
const kAccPublicApi = 0x10000000;
|
|
34
35
|
const kAccXposedHookedMethod = 0x10000000;
|
|
35
36
|
|
|
@@ -242,6 +243,9 @@ function _getApi () {
|
|
|
242
243
|
_ZN3art6mirror5Class13GetDescriptorEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE: function (address) {
|
|
243
244
|
this['art::mirror::Class::GetDescriptor'] = address;
|
|
244
245
|
},
|
|
246
|
+
_ZN3art6mirror5Class11GetLocationEv: function (address) {
|
|
247
|
+
this['art::mirror::Class::GetLocation'] = makeCxxMethodWrapperReturningStdStringByValue(address, ['pointer']);
|
|
248
|
+
},
|
|
245
249
|
|
|
246
250
|
_ZN3art9ArtMethod12PrettyMethodEb: function (address) {
|
|
247
251
|
this['art::ArtMethod::PrettyMethod'] = makeCxxMethodWrapperReturningStdStringByValue(address, ['pointer', 'bool']);
|
|
@@ -332,6 +336,7 @@ function _getApi () {
|
|
|
332
336
|
'_ZNK3art12StackVisitor24GetCurrentQuickFrameInfoEv',
|
|
333
337
|
'_ZN3art6Thread18GetLongJumpContextEv',
|
|
334
338
|
'_ZN3art6mirror5Class13GetDescriptorEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE',
|
|
339
|
+
'_ZN3art6mirror5Class11GetLocationEv',
|
|
335
340
|
'_ZN3art9ArtMethod12PrettyMethodEb',
|
|
336
341
|
'_ZN3art12PrettyMethodEPNS_9ArtMethodEb',
|
|
337
342
|
'_ZN3art3Dbg13ConfigureJdwpERKNS_4JDWP11JdwpOptionsE',
|
|
@@ -2270,6 +2275,7 @@ typedef struct _ArtStackFrame ArtStackFrame;
|
|
|
2270
2275
|
typedef struct _ArtStackVisitor ArtStackVisitor;
|
|
2271
2276
|
typedef struct _ArtStackVisitorVTable ArtStackVisitorVTable;
|
|
2272
2277
|
|
|
2278
|
+
typedef struct _ArtClass ArtClass;
|
|
2273
2279
|
typedef struct _ArtMethod ArtMethod;
|
|
2274
2280
|
typedef struct _ArtThread ArtThread;
|
|
2275
2281
|
typedef struct _ArtContext ArtContext;
|
|
@@ -2340,6 +2346,12 @@ struct _ArtStackVisitor
|
|
|
2340
2346
|
ArtBacktrace * backtrace;
|
|
2341
2347
|
};
|
|
2342
2348
|
|
|
2349
|
+
struct _ArtMethod
|
|
2350
|
+
{
|
|
2351
|
+
guint32 declaring_class;
|
|
2352
|
+
guint32 access_flags;
|
|
2353
|
+
};
|
|
2354
|
+
|
|
2343
2355
|
extern GumTlsKey current_backtrace;
|
|
2344
2356
|
|
|
2345
2357
|
extern void (* perform_art_thread_state_transition) (JNIEnv * env);
|
|
@@ -2353,6 +2365,7 @@ extern ArtMethod * art_stack_visitor_get_method (ArtStackVisitor * visitor);
|
|
|
2353
2365
|
extern void art_stack_visitor_describe_location (StdString * description, ArtStackVisitor * visitor);
|
|
2354
2366
|
extern ArtMethod * translate_method (ArtMethod * method);
|
|
2355
2367
|
extern void translate_location (ArtMethod * method, guint32 pc, const gchar ** source_file, gint32 * line_number);
|
|
2368
|
+
extern void get_class_location (StdString * result, ArtClass * klass);
|
|
2356
2369
|
extern void cxx_delete (void * mem);
|
|
2357
2370
|
extern unsigned long strtoul (const char * str, char ** endptr, int base);
|
|
2358
2371
|
|
|
@@ -2495,6 +2508,7 @@ _get_frames (ArtBacktrace * backtrace)
|
|
|
2495
2508
|
GString * signature;
|
|
2496
2509
|
gchar * cursor;
|
|
2497
2510
|
ArtMethod * translated_method;
|
|
2511
|
+
StdString location;
|
|
2498
2512
|
gsize dexpc;
|
|
2499
2513
|
const gchar * source_file;
|
|
2500
2514
|
gint32 line_number;
|
|
@@ -2559,6 +2573,8 @@ _get_frames (ArtBacktrace * backtrace)
|
|
|
2559
2573
|
translated_method = translate_method (frame->method);
|
|
2560
2574
|
dexpc = (translated_method == frame->method) ? frame->dexpc : 0;
|
|
2561
2575
|
|
|
2576
|
+
get_class_location (&location, GSIZE_TO_POINTER (translated_method->declaring_class));
|
|
2577
|
+
|
|
2562
2578
|
translate_location (translated_method, dexpc, &source_file, &line_number);
|
|
2563
2579
|
|
|
2564
2580
|
json_builder_begin_object (b);
|
|
@@ -2566,12 +2582,18 @@ _get_frames (ArtBacktrace * backtrace)
|
|
|
2566
2582
|
json_builder_set_member_name (b, "signature");
|
|
2567
2583
|
json_builder_add_string_value (b, signature->str);
|
|
2568
2584
|
|
|
2585
|
+
json_builder_set_member_name (b, "origin");
|
|
2586
|
+
json_builder_add_string_value (b, std_string_get_data (&location));
|
|
2587
|
+
|
|
2569
2588
|
json_builder_set_member_name (b, "className");
|
|
2570
2589
|
json_builder_add_string_value (b, class_name);
|
|
2571
2590
|
|
|
2572
2591
|
json_builder_set_member_name (b, "methodName");
|
|
2573
2592
|
json_builder_add_string_value (b, method_name);
|
|
2574
2593
|
|
|
2594
|
+
json_builder_set_member_name (b, "methodFlags");
|
|
2595
|
+
json_builder_add_int_value (b, translated_method->access_flags);
|
|
2596
|
+
|
|
2575
2597
|
json_builder_set_member_name (b, "fileName");
|
|
2576
2598
|
json_builder_add_string_value (b, source_file);
|
|
2577
2599
|
|
|
@@ -2580,6 +2602,7 @@ _get_frames (ArtBacktrace * backtrace)
|
|
|
2580
2602
|
|
|
2581
2603
|
json_builder_end_object (b);
|
|
2582
2604
|
|
|
2605
|
+
std_string_destroy (&location);
|
|
2583
2606
|
g_string_free (signature, TRUE);
|
|
2584
2607
|
}
|
|
2585
2608
|
|
|
@@ -2691,6 +2714,7 @@ std_string_get_data (StdString * str)
|
|
|
2691
2714
|
art_stack_visitor_describe_location: api['art::StackVisitor::DescribeLocation'],
|
|
2692
2715
|
translate_method: artController.replacedMethods.translate,
|
|
2693
2716
|
translate_location: api['art::Monitor::TranslateLocation'],
|
|
2717
|
+
get_class_location: api['art::mirror::Class::GetLocation'],
|
|
2694
2718
|
cxx_delete: api.$delete,
|
|
2695
2719
|
strtoul: Module.getExportByName('libc.so', 'strtoul')
|
|
2696
2720
|
});
|
|
@@ -3307,7 +3331,7 @@ class ArtMethodMangler {
|
|
|
3307
3331
|
|
|
3308
3332
|
patchArtMethod(replacementMethodId, {
|
|
3309
3333
|
jniCode: impl,
|
|
3310
|
-
accessFlags: ((originalFlags & ~(kAccCriticalNative | kAccFastNative | kAccNterpEntryPointFastPathFlag)) | kAccNative) >>> 0,
|
|
3334
|
+
accessFlags: ((originalFlags & ~(kAccCriticalNative | kAccFastNative | kAccNterpEntryPointFastPathFlag)) | kAccNative | kAccCompileDontBother) >>> 0,
|
|
3311
3335
|
quickCode: api.artClassLinker.quickGenericJniTrampoline,
|
|
3312
3336
|
interpreterCode: api.artInterpreterToCompiledCodeBridge
|
|
3313
3337
|
}, vm);
|
|
@@ -3320,7 +3344,7 @@ class ArtMethodMangler {
|
|
|
3320
3344
|
}
|
|
3321
3345
|
|
|
3322
3346
|
patchArtMethod(hookedMethodId, {
|
|
3323
|
-
accessFlags: (originalFlags & ~(hookedMethodRemovedFlags)) >>> 0
|
|
3347
|
+
accessFlags: ((originalFlags & ~(hookedMethodRemovedFlags)) | kAccCompileDontBother) >>> 0
|
|
3324
3348
|
}, vm);
|
|
3325
3349
|
|
|
3326
3350
|
const quickCode = this.originalMethod.quickCode;
|