想问一下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 个赞
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机制