diff --git a/examples/cpushark/Capture.py b/examples/cpushark/Capture.py index d0a19d6..c32b92e 100644 --- a/examples/cpushark/Capture.py +++ b/examples/cpushark/Capture.py @@ -58,7 +58,7 @@ class Capture(NSObject): try: session = self.device.attach(pid) session.on('detached', self._onSessionDetached) - script = session.session.create_script(SCRIPT_TEMPLATE % { + script = session.create_script(name="cpushark", source=SCRIPT_TEMPLATE % { 'trigger_port': triggerPort }) script.on('message', self._onScriptMessage) diff --git a/src/frida/core.py b/src/frida/core.py index 4d449c5..878faaa 100644 --- a/src/frida/core.py +++ b/src/frida/core.py @@ -108,18 +108,17 @@ class Session(FunctionContainer): def enumerate_modules(self): if self._modules is None: - script = self.create_script( - """ - var modules = []; - Process.enumerateModules({ - onMatch: function (module) { - modules.push(module); - }, - onComplete: function () { - send(modules); - } - }); - """) + script = self.create_script(name="session-enumerate-modules", source="""\ +var modules = []; +Process.enumerateModules({ + onMatch: function (module) { + modules.push(module); + }, + onComplete: function () { + send(modules); + } +}); +""") self._modules = [Module(data['name'], int(data['base'], 16), data['size'], data['path'], self) for data in _execute_script(script)] return self._modules @@ -127,8 +126,7 @@ class Session(FunctionContainer): @param protection example '--x' """ def enumerate_ranges(self, protection): - script = self.create_script( -""" + script = self.create_script(name="session-enumerate-ranges", source="""\ var ranges = []; Process.enumerateRanges(\"%s\", { onMatch: function (range) { @@ -195,8 +193,8 @@ recv(function (string) { def off(self, signal, callback): self._impl.off(signal, callback) - def _exec_script(self, script_source, post_hook=None): - script = self.create_script(script_source) + def _exec_script(self, source, post_hook=None): + script = self.create_script(name="exec", source=source) return _execute_script(script, post_hook) def _do_ensure_function(self, absolute_address): @@ -243,8 +241,7 @@ class Module(FunctionContainer): def enumerate_exports(self): if self._exports is None: - script = self._session.create_script( -""" + script = self._session.create_script(name="module-enumerate-exports", source="""\ var exports = []; Module.enumerateExports(\"%s\", { onMatch: function (exp) { @@ -268,8 +265,7 @@ Module.enumerateExports(\"%s\", { @param protection example '--x' """ def enumerate_ranges(self, protection): - script = self._session.create_script( -""" + script = self._session.create_script(name="module-enumerate-ranges", source="""\ var ranges = []; Module.enumerateRanges(\"%s\", \"%s\", { onMatch: function (range) { diff --git a/src/frida/discoverer.py b/src/frida/discoverer.py index 33337e1..a087753 100644 --- a/src/frida/discoverer.py +++ b/src/frida/discoverer.py @@ -21,8 +21,7 @@ class Discoverer(object): def start(self, session, ui): def on_message(message, data): self._reactor.schedule(lambda: self._process_message(message, data, session, ui)) - source = self._create_discover_script() - self._script = session.create_script(source) + self._script = session.create_script(name="discoverer", source=self._create_discover_script()) self._script.on('message', on_message) self._script.load() diff --git a/src/frida/repl.py b/src/frida/repl.py index 1a98008..d75c917 100644 --- a/src/frida/repl.py +++ b/src/frida/repl.py @@ -51,7 +51,7 @@ def main(): self._prompt_string = self._create_prompt() def on_message(message, data): self._reactor.schedule(lambda: self._process_message(message, data)) - self._script = self._session.create_script(self._create_repl_script()) + self._script = self._session.create_script(name="repl", source=self._create_repl_script()) self._script.on('message', on_message) self._script.load() if self._spawned_argv is not None: diff --git a/src/frida/tracer.py b/src/frida/tracer.py index 1cbfd74..0947a92 100644 --- a/src/frida/tracer.py +++ b/src/frida/tracer.py @@ -23,7 +23,7 @@ class TracerProfileBuilder(object): def exclude_modules(self, *module_name_globs): for m in module_name_globs: - self._spec.append(("exclude", 'module', m)) + self._spec.append(('exclude', 'module', m)) return self def include(self, *function_name_globs): @@ -33,7 +33,7 @@ class TracerProfileBuilder(object): def exclude(self, *function_name_globs): for f in function_name_globs: - self._spec.append(("exclude", 'function', f)) + self._spec.append(('exclude', 'function', f)) return self def include_objc_method(self, *function_name_globs): @@ -64,12 +64,12 @@ class TracerProfile(object): if scope == 'module': if operation == 'include': working_set = working_set.union(self._include_module(param, all_modules)) - elif operation == "exclude": + elif operation == 'exclude': working_set = self._exclude_module(param, working_set) elif scope == 'function': if operation == 'include': working_set = working_set.union(self._include_function(param, all_modules)) - elif operation == "exclude": + elif operation == 'exclude': working_set = self._exclude_function(param, working_set) elif scope == 'objc_method': if operation == 'include': @@ -118,10 +118,10 @@ class TracerProfile(object): mtype, cls, method = match.groups() - script = ''' -var mtype = '%(mtype)s'; -var cls = '%(cls)s'; -var method = '%(method)s'; + script = """ +var mtype = "%(mtype)s"; +var cls = "%(cls)s"; +var method = "%(method)s"; if (ObjC.available) { var funs = {}; @@ -132,7 +132,7 @@ if (ObjC.available) { object_getClass: 1 }; Object.keys(funArgs).forEach(function (name) { - var funPtr = Module.findExportByName('libobjc.A.dylib', name); + var funPtr = Module.findExportByName("libobjc.A.dylib", name); var args = funArgs[name]; var argsArr = []; for (var i = 0; i !== args; i++) { @@ -199,9 +199,9 @@ if (ObjC.available) { send({success: true, addresses: traceAddresses}); } else { - send({success: false, error: 'Objective C runtime is not available'}) + send({success: false, error: "Objective C runtime is not available"}) } - ''' % {"mtype": mtype, "cls": cls, "method": method} + """ % {"mtype": mtype, "cls": cls, "method": method} result = session._exec_script(script) @@ -248,9 +248,8 @@ class Tracer(object): ui.on_trace_progress('resolve') working_set = self._profile.resolve(session) - source = self._create_trace_script() ui.on_trace_progress('instrument') - self._script = session.create_script(source) + self._script = session.create_script(name="tracer", source=self._create_trace_script()) self._script.on('message', on_message) self._script.load() for chunk in [working_set[i:i+1000] for i in range(0, len(working_set), 1000)]: diff --git a/tests/test_core.py b/tests/test_core.py index 7b710ed..a7e7fe5 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -58,7 +58,7 @@ class TestCore(unittest.TestCase): result['address'] = int(message['payload'], 16) event.set() - script = self.session.create_script("""\ + script = self.session.create_script(name="test-memory-access", source="""\ hello = Memory.allocUtf8String("Hello"); send(hello); """)