ios逆向学习环境安装(一)

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不在默认的路径

解决方案:

  1. 如果您还没有安装 Xcode(从https://appstore.com/mac/apple/xcode获取 )。

  1. 接受条款和条件。

  1. 确保 Xcode 应用程序在/Applications目录中(不是/Users/{user}/Applications)。

  1. 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

设置代理

(可以用于转发端口,比如将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 [挂载点]


学习完善修正中。。。。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值