1、Xcode
历届版本:https://developer.apple.com/documentation/xcode-release-notes
AppStore中搜并安装XCode & 在网页下载https://developer.apple.com/xcode

2、class-dump
class-dump,是可以把Objective-C运行时的声明的信息导出来的工具。其实就是可以导出.h文件。用class-dump可以把未经加密的app的头文件导出来
安装
官网下载:http://stevenygard.com/projects/class-dump/

github下载:https://github.com/nygard/class-dump

点击下载后解压后会有class-dump和源码文件。
将class-dump 复制到/usr/bin/class-dump。如果是OS X 10.11,因为没有/usr/bin文件夹的写权限,所以将class-dump复制到/usr/local/bin/class-dump即可。
打开Terminal,执行命令赋予其执行权限:
sudo chmod 777 /usr/bin/class-dump
使用方法参考大佬:https://juejin.cn/post/6911142378883514375
3、Tweak
Tweak的实质就是iOS平台的动态库。iOS平台上有两种形势的动态库,dylib与framework。Framework这种开发者用的比较多,而dylib这种就相对比较少一点。而tweak用的正是dylib这种形势的动态库。
4、Theos
Theos是一个越狱开发工具包,用来创建Tweak项目。其中包含了Logos Hook和CaptainHook两种hook框架
Github: https://github.com/theos/theos 官方建议把Theos安装在/opt/theos目录下
sudo git clone--recursive https://github.com/theos/theos.git /opt/theos
添加环境变量
vim ~/.bash_profile
export THEOS=/opt/theos
export PATH=/opt/theos/bin/:$PATH
source ~/.bash_profile
检查是否生效
echo $THEOS
echo $PATH
输入 nic.pl 查看是否安装正确

.zshrc文件中并没有定义任务环境变量。解决办法在~/.zshrc文件最后,增加一行
source ~/.bash_profile
# 然后立即生效
source ~/.zshrc

5、ldid
ldid用来专门签名iOS可执行文件的工具,用以在越狱iOS中取代Xcode自带的codesign。如果不安装,那么产生的deb文件就安装不到手机上
brew install ldid

执行brew install ldid报错Command failed with exit 128:git 原因是安装homebrew时缺少两个包
解决方式:
输入brew -v后会提示你执行两个配置命令,直接复制执行就ok了!
6、MonkeyDev
MonkeyDev是基于iOS OpenDev的升级,是一个为越狱和非越狱开发人员准备的工具。强大的iOS重打包框架, 其中集合了各种hook框架以及自动签名
Github: https://github.com/AloneMonkey/MonkeyDev
安装:
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"

