6、 iOS 正向:基础不好的话可以去看黑马视频,配合项目练手,基础好的就直接看看书吧
iOS 逆向工具介绍class-dump
这个工具从名字中我们大概也能猜出来这是一个去 dump 目标对象的 class 信息的工具。它利用的是 OC 的runtime特性,将存储于 Mach-O 文件中的头文件信息(@interface 和 @protocol 信息)提取出来,并生成的对应的 .h 文件。这个工具的用法比较简单,首先去官网:
下载一个镜像,然后将 dmg 中的 class-dump 复制到 /usr/bin 目录下,然后给它赋予 777 的权限,运行之后就可以看到它的相关参数:
class-dump 的对象是 Mach-O 格式的二进制文件,如 Framwwork 的库文件和 App 的可执行文件。下面用 Mac 上的一个 ShadowsocksX 为例子:
这个时候我们已经通过 Xcode 的命令行工具 plutil 找到了这个 App 的可执行文件,但是并没有在本目录下找到,而是在其中一个子目录下面,接下来我们就可以使用 class-dump 去提取 App 的头文件了:
class-dump -s -S -H ShadowsocksX -o ~/path/to/headers/ShadowsocksX
接下来我们就会在目录下面找到我们所有的头文件了,经过对比之后,和源文件中的头文件是非常的相似的,除了一些参数类型被改成了 id,类型名用 arg1,arg2 来表示之外,其他的基本都是一样的。通过这些头文件,那么闭源的 App 就会露出他们的马脚了
Theos
这是一个越狱开发工具包。它与其他的越狱开发工具相比,最大的特点就是简单:不管是下载安装还是 Logos 的语法还是编译发布都比较省事,既然比较起来就要提到另一个也就是整合在 Xcode中 的 iOSOpenDev,作为一个经常使用 Xcode 的 iOS 工程师,本来我是打算使用这种工具的,但是逆向工程接触底层的知识比较多,很多东西无法自动化,工具太智能反而会坏了自己的根基,所以选择了整合度不算太高的 Theos。
等到配置完成之后就可以开始创建工程了,启动NIC:
/opt/theos/nic.pl
然后根据选项我们创建一个 Tweak 工程,然后按照要求输入一系列的参数,也就算是我们的一个基础的 Tweak 工程创建完毕了,接下来还是结合实例来讲一下比较形象一点,我是在手机上修改了锁屏界面,也就是会进行弹窗,那么我们看看整个流程应该如何的去操作:
首先修改我们的 MakeFile,这个文件中指定工程用到的所有文件、框架、库等,将整个过程自动化
接下来要修改的就是我们的 Tweak 文件:
这个 Tweak 也只是一个 demo,显然也非常的简单,意思也就是说勾住 SpringBoard 类中的applicationDidFinishLaunching:函数,然后执行其中我们重写的 OC 语句,也就是弹出一个框,这两部做完之后剩下的就是打包然后编译安装了,在这个地方我们最快捷的一条龙服务就只需要一个命令:
make package install
CydiaSubstrate
曾几何时,在我们编写 Tweak 的时候,有没有考虑到它正常运行的基础是什么呢?正如我们在写编译型语言的时候,会知道编译器作为我们程序正常运行的基础,在写诸如 python 的解释型语言的时候,会知道有解释器作为我们的基础,那么 Tweak 之所以可以改变我们正常进程运行的基础就是 CydiaSubstrate。它由三个部分来构成:
1、MobileHooker
2、MobileLoader
3、Safe Mode
下面我们就来一个个的阐述他们为 Tweak 的正常执行和维护起了什么样的作用:
1、MobileHooker
用图来说明 Hook 的功能
2、MobileLoader
该组件的作用就是让应用程序加载第三方的 dylib,theos 工程编译后生成的 dylib 就是由这个 MobileLoader 来加载。
MobileLoader 的原理主要是在系统启动时由 launchd 进程将 MobileLoader 加载进内存,随后 MobileLoader 会利用 DYLD_INSERT_LIBRARIES 环境变量将自己加载进设备的各个进程中,并会遍历/Library/MobileSubstrate/DynamicLibraries/目录下的文件,根据和每个 dylib 同名的 plist 文件来确定该 dylib 的作用范围,若当前进程满足该作用范围,则会使用 dlopen 函数动态加载对应的 dylib。
比如我们来查看一下 WatchDog 的 plist 文件:
这其中的 string 指定的是SpringBoard的 bundle identifier,也就是说进程 SpringBoard 会加载这个 dylib,值得注意的是,MobileLoader 加载完每个 dylib 后会首先调用 dylib 中用 __attribute__((constructor))声明的入口函数。
3、Safe Mode
顾名思义安全模式是为了保护我们的手机,我们的程序总会有崩溃的时候,因为 Tweak 的本质就是 dylib,崩溃的时候就会导致整个进程都崩溃掉,昨天我在写代码的时候不小心多了一个release,导致访问未知内存ctf加载程序可以禁用吗,整个 Tweak 都 crash 掉了ctf加载程序可以禁用吗,更要命的是,这个 dylib 是寄生在 SpringBoard 上的,所以整个 iphone 的界面也崩掉了。
这个时候系统就会提示进入安全模式,让我们重启 SpringBoard,在安全模式下,所有基于 CydiaSubstrate 的第三方 dylib 都会被禁用,等到修复完成之后,就可以继续使用了。它会捕获SUGTRAP、SIGILL等六种信号作为判断是否进入安全模式的条件。有时候安全模式也不顶用的时候,就需要我们硬重启,然后按住音量+禁用 CydiaSubstrate,等到修复之后再重启一次就可以重新启用。
IDA Pro
这个就不用过度说明了,全平台逆向神器
博客和 github 地址
Blog :
Github:
———END———
限 时 特 惠:本站每日持续更新海量各大内部创业教程,一年会员只需128元,全站资源免费下载点击查看详情
站 长 微 信:jiumai99