IOS逆向学习之命令行工具
1. main函数
- 命令行工具的本质:Mach-O类型的可执行文件,其实跟App内部的可执行文件差不多,区别的是App有界面,有附带的资源文件,但是命令行工具是没有
- 首先我们创建一个IOS平台的app项目,如下:

但是如果我们需要编写一个命令行工具, 我们不需要界面 , 我们可以修改main函数的实现,直接返回0,这样就不会创建AppDelegate类和相关界面

然后我们直接编译, 在Product文件加下生成一个app,我们showFinder,然后显示包内容,就可以看到一个app的可执行文件, 也就是我们需要的命令行工具:
找到对应的命令行工具,然后通过iFunBox工具安装到手机的/usr/bin目录下:
然后我们通过SSH来连接手机,在终端输入指令看看:
第一次执行该命令行工具的时候,可能没有权限,我们需要赋予执行权限
-
chmod +x: 赋予某个文件执行权限 -
注意:
- 为什么要用Xcode创建一个IOS项目?
- 因为使用Xcode帮我们创建项目, Xcode会自动帮我们配置该命令行工具的
架构信息、证书签名(由于本人使用个人账号签名,所以该命令行工具是有期限,只有7天时间),一些等等信息,这样命令行工具才能再我们的IOS系统跑起来
- 因为使用Xcode帮我们创建项目, Xcode会自动帮我们配置该命令行工具的
- 为什么要用Xcode创建一个IOS项目?
2. 功能分析
2.1 Mach-O的头文件分析
- 假设我们编写的命令行工具能读取别的app的应用
我们通过MachOView查看app的Mach-O文件,可以发现app文件的架构是在头部信息的前四个字节来表示的:
我们还可以查看xnu的源码:

- 注意:有两个值是大小端的问题,根据机器的不同读取方式可能不同
2.2 编写代码读取Mach-O文件类型信息
- 所以这里我们可以读取app的可执行文件前4个字节,来确定app的可执行文件的架构信息,那么我如何读取app的可执行文件信息, 假如我们现在知道某个app的可执行文件路径,那么我们如何读取?
- 通过
NSData来读取,[NSData dataWithContentsOfFile:neteasemusicPath];,但是这个方法不太好,因NSData需要把整个可执行文件载进内存,但是我们只需要读取前4个字节,如果整个文件比较大,那就比较费时了 NSFileHandle:专门处理文件,一点一点的读取文件,我们可以使用这个类来读取文件
- 通过
#import <UIKit/UIKit.h>

本文介绍了如何利用Xcode创建iOS命令行工具,通过修改main函数避开界面生成。深入探讨了Mach-O文件头信息的分析,包括通过NSFileHandle读取文件类型。此外,还讨论了命令行工具如何处理终端参数,以及如何通过ldid赋予可执行文件更高权限以访问其他APP。最后,展示了如何导出和签名权限文件以增强命令行工具的功能。
最低0.47元/天 解锁文章
3327





