Cycript - p的实现原理

想问一下cycript -p 是如何实现“钩住”运行中的进程的呢?
找到进程中的符号的内存地址,进行消息处理?初学逆向,请指教。

cycript本身走的是调用cynject实现类似MobileSubstrate的那套东西。
cynject走的是mach_vm下的一套。

具体读源码吧

编辑1:补充:cynject本身是个调用MobileSubstrate的MSHookProcess API的命令行程序。参数应该是pid dylib路径。
cycript的终端程序调用这个来注入libcycript.dylib。 注入完毕之后libcycript负责:

  • 开新线程初始化解释器
  • 利用Libffi实现native代码和解释代码的桥接
  • 其他诸如此类的杂活

saurik这一套东西的核心基本都是MobileSubstrate, MS现在闭源了,但你在GitHub上找找应该有以前代码的镜像
,希望以上能回答你的问题

1 个赞

@Zhang 张总 666

refer: https://git.saurik.com/cycript.git

cycript 走的是 JavaScriptCore+libffi

1 个赞

按步骤拆分一下。我们所谓的hook其实可以拆分成两个步骤。代码注入和实际的Hook(内联汇编hook,利用ObjC API Hook等等)

代码注入

这部分是上面说的cynject/MSHookProcess素质两连来完成libcycript代码的注入
然后libcycript的初始化代码负责上面说的初始化解释器等等

实际的Hook

这部分无论cy还是tweak实质用的都是MS,不过cycript加了一套转义层来实现上面说的native代码和解释代码的桥接而已

1 个赞

有点666

谢谢大咖回复。我试着理解一下cycript的源码。
我之前理解的tweak是在类创建时,使用runtime机制,在类似load的方法中加入自己的方法实现的。看来不是这么简单的哈,我再深入学习一下。

谢谢回复。

不用+load啊。C层面就有constructor机制