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

article/2025/10/19 13:51:30

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 代码

  • https://github.com/libimobiledevice/libimobiledevice

  • https://github.com/libimobiledevice/ideviceinstaller

编译代码

$ 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 [挂载点]


学习完善修正中。。。。


http://chatgpt.dhexx.cn/article/ST3ggQS1.shtml

相关文章

ios android 逆向 对比,iOS逆向开发--APP重签名

签名原理 在非越狱手机上要调试一个三方的APP&#xff0c;我们首先要对其重签名&#xff0c;跑在我们的手机上&#xff0c;我们才能对其进行进一步的动态和静态调试 要对一个APP包进行重签名&#xff0c;要有一个越狱的APP包&#xff0c;这个可以去PP助手上下载&#xff0c;也可…

IOS逆向-抓帧分析

背景 分析图形学、游戏等的时候&#xff0c;很多时候需要抓帧分析 步骤 动态调试APP点击 点击FPS&#xff0c;触发渲染&#xff0c;查看面板是否有数据点击&#x1f4f7;按钮&#xff0c;触发渲染再次点击&#x1f4f7;按钮&#xff0c;结束抓帧 问题 FPS数据面板没有数据…

IOS逆向-动态调试

文章目录 LLDBXcode重新签名版本调试(手动) ✅重新签名版本调试(自动)不重新签名版本调试 LLDB Xcode -> Attach -> 点击 || 按钮 -> 使用lldb终端 手机/Developer/usr/bin/debugserver localhost:2233 /var/containers/Bundle/Application/*/*/xxxx电脑 lldb -> …

IOS逆向初探

前言 这些文章用于记录学习路上的点点滴滴&#xff0c;也希望能给到刚入门的小伙伴们一点帮助。爱而所向&#xff0c;不负所心。 环境 iphone 6 MacOS Monterey 12.3.1 一、IOS开发语言 Objective-C Objective-C是iOS操作系统运用的软件开发语言。Objective-C的流行完全是因…

移动App入侵与逆向破解技术-iOS篇

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理介绍入侵常用的工具和方法,包括pc端和手机端讲解黑客技术中的静态分析和…

C#应用程序与MATLAB联合编程

本文主要结合C#编写应用程序方便强大和MATLAB在工业科学界的广泛应用&#xff0c;结合两者的优点&#xff0c;利用C#编写的windows桌面应用程序作为UI交互接收用户配置&#xff0c;并根据用户在前端应用界面的操作自动控制MATLAB运行&#xff0c;并将MATLAB计算的结果返回桌面应…

编程输出中文变问号的解决办法

问题是出现在windows的dos显示设置上。 如何解决这个问题&#xff1f; 1.打开运行&#xff0c;输入cmd&#xff1b; 2.界面顶部右键&#xff0c;option中选择默认值&#xff1b; 3.将437&#xff08;OEM-美国&#xff09;改为936&#xff08;ANSI/OEM-简体中文GBK&#xff09; …

Python入门(二)-编程环境

本章重点介绍 Python 编程环境的搭建&#xff0c;包括各个平台下 Python 的下载和安装&#xff0c;常见 IDE 的使用&#xff0c;如何运行 Python 程序等。我还会亲自带着大家编写并运行第一个 Python 程序&#xff0c;让大家认识一下最简单的 Python 代码。 本章的后半部分还介…

数模混合信号建模语言Verilog-AMS

混合信号建模语言Verilog-AMS 很多人做模拟电路的朋友&#xff0c;都希望有一款“模拟FPGA”&#xff0c;希望有一个“模拟的Verilog”&#xff0c;但现实是没有“模拟的Verilog”只有混合信号建模语言-Verilog-AMS&#xff0c;今天就简单介绍一下-Verilog-AMS。 为了便于物理系…

Java入门-Java语言概述

1、Java语言基本概述 1.1、什么是计算机编程语言 人与人之间是如何沟通的呢&#xff1f;从小父母就教会我们说话&#xff0c;在长期的熏陶和自我学习中&#xff0c;我们就学会了普通话&#xff0c;学会了表达自己的需求&#xff0c;父母收到我们的信号或者听到我们的要求也会尽…

