frida / frida

Clone this repo to build Frida
https://frida.re
Other
16.05k stars 1.66k forks source link

TypeError: "not configurable" #210

Closed ghost closed 7 years ago

ghost commented 7 years ago
{u'columnNumber': 1, u'description': u'TypeError: not configurable', u'fileName': u'frida/node_modules/frida-java/lib/class-factory.js', u'lineNumber': 290, u'type': u'error', u'stack': u'TypeError: not configurable\n    at ensureClass (frida/node_modules/frida-java/lib/class-factory.js:290)\n    at ensureClass (frida/node_modules/frida-java/lib/class-factory.js:268)\n    at frida/node_modules/frida-java/lib/class-factory.js:115\n    at frida/node_modules/frida-java/index.js:193\n    at frida/node_modules/frida-java/lib/vm.js:35\n    at java.js:1231\n    at script1.js:28'}
Java.perform(function () {
    var Log = Java.use("android.util.Log");
    Log.i.overload("java.lang.String", "java.lang.String").implementation = function (tag, msg) {
      console.log(msg.toString());
      this.i(tag, msg);
    };
});
ghost commented 7 years ago

I've updated everything to the newest release. It looks like Java.use() is taking a shit.

Java.perform(function () {
    var Activity = Java.use("android.app.Activity");
});
{u'columnNumber': 1, u'description': u'TypeError: not configurable', u'fileName': u'frida/node_modules/frida-java/lib/class-factory.js', u'lineNumber': 290, u'type': u'error', u'stack': u'TypeError: not configurable\n    at ensureClass (frida/node_modules/frida-java/lib/class-factory.js:290)\n    at ensureClass (frida/node_modules/frida-java/lib/class-factory.js:268)\n    at frida/node_modules/frida-java/lib/class-factory.js:115\n    at frida/node_modules/frida-java/index.js:193\n    at frida/node_modules/frida-java/lib/vm.js:35\n    at java.js:1231\n    at script1.js:24'}
oleavr commented 7 years ago

@rotlogix Thanks for reporting this, and sorry for the pain 😬 This was caused by our default JavaScript runtime changing from V8 to Duktape, and frida-java using ES6 syntax in runtime-generated JS code; plus one collision with a built-in property name which V8 is more relaxed about.

I plan on getting frida-java's test suite hooked up to our continuous integration so regressions like this one won't happen in the future.

As a side-note, your use-case might benefit from a JIT, as there's quite a bit of JS code running when frida-java is used, so to use the V8 runtime do:

session.enable_jit()

before the first script is created. (Similarly when running Frida's CLI tools pass --enable-jit.)

ghost commented 7 years ago

Thanks @oleavr I figured it had to do with the JS runtime changes.

oleavr commented 7 years ago

@rotlogix Frida 9.0.3 binaries are in the oven. frida-server for Android just finished and have been uploaded here: https://github.com/frida/frida/releases