- Its readline-based user interface;
- A couple of “user-space” modules written in cylang.
Just the injection and instrumentation capabilities alone require Cycript to maintain complex code for every OS and every architecture. Considering the tool also needs to provide a decent user experience and focus on the compiler, it’s understandable that Cycript supports only a subset of the OSes and architectures supported by Frida. Frida has focused on these two areas exclusively for years. After all, Frida is a toolkit for building portable dynamic instrumentation tools (a great example of which is Cycript).
On the flip-side, if Frida were to invent its own language and compiler for its interactive console, frida-repl, it would be a massive duplication of efforts. Also, Cycript’s user experience is so good that perhaps it should replace Frida’s interactive console.
So, after some late nights and countless cups of coffee, I am really excited to show you the result:
This is our fork where we took Cycript and replaced its runtime with a brand new runtime powered by Frida, allowing Cycript to run on all the platforms and architectures supported by Frida. We didn’t touch any other aspects of Cycript or did so with minimal changes.
We went out of our way to avoid touching the compiler, and also left the user interface mostly untouched, only adding extra CLI switches for things like device selection. We did, however, mostly rewrite the Cydia Substrate module so existing scripts relying on this will get the portability and performance boost offered by Frida’s instrumentation core.
Our hope is that @saurik might eventually merge our changes upstream, so we can all work together on building a portable and open platform for dynamic instrumentation. If this doesn’t actually happen, we will be maintaining our fork and intend to stay in sync with user interface and language improvements made upstream.
So without further ado, here’s our Cycript fork powered by Frida:
Please do check out the README for more details, and go to the releases page to grab binaries.