Python 批量下载BiliBili视频 打包成软件

文章目录 一、项目概述1.项目背景2.环境配置下载ffmpeg设置环境变量 二、项目实施1.导入需要的库2.设置请求参数3.基本处理4.下载视频5.视频和音频合并成完整的视频6.3种下载方式的分别实现7.主函数 三、项目分析和说明1.结果测试改进说明2.软件打包3.改进分析4.合法性说明 如有…

Java 之父 James Gosling 最新访谈:JIT 很好,但不适合所有语言

计算机编程确实是一门艺术。 James Gosling&#xff0c;“Java 之父”, 完成了 Java 的原始设计&#xff0c;并实现了 Java 最初版本的编译器和虚拟机。 90年代初&#xff0c;James Gosling和一群技术人员合作“绿色计划”&#xff0c;创建了一个名为Oak的项目&#xff0c;旨在…

Python语言概述及其运行机制详解

即日起&#xff0c;我们将打开一个新的编程世界的大门——Python语言。Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本(shell)&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独…

go语言开发环境搭建

Go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 Go语言专门针对多处理器系统应用程序的编程进行了优化&#xff0c;使用Go编译的程序可以媲美C或C代码的速度&#xff0c;而且更加安全、支持并行进程。 学习Go一部分是兴趣&#xff0c;一部分是…

汇编语言程序运行过程分析

实验项目程序运行过程分析综合性实验2020年11月 18日 一、实验综述 1.实验目的及要求 &#xff08;1&#xff09;掌握程序执行具体过程 &#xff08;2&#xff09;构建汇编语言的运行环境 &#xff08;3&#xff09;掌握汇编语言的编译连接过程 &#xff08;4&#xff09;掌…

【x86汇编】第六章 输出/输出和win32编程

文章目录 输入/输出指令和数据的传送方式输入/输出指令输入指令IN输出指令OUT串输入指令INS串输出指令OUTS 数据的传送方式无条件传送查询传送直接存储器中断传送 中断与异常中断的概念不可屏蔽中断 NMI可屏蔽中断 INTR除法出错溢出调试异常&#xff08;单步&#xff09;软中断…

总算编译通过了《自制编程语言》一书里的代码!

起初按照书里的说明来搭建Windows下的环境&#xff0c;卡在下载和编译正则表达式库“鬼车”的地方&#xff0c;后来留言给作者&#xff0c;才知道这个库已经转移到github上了&#xff08;2018年4月25时点&#xff1a;https://github.com/kkos/oniguruma&#xff09;&#xff0c…

脑语言v0.5.8 2500令【单字编程】

脑语言v0.5.8 2500令【单字编程】 【号】【单字】【多字】【英文】 1 1脑 脑语言 naoyuyan 2 配 配置 config 3 班 班级 grade 4 令 指令 command 5 述 描述 description 6 横 ■横 ■x 7 纵 ■纵 ■y 8 深 ■深 ■z 9 宽 ■宽 width 10 高 ■高 height 11 撑 缩放…

p4 编程语言环境配置

文章目录 前言建议直接看第二种方法第一种方法&#xff1a;p4官方教程里的方法&#xff08;不建议&#xff0c;我没安装成功&#xff09;1.1 下载并安装 Virtual Box1.2 下载并安装 Vagrant1.3 利用 Vagrant 安装虚拟机 第二种方法&#xff1a;直接导入已经配置好的虚拟镜像文件…

Python学习笔记 - Python语言概述和开发环境

一、Python简介 1.1 Python语言简史 Python由荷兰人吉多范罗苏姆(Guido van Rossum)于1989年圣诞节期间&#xff0c;在阿姆斯特丹&#xff0c;为了打发圣诞节的无聊时间&#xff0c;决心开发一门解释型程序语言。Python语言基于ABC教学语言开发的。1991年第一个Python解释器公…