iPhone手机越狱-逆向砸壳-代码注入
| iPhone手机越狱 | 逆向砸壳 | 代码注入 |
|---|---|---|
|
|
|
一、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连接中使用指令查询应用二进制文件地址:
ps -e | grep XiaoAiLite
运行示例:

记录下应用二进制文件地址,后面会用到
4. 找到应用document沙盒地址
在ssh连接中使用cycript注入目标进程:
cycript -p XiaoAiLite
示例:

如果提示找不到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目录就新建一个
cd /opt
在opt目录clone Theos源码
sudo git clone --recursive https://github.com/theos/theos.git
修改权限
sudo chown -R $(id -u):$(id -g) theos
终端中修改环境变量
vi ~/.bash_profile
添加一下两行
export THEOS=/opt/theos
export PATH=/opt/theos/bin/:$PATH
启用配置文件
source ~/.bash_profile
2. 创建tweak逆向工程
打开终端进入要存放工程的目录,执行Theos创建项目指令:
nic.pl
示例:

选择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版本:
xcodebuild -showsdks
示例:

添加SDKVERSION信息
SDKVERSION = 12.1
查看设备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后会出现一个弹窗

iPhone手机越狱-逆向砸壳-代码注入的更多相关文章
- IOS逆向-砸壳笔记
本人ios10.3.1 iphone6越狱机.方案三个. 方案一.dumpdecrypted.dylib 1. ssh到越狱机上,看WeChat可执行文件在哪. # ps aux|grep WeCha ...
- 《Android逆向反编译代码注入》 - 逆向安全入门必看视频教程
适合人群: Android开发人员.逆向反编译开发人员.以及对Android逆向安全感兴趣的朋友. 视频地址: 51CTO学院:https://edu.51cto.com/course/24485 ...
- iOS应用代码注入防护
在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能.代码健壮相关的问题,我们有时还需要考虑到应用安全的问题.那么应用安全的问题涉及到很多方面.比如防止静态分析的,代码混淆.逻辑混淆:防止 ...
- HTML5 App的代码注入攻击
原文链接 摘要 基于HTML5的手机app(译者注:以下简称HTML5 app)越来越流行了, 在大多数情况下它比native应用更容易适配不同的移动操作系统.它开发起来很方便,可以使用标准的web技 ...
- 纯代码利用CSS3 圆角边框和盒子阴影 制作 iphone 手机效果
原文:纯代码利用CSS3 圆角边框和盒子阴影 制作 iphone 手机效果 大家好,我是小强老师. 今天我们看下CSS3最为简单的两个属性. css3给我们带来了很多视觉的感受和变化,以前的图片做的事 ...
- IOS 逆向工程之砸壳
在<iOS应用逆向工程>4.6.2节中,我们曾推荐使用iPhoneCake源的AppCrackr 1.7版给App砸壳.这种方式简单粗暴,省时省力,但正是因为它过于方便有木有,导致几乎所有 ...
- Talking Ben App砸壳记
需求: 导出Talking Ben app的头文件 实施: 1)准备材料: 越狱IOS设备一部,并安装Talking Ben游戏 IOS设备上安装open SSH IOS设备的/usr/bin 中安装 ...
- GIF Movie Gear逆向实战+注册代码+补丁
GIF Movie Gear逆向实战+注册代码+补丁 准备 我是在windows 8.1 x64上进行的操作.有不足之处,还望大虾指出. 获取资源 网站下载:http://www.gamani.com ...
- Android 反编译 代码注入之HelloWorld
为了向经典的"Hello, World"致敬,我们也从一个简单的程序开始HelloWorld.apk.当你把这个APK安装到手机上运行后,在屏幕上就显示一行文字"Hell ...
随机推荐
- MySQL 数据库中的基础操作
数据库中的表操作 1.创建表 表的表名命名规则: -- 数据库表命名规则重要说明: -- (1)数据库表名称可以支持大写字母A-Z,小写字母a-z,数字0-9,字符包括下划线 _ ,可以组合使用; - ...
- P1020 导弹拦截(nlogn求最长不下降子序列)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- P1306 斐波那契公约数(ksm+结论)
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? Update:加入了一组数据. 输 ...
- java初探(1)之秒杀的安全
在秒杀的场景中还存在着很多的安全问题 暴露秒杀地址 秒杀请求可以很频繁 接口流量大,恶意刷接口 隐藏秒杀接口 为什么需要隐藏,事实上,页面上的所有东西都能被客户端拿到,包括js代码,因此,分析商品详情 ...
- 小程序开发-block组件的使用
微信小程序中,block不是一个组件,而是一个包装元素,不会在页面中做任何渲染. 使用情况:条件渲染 wx:if 因为 wx:if 是一个控制属性,需要将它添加到一个标签/组件上,用于控制隐藏与显示. ...
- Codeforces Round #669 (Div. 2)A-C题解
A. Ahahahahahahahaha 题目:http://codeforces.com/contest/1407/problem/A 题解:最多进行n/2的操作次数,我们统计这n个数中1的个数,是 ...
- SpringBean容器启动流程+Bean的生命周期【附源码】
如果对SpringIoc与Aop的源码感兴趣,可以访问参考:https://javadoop.com/,十分详细. 目录 Spring容器的启动全流程 Spring容器关闭流程 Bean 的生命周期 ...
- 【漫话DevOps】Agile,CI/CD,DevOps
随着DevOps理念的普及与扩散,可能会被一大堆名字概念搞的莫名其妙,理清它们之间的关系可以帮助团队知道DevOps如何落地,改善工作流程. Here's a quick and easy way t ...
- C的文件操作---笔记
打开文件 FILE *fp = fopen(char *filename, char *mode) 关闭文件 fclose(fp) 字符形式读 char ch = fgetc(fp) 字符形式写 ...
- 记录一次OCR程序开发的尝试
记录一次OCR程序开发的尝试 最近工作中涉及到一部分文档和纸质文档的校验工作,就想把纸质文件拍下来,用文字来互相校验.想到之前调用有道智云接口做了文档翻译.看了下OCR文字识别的API接口,有道提供了 ...