逆向第五天-CydiaSubstrate

前言

这几天,小编一直忙着公司的项目,没有时间来更新博客,实在抱歉。今天主要介绍CydiaSubstrate,捎带着说一下iFunBox。

CydiaSubstrate

CydiaSubstrate是绝大部分tweak正常工作的基础,它由MobileHooker、MobileLoader和Safe mode组成。

1. MobileHooker

MobileHooker的作用就是替换系统函数,也就是所谓的hook,它主要包含以下两个函数:

void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);

void MSHookFunction(void* function, void* replacement, void** p_original);

其中MSHookMessageEx作用于Objective-C函数,通过调用method_setImplementtation函数将[class selector]的实现改成replacement,达到hook的目的。可能有些读者不懂,这里举个:当我们向一个NSString对象发送hasSuffix:消息(即调用[NSString hasSuffix:]),正常情况下它的实现是判断NSString对象有没有某个后缀;如果把这个实现替换成hasPrefix:的实现,那么NSString对象在收到hasSuffix:消息后,实际执行的操作是判断这个NSString对象有没有某个前缀(prefix)。
Logos语法主要是对此函数作了一层封装,让编写针对Objective-C函数的hook代码变得更简单直观一些,所以对于Objective-C函数的hook,推荐使用Logos语法,当然因人而异。
MSHookFunction函数作用于C和C++函数,通过编写汇编指令,在进程执行到function时转而执行replacement,同时保存function的指令及其返回地址,使得用户可以选择性的执行function,并保证进程能够在执行完replacement后继续正常运行。

逆向第五天-CydiaSubstrate_第1张图片
B2AA69A2-4C12-482F-925D-7D82C1BF1EFC.png

这个图是进程正常执行流程,进程先执行一些指令,在执行函数A,接着执行剩下的指令。如果钩住(hook)了函数A,想用函数B替换他,那么进程执行的流程就变成了下面的样子。

逆向第五天-CydiaSubstrate_第2张图片
6F1747C8-AFFB-4835-B864-CD1FB4B9CA4F.png

进程先执行一些指令,在原本应该执行函数A的地方跳转到函数B的位置执行函数B,同时函数A的代码被MobileHooker保存了下来。在函数B中,可以选择是否执行函数A,以及何时执行函数A,在函数B执行完成后,则会继续执行剩下的指令。

值得注意的是,MSHookFunction对function的指令长度是有要求的,即function里所有的指令加起来的长度不能太短。那么咱们要想钩住那些短函数,应该怎么办呢?有一种变通的方法是hook短函数内部调用的其他函数——短函数之所以短,是因为内部一般都调用了其他的函数,有其他的函数来做实际操作。因此,把长度满足要求的其他函数作为MSHookFunction的目标,然后在replacement里做一些逻辑判断,将他与短函数关联上,再把对短函数的修改写在这里。

2. MobileLoader

MobileLoader的作用是加载第三方dylib。在iOS启动时,会由launchd将MobileLoader载入内存,然后MobileLoader会根据dylib的同名plist文件指定的作用范围,有选择地在不同进程里通过dlopen函数打开目录/Library/MobileSubstrate/DynamicLibraries/下的所有dylib。

3. Safe mode

应用的质量良莠不齐,程序崩溃在所难免。因为tweak的本质是dylib,寄生在别的进程里,一旦出错,可能会导致整个进程崩溃,而一旦崩溃的是SpringBoard等系统进程,则会造成iOS瘫痪,所以CydiaSubstrate引入了Safe mode,它会捕获SIGTRAP、SIGABRT、SIGILL、SIGBUS、SIGSEGV、SIGSYS这6种信号,然后进入安全模式。

逆向第五天-CydiaSubstrate_第3张图片
1E80597D-2A47-49DB-95DE-EA5DFC1ED40A.png

在安全模式里,所有基于CydiaSubstrate的第三方dylib均会被禁用,便于查错与修复。但是,并不是用于了Safe mode就不用担心了,在很多时候,设备还是会因为第三方dylib的原因而无法进入系统,可能的情况:开机时卡在白苹果上,或者进度圈不停的转。在出现这种情况时,可以同时按住home和lock键重启,然后按住音量“+”键来完全禁用CydiaSubstrate,待系统重启完毕后,再来查错与修复。当问题被成功修复后,再重启一次iOS,就能重新启用CydiaSubstrate了。

iFunBox

这是一款iOS文件管理工具,可以非常方便地操作iOS中的文件


逆向第五天-CydiaSubstrate_第4张图片
B55BD95B-9397-4FE2-B456-CA7A4B0B5C3D.png

它的使用很简单,我们主要用到的是它的文件传输功能。值得注意的是,越狱的手机必须安装“Apple File Conduit 2”,这样iFunbox才能浏览iOS全系统文件。

参考资料:

书籍:iOS应用逆向工程(第2版)

你可能感兴趣的:(逆向第五天-CydiaSubstrate)