iOS 逆向工程(工具介绍)- 学习整理

497 查看

继续上一篇文章的内容,工具介绍篇:


一、class-dump

简介:顾名思义,就是用来导出目标对象的class信息的工具,私有方法声明也能导出来。

原理:利用 Objective-C语言的 runtime 特性,将存 在Mach-O 文件中的头文件信息提 出来,并生成对应的 .h 文件。

使用方法:
1,下载然后将class-dump 复制到“ /usr/bin”目录下。
2,执行sudo chmod 777 /usr/bin/class-dump”命令赋予其执行权限。
3,class-dump执行:

4,上面一段代码就是导出Mac下计算器app的头文件,到桌面test文件夹,并且排序,class-dump的一些参数,大家可以自己在命令行输入class-dump然后回车就有相关说明。

使用注意
从 AppStore 下 的 App 都是经过加密的,可执行文件被加上了一层”壳”。
class-dump 应付不了这样的文件,此时使用 class-dump 看上去会“失效”。还得先用别的工具把壳砸开才行,这个后面会说到。

class-dump下载地址:http://stevenygard.com/projects/class-dump


二、Theos越狱开发工具包

简介
Theos:是一个越狱开发工具包,由iOS越狱界知名人士Dustin Howett(@DHowett)开发并分享到 GitHub 上。

iOSOpenDev:是整合在 Xcode里的越狱开发工具, 熟悉Xcode 的朋友可能会对它更感兴趣。但逆向工程接触底层知识较多,很多东西无法自动化,因此推荐使用整合度并不算高的 Theos,当你手动完成一个又一个练习时,对逆向工程的理解一定会更深。

(1) Theos的安装:
1,设置xcode
假设安装了3 个 Xcode,并将它们分别命名为 Xcode1.app、Xcode2.app 和 Xcode3.app, 要指定 Xcode3 为活动 Xcode,则运行如下命令 :

2, Theos下载
从 GitHub 上下 Theos, 操作如下:(在终端中执行)

export THEOS=/opt/theos
这句话是设置环境变量,上面两句话指的就是git克隆theos到系统的/opt/theos目录下.

小问题:git 克隆下来的theos由于缺少文件,在后面make packget install 会提示缺少 _Prefix/NullabilityCompat.h 等文件,需要我们去https://github.com/theos/headers 把这个头文件放到/opt/theos/include目录中就行了。(可直接克隆到目录中去)

不过我这边已经有一个封好的theos,下面会提到。

3,配置ldid
ldid 是专门用来 名 iOS 可执行文件的工具,用以在越狱 iOS 中 代 Xcode 自带的codesign。从 http://joedj.net/ldid 下 ldid,把它放在“ /opt/theos/bin/ ”下,然后用以下命令赋予它可执行权限:

4,配置CydiaSubstrate
因为Theos 的一个 bug,它无法自动生成一个有效的 libsubstrate.dylib 文件,需要手动操作。
在 Cydia 中搜索安装“CydiaSubstrate”,然后用 iFunBox 或 scp 等方式将 iOS 上的“/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate” 到 OSX 中,将其重命名为 libsubstrate.dylib 后放到
“ /opt/theos/vendor/lib/libsubstrate.dylib”中, 替换掉无效的文件即可。

5,dpkg-deb
deb 是越狱开发安装包的标准格式,dpkg-deb 是一个用于操作 deb 文件的工具,有了这个工具,Theos 才能正确地把工程打包成为 deb 文件。
https://raw.githubusercontent.com/DHowett/dm.pl/master/dm.pl 下 dm.pl,将其重命名为 dpkg-deb 后,放到“/opt/theos/bin/”目录下,然后用以下命令赋予其可执行权限:

Theos操作这些移动文件设置权限这些步骤很啰嗦。
鉴于这些,我自己这边已经封装了一个集成好的Theos,附带一个自动下载的小脚本TheosScript.sh,不需要手动添加ldid、libsubstrate、dpkg-deb等。
脚本下载地址:https://github.com/DaSens/Theos-Script

进行简单演示:

790890-0dff3b591093d974

 进行简单演示

(2) Theos的用法介绍:
1,更改工作目录
更改工作目录至常用的 iOS 工程目录(如 “ /Users/zhangdasen/Code/”)
注:为何要做这一步呢,因为使用Theos创建的工程,是你在哪个目录执行的nic.pl启动的,就会在创建完成后在这个目录生成创建的Theos项目。

2,创建工程
终端输入“/opt/theos/bin/nic.pl”,启动 NIC(New Instance Creator),下面进行简单演示:

790890-5bfa958a989dab1a

3,简单说明
上面创建工程输入了一大堆东西,下面用一张图来说明:

790890-ccdc8d40b3934b4f

4,工程文件说明
创建好工程就会生成四个文件:
Makefile、Tweak.xm、control、iOSREProject.plist 下面进行简单说明。

(1) Makefile
Makefile 文件指定工程用到的文件、框架、库等信息,将整个过程自动化,下图为里面内容说明。
下图是我自己修改过后的Makefile文件。

790890-128e345d8bf6d818

补充:
1,导入 private framework

2,链接 Mach-O 对象(Mach-O object)

(2) Tweak.xm
用 Theos 创建 tweak 工程, 认生成的源文件是 Tweak.xm。
如果后缀名是单独一个“ x”,说明源文件支持 Logos 和 C 语法;
如果后缀名是“ xm ”,说明源文件支持 Logos 和 C/C++ 语法,与“ m ”和“ mm ”的区别类似。
Tweak.xm 语法众多,在这里简单介绍一些,详细语法大家可以去看书籍。

● %hook
指定需要 hook 的 class, 必须以 %end 结尾