惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

博客园 - 周希

自动驾驶算法评测体系建设实践 Mac上的Redis安装和使用 使用Apple Configurator 2提取商店ipa or app文件 使用ATOMac进行Mac自动化测试 WDA支持获取WebView元素 iOS模拟器命令 Android自动化测试探索(七)代码覆盖率统计 Android自动化测试探索(五)代码覆盖率统计 解决ifuse不支持24位UDID问题 Android自动化测试探索(四)uiautomator2简介和使用 iOS自动化探索(十)代码覆盖率统计 Android自动化测试探索(三)Android SDK tools安装、aapt配置以及使用aapt获取apk包名 Android自动化测试探索(二)常用自动化工具 Android自动化测试探索(一)adb详细介绍 关于Mac上使用ideviceinstaller操作iPhoneXR等24位UDID设备报“ERROR: Invalid UDID specified”解决办法 mac下csv乱码解决办法 Mac安装MySQLdb遇到的坑 【Python MySQLdb】Library not loaded: /usr/local/mysql/lib/libmysqlclient.20.dylib解决办法 Pycharm更换主题 Python -- 使用pickle 和 CPickle对数据对象进行归档和解析
iPhone手机越狱-逆向砸壳-代码注入
周希 · 2020-10-10 · via 博客园 - 周希
iPhone手机越狱逆向砸壳代码注入
  1. 工具下载
  2. 操作越狱
  1. 安装待逆向应用(app)
  2. 使用OpenSSH连接手机
  3. 找到应用二进制文件地址
  4. 找到应用document沙盒地址
  5. 拷贝砸壳工具(dumpdecrypt.dylib)到document目录
  6. 砸壳
  7. 使用class-dump导出头文件
  1. Theos安装与配置
  2. 创建tweak逆向工程
  3. Tweak工程配置
  4. 编写注入代码
  5. Tweak工程编译、打包、安装

一、iPhone手机越狱

1.  工具下载

目前13以上系统还没有完美越狱的方案,可以临时使用checkra1n方案对手机进行越狱:

下载地址: 点我下载

直接安装即可

2. 操作越狱

打开checkra1n

点击start按引导设置手机进入恢复模式

仔细看下步骤说明,再点start设置手机进入DFU模式

开始自动越狱进程

越狱成功后,手机上会多出checkra1n和Cydia两个app

注意: 非完美越狱手机重启后会失效,如果手机重启了需要重新越狱一次

二、逆向砸壳

1. 安装待逆向应用(app)

把待逆向的app安装到手机上(例如: 小爱同学), 并打开应用(需保持应用在前台开启状态)

2. 使用OpenSSH连接手机

在Cydia中下载安装OpenSSH

查看手机ip地址: xxx.xxx.xxx.xxx

打开终端,使用ssh命令连接手机: 

ssh root@xxx.xxx.xxx.xxx(ip)

默认密码是: alpine

示例:

 

3. 找到应用二进制文件地址

在ssh连接中使用指令查询应用二进制文件地址: 

运行示例:

记录下应用二进制文件地址,后面会用到

4. 找到应用document沙盒地址

在ssh连接中使用cycript注入目标进程: 

示例:

如果提示找不到cycript指令,到cydia搜索安装一下

ssh连接中使用OC代码查询沙盒地址:  

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]

示例:

记录下应用document沙盒地址,后面会用到

5. 拷贝砸壳工具(dumpdecrypt.dylib)到document目录

下载dumpdecrypted源码: https://github.com/stefanesser/dumpdecrypted

打开一个新的终端进入dumpdecrypted源码路径,使用make指令进行编译

检查有生成: dumpdecrypted.dylib文件

对生成的dylib文件签名

打开电脑上的钥匙串,找到自己的开发者证书, 复制证书名称(一般证书名称格式:  "Mac Developer: 你的开发者邮箱")

在终端中使用codesign指令对dumpdecrypted.dylib文件进行签名:

codesign -f -s "证书名称(一般证书名称格式:  "Mac Developer: 你的开发者邮箱")" dumpdecrypted.dylib 

