IOS逆向需用到的工具汇总

article/2025/10/17 0:14:02

1、Mac 上自带的一些命令工具

file:查看Mach-O的文件类型

file 文件路径

otool:查看Mach-O特定部分和段的内容

otool -L Mach-O文件 # 查看当前 Mach-O 文件的动态链接库。

lipo:常用于多架构Mach-O文件的处理

  1. 查看架构信息:lipo -info 文件路径
  2. 导出某种特定架构:lipo 文件路径 -thin 架构类型 -output 输出文件路径
  3. 合并多种架构:lipo 文件路径1 文件路径2 -output 输出文件路径

2、class-dump

导出 Mach-O 文件中的头文件,前提是 已脱壳。具体指令如下:

class-dump -H UCARSecurityDev -o heraders

UCARSecurityDev: Mach-O 文件,将导出的头文件放入文件夹(heraders)中。

3、Reveal

查看 APP UI布局的工具。 在设备上安装一个软件源,然后将 Mac 上的 RevealServer(help -- Show Reveal Library in finder -- iOS Library-RevealServer.framework -- RevealServer) 放入设备的 Library/RHRevealLoader 目录。

在设备上运行想要查看的 APP 即可。

4、MachOView

MachOView会出现 crash的情况,解决方案查看https://blog.csdn.net/lwb102063/article/details/110136891。

5、Hopper Disassenbler

拖入 Mach-O 文件,查看汇编代码的工具。

6、Cycript

这个是一个在越狱设备上使用的一个应用程序,通过Cydia安装,直接在设备上调试。有点像 Python,不一样的是直接在设备上调试。开发语言这是一个多语言的混合体,包括 OC、JS、Java 等。

官方文档介绍:cycript-manual

进入环境的命令:

  1. cycript
  2. cycript -p 进程ID
  3. cycript -p 进程名称

第一种方式,仅仅是进入 cycript 的环境,后面两个是直接进入对应程序的 cycript 的环境。

关键的快捷键:取消输入:Ctrl + C退出:Ctrl + D 与 清屏:Command + R

通过 ps 命令可以列出当前设备的所有进程:

  1. ps -A | grep key
  2. ps aux

7、Clutch 与 dumpdecryted

都是脱壳工具: Clutch 与 dumpdecrypted。

7.1 Clutch

列出已经安装的 APP:

Clutch -i

列出来的一般都是加壳的 App。

进行加壳操作:Clutch -d APP序号或 BundleId

Clutch -d com.app.dev

具体步骤可以擦考

脱壳: 通过 Clutch -i 列出需要脱壳的应用列表:

Installed apps:
1:   神州优驾(U+)司机端 <com.szzc.driver>
2:   腾讯课堂 - 在线职业培训教育平台 <com.tencent.edu>
3:   QQ <com.tencent.mqq>
4:   酷听音乐 - 歌曲音乐听你想听 <com.liyancong.kuq>
5:   神州租车-神州共享车重磅上线 <com.szzc.szzc>
6:   ボイスレコーダー-無料ボイスメモ <com.leqimea.recorderAudio>
7:   优驾司机出租车 <com.szzc.tdriver>
8:   爱思助手 <com.diary.mood>

输入APP序号或者Bundle Id进行脱壳操作:Clutch -d APP序号或BundleId:Clutch -d com.liyancong.kuq, 如下:

Zipping Kumi2.app
ASLR slide: 0x100010000
Dumping <Kumi2> (arm64)
Patched cryptid (64bit segment)
Writing new checksum
DONE: /private/var/mobile/Documents/Dumped/com.liyancong.kuq-iOS8.0-(Clutch-2.0.4).ipa
Finished dumping com.liyancong.kuq in 2.4 seconds

DONE: /private/var/mobile/Documents/Dumped/com.liyancong.kuq-iOS8.0-(Clutch-2.0.4).ipa 就是脱壳结束的 ipa 文件。

7.2 dumpdecryted

下载原代码后执行make指令,得到 dumpdecryted.dylib, 然后 scp 到 iPhone 设备的 /usr/root 目录。

脱壳命令:

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib macho.app/macho

结束后生成一个 macho.decrypted 就是脱壳后的 macho 文件。

8、Theos

能生成 tweak 项目的一个工具,代码在 这里。

通过如下命令进行 clone:

git clone --recursive https://github.com/theos/theos.git $THEOS

其中 $THEOS 是在 .bash_profie 中配置的变量:

export THEOS=~/theos
export PATH=$THEOS/bin:$PATH

配置之后,执行如下命令起效:

source ~/.bash_profile

clone 成功之后,通过 nic.pl 命令创建一个 tweak 项目。 在 nic.pl 之后选择 11 即可。

创建之后,手动到中添加这两个变量 THEOS_DEVICE_IP 与 THEOS_DEVICE_PORT,也可以将其设置成全局的。

在 Tweak.xm 中,代码编写结束之后,在终端分别执行这两条精灵即可:

make package (打包)
make install (安装)

如果有错误,修改即可。

安装之后再设备上就会有对应的 dylib 与 plist 文件。

可以参考:目录结构 、环境变量 与 Logos 语法。

9、debugserver & lldb

程序调试的一个工具,对于一个真机调试过的设备来说,都会有这个,会在第一次进行联调的时候,Xcode 默认安装到设备。一般是安装在:/Developer/usr/bin/debugserver image.png 这个过程就应该在安装。