安装时报错:
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
报这个错误的原因是xcode-select不在默认的路径
解决方案:
如果您还没有安装 Xcode(从https://appstore.com/mac/apple/xcode获取 )。
接受条款和条件。
确保 Xcode 应用程序在/Applications目录中(不是/Users/{user}/Applications)。
xcode-select使用以下命令指向 Xcode app Developer 目录:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
注意:确保您的 Xcode 应用程序路径正确。
代码:/Applications/Xcode.app/Contents/Developer
Xcode-测试版:/Applications/Xcode-beta.app/Contents/Developer
参考:https://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error
现在你就可以进行安装了,如果你是xcode12及以上,建议进行下面操作在进行安装不然会报下面这个错误:
File /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Package Types.xcspec not found
出现上面这个错误的话:
你只需要再次打开MonkeyDev/bin文件下的md-install文件,找到下面三行代码然后注释掉
#macosxSDKSpecificationsPath=$macosSdkPlatformPath/Developer/Library/Xcode/Specifications
#packageTypesForMacOSXPath="$macosxSDKSpecificationsPath/MacOSX Package Types.xcspec"
#productTypesForMacOSXPath="$macosxSDKSpecificationsPath/MacOSX Product Types.xcspec"
注释后加上下面三行代码,然后保存文件即可,开始安装.
macosxSDKSpecificationsPath=$macosSdkPlatformPath/Developer/Library/Xcode/PrivatePlugIns
packageTypesForMacOSXPath="$macosxSDKSpecificationsPath/IDEOSXSupportCore.ideplugin/Contents/Resources/MacOSX Package Types.xcspec"
productTypesForMacOSXPath="$macosxSDKSpecificationsPath/IDEOSXSupportCore.ideplugin/Contents/Resources/MacOSX Product Types.xcspec"
本地安装的方式,clone代码到本地:
git clone https://github.com/AloneMonkey/MonkeyDev.git
cd MonkeyDev/bin
在bin目录下,打开md-install文件,注释掉下载frida-ios-dump的代码
#下载frida-ios-dump#echo"Downloading frida-ios-dump from Github..."#downloadFile "https://raw.githubusercontent.com/AloneMonkey/frida-ios-dump/3.x/dump.py""$MonkeyDevPath/bin/dump.py"#downloadFile "https://raw.githubusercontent.com/AloneMonkey/frida-ios-dump/3.x/dump.js""$MonkeyDevPath/bin/dump.js"
新建一个目录,clone frida-ios-dump代码到本地
git clone https://github.com/AloneMonkey/frida-ios-dump.git
cd frida-ios-dump
手动将frida-ios-dump文件夹下的dump.py和dump.js拷贝到/opt/MonkeyDev/bin目录下
copy完成后,进入MonkeyDev/bin目录,执行MonkeyDev的安装:
sudo bash md-install
安装完成后,查看xcode,出现monkeydev则安装成功,可以创建monkeydev工程了

出现xcode问题参考:https://juejin.cn/post/7066779843345514510
出现monkeydev安装问题参考:https://github.com/AloneMonkey/MonkeyDev/issues/266
卸载:
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-uninstall)"
询问过相关大佬后,得知monkeydev在xcode中有模块出来后,可以忽略安装时候的报错信息,原因是因为xcode不断在更新,而monkeydev还是原来的老版本。相关错误可以忽略
7、libimobiledevice、usbmuxd、ideviceinstaller
libimobiledevice
libimobiledevice 又称 libiphone,是一个开源包,一个跨平台的软件库。可以让 Linux 支持连接 iPhone/iPod Touch 等 iOS 设备的协议。它不依赖于使用任何现有的专有库,不需要越狱。类似Android 的 adb 命令。
它允许其他软件轻松访问设备的文件系统,检索有关设备及其内部设备的信息,备份/恢复设备,管理跳板图标,管理已安装的应用程序,检索地址簿/日历/笔记和书签,以及(使用LIGBGOD)同步音乐和视频到设备。
一个与Apple iOS设备进行本地通信的库。
安装方法
使用brew在线安装
brew install libimobiledevice
brew install ideviceinstaller
github离线安装
clone 代码
编译代码
$ git clone https://github.com/libimobiledevice/libimobiledevice.git
$ cd libimobiledevice
$ ./autogen.sh
$ make
$ sudo make install
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
常用语法
安装卸载ipa包
# 查看当前已连接的设备的UUID
idevice_id -l
# 获取设备信息
ideviceinfo
# 查看系统日志
idevicesyslog
# 截图
idevice screenshot
# 获取设备时间
idevicedate
# 重启设备
idevicediagnostics restart
# 关机
idevicediagnostics restart
# 休眠
idevicediagnostics sleep
usbmuxd
usbmuxd 全称「USB Multiplexing Daemon」,即 USB 多路传输驻留程序。当 Mac/PC 与 iPhone 之间使用 USB 数据线连接时,iTunes 与 iPhone 间的通信交流便是通过 usbmuxd 服务。usbmuxd 通过给定的端口号和 localhost 建立 TCP 连接。
下载网址:https://cgit.sukimashita.com/usbmuxd.git
安装
brew install usbmuxd
参考:https://gist.github.com/Nomeqc/494e197806402c1880169eb72a576e77
ideviceinstaller
前言:ideviceinstaller 是一个命令行工具,主要用于管理iOS设备上应用程序的安装与卸载,以及查看相关信息。 # ipa安装命令
ideviceinstaller官网:https://github.com/libimobiledevice/ideviceinstaller
【查看是否安装】:终端输入 ideviceinstaller
安装 ideviceinstaller
brew install ideviceinstaller
常用命令
# 打印app列表(查看已安装程序)
ideviceinstaller -l
# 卸载程序
ideviceinstaller -U [appId]
idevice installer -i xxx.ipa # 安装
idevice installer -u [udid] -i [xxx.ipa] # 给指定连接的设备安装应用
idevice installer -U [bundleID] # 卸载
如果电脑连接了多台设备,查看、安装及卸载程序的命名均需要通过 -o [udid] 参数来指定设备
ideviceinstaller -i [ipa文件] -o [设备udid]
ideviceinstaller -l -o [设备udid]
ideviceinstaller -U [appId] -o
相关命令:
注:bundle_id就是应用包名
获取设备的的UDID
idevice_id --list # 显示当前所连接设备的 udid
instruments -s devices # 列出所有设备,包括真机、模拟器、mac
ideviceinfo 可以在返回的数据中找到 udid
idevice_id -l
苹果手机 safari打开网址http://fir.im/udid 就看到了
设置代理
(可以用于转发端口,比如将ssh的端口映射到电脑,这样没有网络也可以ssh登录)
iproxy (该工具会将设备上的端口号映射到电脑上的某一个端口)
iproxy 8200 8100
挂载DeveloperDiskImage
用于调试
ideviceimagemounter
安装某个app
ideviceinstaller -i apppath 安装apppath下的app
ideviceinstaller -i xxx.ipa //命令安装一个ipa文件到手机上,如果是企业签名的,非越狱机器也可以直接安装了。
ideviceinstaller -u [udid] -i [xxx.ipa] # xxx.ipa 为应用在本地的路径
卸载应用
ideviceinstaller -u [udid] -U [bundleId] 卸载应用,需要知道此应用的bundleID
ideviceinstaller -U <bundleId>
查看设备已安装的应用
ideviceinstaller -u [udid] -l # 查看设备安装的第三方应用
ideviceinstaller -u [udid] -l -o list_user # 同上,查看设备安装的第三方应用
ideviceinstaller -u [udid] -l -o list_system # 查看设备安装的系统应用
ideviceinstaller -u [udid] -l -o list_all # 查看设备安装的所有应用
获取设备信息
ideviceinfo -u [udid] # 获取设备信息
ideviceinfo -u [udid] -k DeviceName # 获取设备名称 同命令 idevicename
idevicename # 同上
ideviceinfo -u [udid] -k ProductVersion # 获取设备版本 10.3.3
ideviceinfo -u [udid] -k ProductType # 获取设备类型 iPhone 8,1
ideviceinfo -u [udid] -k ProductName # 获取设备系统名称
其他系统文件信息
ideviceinfo # 获取设备所有信息
idevicesyslog # 获取设备日志
idevicesyslog >> iphone.log &
//该命令是将日志导入到iphone.log这个文件,并且是在后台执行。
idevicecrashreport -e test # 获取设备 crashlog,test 是文件夹需新建
idevicediagnostics # 管理设备状态 - 重启、关机、睡眠等
ios-deploy 常用命令
ios-deploy -c # 查看当前链接的设备
ios-deploy --[xxx.app] # 安装APP
ios-deploy --id [udid] --uninstall_only --bundle_id 包名 # 卸载应用
ios-deploy --id [udid] --list_bundle_id # 列出所有应用的包名
ios-deploy --id [udid] --exists --bundle_id 包名# 指定设备查看应用是否安装 (如ios-deploy --id 95923223205 --exists --bundle_id com.dlte.666)
ios-deploy -e --bundle_id 包名 #不指定设备判断是否安装此包(用于只有一台手机)
列举设备安装的应用
ideviceinstaller -l则可以列出手机上所有的用户安装的app
运行某个app
调试程序(需要预先挂载DeveloperImage)
idevicedebug run 'APP_BUNDLE_ID'可以直接launch某个app,当然,这个app必须是你通过development证书build到手机上的才行。
获取手机的设备版本(系统版本)
Ideviceinfo -k ProductVersion
获取手机的设备名(手机型号)
ideviceinfo -k ProductType
截图
idevicescreenshot
//如果在使用截图的时候出现报错信息,那么就去把相应版本的DeveloperDiskImage的两个文件复制到libimobiledevice文件下面。
路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/对应版本/
录像
xrecord --quicktime --list
xrecord --quicktime --name="iPhone" --out="/Users/blah/video/iphone.mp4" --force
手机关机
idevicediagnostics shutdown # shutdown device
重启手机
idevicediagnostics restart # restart device
休眠(熄屏灭屏)
idevicediagnostics sleep # 类似于断开adb . (disconnects from host)
获取设备时间
idevicedate
参考:https://www.cnblogs.com/chen-xia/articles/14268025.html
1.iPhone默认是使用22端口进行SSH通信,采用的是TCP协议。
2.要想保持端口映射状态,不能关闭第一个终端窗口,如果要执行其他终端命令行,请新开一个终端窗口。
3.不一定非要10010端口,只要不是保留端口就行。
4.localhost是一个域名,指向的IP地址是127.0.0.1,本机虚拟网卡的IP地址。
5.usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口。
在 Mac 端,是由「/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd」处理,并通过 launchd 启动。其将会在「/var/run/usbmuxd」创建一个 UNIX Domain Socket(UNIX 域套接字),usbmuxd 将监听 USB 接口的 iPhone 连接。当 iPhone 在正常模式下连接,其将会连接到该 iPhone,并将开始转发通过「/var/run/usbmuxd」接收到的请求。
挂载文件系统工具:ifuse
ifuse是一个依赖libimobiledevice库的工具,所以必须首先安装libimobiledevice
brew install osxfuse
brew install ifuse
挂载某应用的整个沙盒目录
ifuse --container [要挂载的应用的bundleID] [挂载点]
如果是越狱的设备,并且配置好了,可以使用下面命令挂载整个iphone文件系统(暂时没试过,还没有开始研究越狱设备)
ifuse --root [挂载点]
学习完善修正中。。。。