在终端中使用scp指令将签名后的dumpdecrypted.dylib文件拷贝到应用沙盒目录

scp dumpdecrypted.dylib root@10.224.202.59://var/mobile/Containers/Data/Application/DB5D7297-CCE6-4275-866F-4EC04F4A55FC/Documents

示例:

6. 砸壳

(如果还在cycript交互环境,用ctrl+z退出到root连接)

在ssh连接中使用以下指令进行砸壳

 DYLD_INSERT_LIBRARIES=应用documents沙盒路径/dumpdecrypted.dylib 应用二进制路径

例如:

DYLD_INSERT_LIBRARIES=/var/mobile/Containers/Data/Application/323F1DF8-E8E8-48DC-911B-56DDBEAD25A0/Documents/dumpdecrypted.dylib /var/containers/Bundle/Application/35DE68F0-52C1-47B9-8D19-0C711BB78AB9/XiaoAiLite.app/XiaoAiLite

示例:

砸壳成功后root路径下会生成一个xxx.decrypted文件(这里我们生成的是: XiaoAiLite.decrypted)

可以在ssh连接中使用ls指令检查是否有生成:

使用scp将生成的XiaoAiLite.decrypted拷贝到电脑上

scp root@10.224.202.59:/var/root/XiaoAiLite.decrypted /Users/zhouxi/Documents/Xiaomi/Code/utils/dumpdecrypted

示例:

7. 使用class-dump导出头文件

安装class-dump

下载class-dump.dmg文件, 下载地址: http://stevenygard.com/projects/class-dump/

打开class-dump.dmg,将的class-dump文件拷贝到电脑的/usr/local/bin目录下

在终端输入class-dump检查可以显示class-dump帮助信息

在之前拷贝的XiaoAiLite.decrypted文件统计目录创建一个Headers文件夹

在终端中使用class-dump指令导出头文件:

class-dump -H XiaoAiLite.decrypted -o Headers 

示例:

在Headers文件夹中查看导出的头文件

三、代码注入

1. Theos安装与配置

安装Theos之前需要安装dpkg、fakerroot、ldid三个依赖库, 安装指令如下

brew install ldid
brew install fakeroot
brew install dpkg

打开终端进入/opt路径, 如果根目录没有opt目录就新建一个

在opt目录clone Theos源码

sudo git clone --recursive https://github.com/theos/theos.git

修改权限

sudo chown -R $(id -u):$(id -g) theos 

终端中修改环境变量

添加一下两行

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

启用配置文件

2. 创建tweak逆向工程

打开终端进入要存放工程的目录,执行Theos创建项目指令:

示例:

选择iPhone/tweak, 输入: 15

然后依次输入ProjectName/PackageName/AuthorName/目标BundleID/目标二进制文件名

3. Tweak工程配置

Tweak工程包含HookXiaoai.plist、Makefile、Tweak.x、control四个文件

control文件记录基本信息,可以按需要修改或者添加,比如加上公司主页或者博客地址

HookXiaoai.plist文件记录Hook目标应用的bundleID

Makefile是编译脚本

使用指令查询mac上iOS SDK版本: 

示例:

添加SDKVERSION信息

查看设备ip, 添加THEOS_DEVICE_IP信息

THEOS_DEVICE_IP = 10.224.202.59

修改后的makefile文件内容

备注: 如果需要自己配置指令集可以按需要添加指令集信息: 

ARCHS = armv7 armv7s arm64

Tweak.x文件是编写注入代码用

4. 编写注入代码

代码注入的方式是从导出的头文件中找到需要Hook的方法,修改或者注入自己的逻辑

代码的写法可以看下Tweak.x文件里面的说明

这里以Hook AppDelegate中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

为例子,我们加一个弹窗, 以下是代码

%hook AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BOOL awesome = %orig; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"你的程序被篡改啦!!!" delegate:nil cancelButtonTitle:@"" otherButtonTitles:nil]; [alert show]; return awesome; } %end

执行编译指令: make 

执行打包指令: make package

执行安装指令: make install 

安装过程中需要输入密码, 默认是alpine

如果一切正常,打开app后会出现一个弹窗