只有安装成功之后才能进行调试,一旦这个文件没有,那么真机调试的时候直接报错,报错信息如下: image.png

在越狱设备上经常出现这样的情况,无原无故的就没有了,暂时的解决方案是换一台重来没有连接过这个设备的电脑,连接安装即可。这样会重新安装 debugserver。我也不知道为什么一定要换一台电脑才能重新安装,暂时还没有找到清空的方法(可能在设置中的开发者中能清楚, 还每一试过),非要找一台新电脑。

一般要使用这个工具来进行调试的话,只能在越狱的设备上。

9.1 添加额外的权限

在 Xcode 调试的过程中是使用 /Developer/usr/bin/debugserver,如果是调试飞 Xcode 项目的时候,这个工具缺少一定的权限,所以需要单独拎出来添加其它权限后单独使用。

将 /Developer/usr/bin/debugserver 拖到电脑上,通过如下命令获取现有权限:

ldid -e debugserver > debugserver.entitlements

权限文件(debugserver.entitlements)中的内容如下: image.png

需要在添加两个权限:

get-task-allow
task_for_pid-allow

image.png

添加之后再重新设置新的权限:

ldid -Sdebugserver.entitlements debugserver

这样 debugserver 就有了更多的权限,直接将其拖到设备的 /usr/bin目录下就可以使用。可能需要执行一下:chmod +x /usr/bin/debugserver

以上的签名操作,也可以使用 codesign

codesign -d --entitlements - debugserver
codesign -fs- --entitlements debugserver.entitlements debugserver

还有一种比较权威的方式是直接将 SpringBoard 的权限直接赋值给 debugserver

9.2 开始使用

登录设备之后,执行这个命令:

debugserver *:port -a pid

port: 休闲的端口即可,要与 mac 连接的对应。 pid :可以是进程 ID 或者进程名称。

回到 Mac 启动 lldb,然后执行:

process connect connect://ip:port

这里的 ip 如果是 usb 登录的话就直接写 localhost,写上对应映射的 port 即可。如果使用 WIFI 的话,ip 是设备的 ipport 是 debugserver 的那个 port

当这个命令成功之后,会发现设备 卡死 了。这是正常的现象,在 lldb 执行一下 c 就可以了。这个指令的意思是跳过当前的断点,貌似一旦连接成功就会有一个默认的断点。


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

相关文章

IOS 逆向分析基础篇

一、环境准备 已经越狱的IOS手机一台&#xff0c;如果使用的是Windows笔记本另外需要mac 虚拟机 1、IOS 手机越狱及环境配置 IOS12.0 以前版本&#xff0c;可以用impactor 写入签名&#xff0c;安装越狱IPA包 IOS 12以上版本&#xff0c;并小于IOS12.1.2&#xff0c;此时需要…

IOS逆向-LLVM、代码混淆

LLVM、代码混淆 1 LLVM1.1 传统编译架构1.2 LLVM的编译架构1.3 Clang1.3.1 什么是Clang1.3.2 Clang与LLVM 2. OC源文件的编译过程2.1 编译过程和预编译2.2 词法分析2.3 语法树-AST2.4中间代码&#xff08;LLVM IR&#xff09; 3. LLVM源码3.1 LLVM的源码下载3.2 源码编译3.2.1 …

【iOS逆向与安全】frida-trace入门

前言 frida-trace是一个用于动态跟踪函数调用的工具。支持android和ios。安装教程请参考官网。工欲善其事必先利其器。本文将以某App为示范&#xff0c;演示frida-trace的各种方法在iOS中的应用。 一、目标 让看文章的你在使用frida-trace时更得心应手。 二、工具 mac系统f…

iOS逆向之某茅台App抓包

阅读此文档的过程中遇到任何问题&#xff0c;请关注公众号移动端Android和iOS开发技术分享或加QQ群309580013 1.目标 由于某茅台App有抓包检测&#xff0c;无法直接使用charles等工具抓包。本文的目的自然就是如何修改源码并抓任意接口 2.依赖环境 frida-ios-dump&#xff1…

【iOS逆向与安全】iOS插件开发入门

前言 经过之前的学习&#xff0c;相信你已经能熟练的使用Frida-trace、IDA Pro等逆向工具。不过&#xff0c;仅仅到这肯定是不够的。接下来&#xff0c;学会把你逆向的结果打包成插件并运行&#xff0c;那iOS逆向&#xff0c;你也就真正的入门了。 一、目标 把逆向的结果制作成…

iOS逆向工程开发技巧

1. 将xib文件转成nib文件 ibtool --errors --warnings --output-format human-readable-text --compile ~/Desktop/001.nib ~/Desktop/HWTipsView.xib 2. 给framework添加指令集合并 lipo -create [地址&#xff1a;name1.framework/name1] [地址&#xff1a;name2.framewor…

iOS逆向动态调试

1.拷贝越狱手机/Developer/usr/bin目录下的debugserver到Mac电脑&#xff0c;在mac端输入 scp -P 2222 rootlocalhost:/Developer/usr/bin/debugserver ~/debugserver2.对debugserver进行瘦身(iOS11可以不用瘦身,因为只支持64位构架的程序)&#xff0c;在debugserver所在目录输…

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

1、Xcode 历届版本&#xff1a;https://developer.apple.com/documentation/xcode-release-notes AppStore中搜并安装XCode & 在网页下载https://developer.apple.com/xcode 2、class-dump class-dump&#xff0c;是可以把Objective-C运行时的声明的信息导出来的工具。其实…

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;旨在…