Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS 逆向工具:逆向做的好,码农下班早丨音视频工具

iOS 逆向工具:逆向做的好,码农下班早丨音视频工具

作者头像
关键帧
发布于 2022-06-13 04:32:22
发布于 2022-06-13 04:32:22
1.2K00
代码可运行
举报
文章被收录于专栏:关键帧Keyframe关键帧Keyframe
运行总次数:0
代码可运行

毕加索《有钱的人》像素版

App 逆向工程是做竞品分析的常用方法,常言道『逆向做的好,码农下班早』,懂的都懂。这里我们对 iOS 逆向做一下简单介绍,这里面会涉及如下工具:

  • Theos[1]:一款基于 Make 的构建系统,主要用于iOS 越狱软件开发,也支持为其他支持平台构建软件。
  • MonkeyDev[2]:一款非越狱插件开发集成神器。
  • FLEX[3] :一个探索和调试 iOS App UI 和堆栈的工具。
  • checkra1n[4]:一款基于 checkm8 漏洞的 iPhone 越狱工具。
  • frida-ios-dump[5]:一款 iOS App 砸壳工具。
  • usbmuxd[6]:一个套接字守护进程,可以用于多路复用来自和到 iOS 设备的连接。

1、非越狱 App 调试

1.1、环境配置

使用下列命令下载最新的 Theos

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo git clone --recursive https://github.com/theos/theos.git /opt/theos

1.2、安装 MonkeyDev

使用下列命令安装 MonkeyDev

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"

使用下列命令卸载 MonkeyDev:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-uninstall)"

使用下列命令更新 MonkeyDev:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-update)"

安装/更新之后需要重启下 Xcode 再新建项目。

MonkeyDev 主要包含四个模块:

  • Logos Tweak:使用 Theos 提供的 logify.pl 工具将 .xm文件转成 .mm 文件进行编译,集成了 CydiaSubstrate,可以使用 MSHookMessageEx 和 MSHookFunction 来 Hook OC 函数和指定地址。
  • CaptainHook Tweak:使用 CaptainHook 提供的头文件进行 OC 函数的 Hook 以及属性的获取。
  • Command-line Tool:可以直接创建运行于越狱设备的命令行工具
  • MonkeyApp:这是自动给第三方应用集成 Reveal、Cycript 和注入 dylib 的模块,支持调试 dylib 和第三方应用,支持 Pod 给第三放应用集成 SDK,只需要准备一个砸壳后的 ipa 或者 App 文件即可。

1.3、使用 MonkeyApp 调试 App

这里主要介绍一下使用 MonkeyApp 调试 App。

App Store 里的应用都是加密的,直接拿上来是无法调试的,所以在此之前一般会有一个砸壳的过程。砸壳需要在越狱的环境下进行的,如果没有越狱机器和环境,那可以在一些其他平台上下载已经砸壳后的 App。

1)在 Xcode 中创建一个 MonkeyApp:

image

2)把砸壳后的 ipa 文件拖到 TargetApp 目录下:

image

这时候就运行项目就可以开始调试 App 了。

3)为了更好的调试 App 我们可以集成 FLEX 来做一些辅助,这需要我们在项目下增加一个 Podfile 并 pod install 一下。

image

Podfile 的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
target 'MyAppTestDylib' do
 pod 'FLEX', '~> 2.0'
end

同时需要在项目的 MyAppTestDylib.m 的增加代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "MyAppTestDylib.h"
#import <CaptainHook/CaptainHook.h>
#import <UIKit/UIKit.h>
#import <Cycript/Cycript.h>
#import <MDCycriptManager.h>
#import <FLEX/FLEXManager.h> // 引入头文件。

CHConstructor{
    printf(INSERT_SUCCESS_WELCOME);
    
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
        
#ifndef __OPTIMIZE__
        CYListenServer(6666);

        MDCycriptManager* manager = [MDCycriptManager sharedInstance];
        [manager loadCycript:NO];

        NSError* error;
        NSString* result = [manager evaluateCycript:@"UIApp" error:&error];
        NSLog(@"result: %@", result);
        if(error.code != 0){
            NSLog(@"error: %@", error.localizedDescription);
        }
        
        [[FLEXManager sharedManager] showExplorer]; // 展示 FLEX 组件工具栏。
#endif
        
    }];
}

现在运行起来就可以看到 FLEX 工具栏了。

更多细节内容可以参考:MonkeyDev Wiki[7]

1.4、导出调试 App 的沙盒文件

通常我们会想要导出调试 App 的沙盒文件,这时候我们可以在 MonkeyApp 的 Info.plist 文件中添加 Application supports iTunes file sharing 并设置其为 YES

image

这样我们就可以在 Finder 里面选中设备,在 Files 里拷贝 App 的 Document 文件夹的文件了。

2、越狱

上面说到要调试 App 需要砸壳后的 ipa 文件,而砸壳需要在越狱环境下进行,所以这里继续介绍一下如何越狱。

这里使用的越狱工具是 checkra1n。下载地址见:checkra1n 下载[8]

越狱的过程,在下载安装工具后,照着工具的提示一步一步照做就行了。

3、砸壳

最早的砸壳工具是 dumpdecrypted[9],其原理是让 App 预先加载一个解密的 dumpdecrypted.dylib,然后在程序运行后将代码动态解密,最后在内存中 dump 出来整个程序。这种砸壳只能砸主 App 可执行文件。

对于应用程序里面存在 framework 的情况可以使用 conradev 的 dumpdecrypted,通过 _dyld_register_func_for_add_image 注册回调对每个模块进行 dump 解密。但是这种还是需要拷贝 dumpdecrypted.dylib,然后找路径什么的,还是挺麻烦的。

下面要介绍的是 frida-ios-dump,该工具基于 frida 提供的强大功能通过注入 js 实现内存 dump 然后通过 python 自动拷贝到电脑生成 ipa 文件,通过以下方式配置完成之后实现一条命令砸壳。

3.1、环境配置

首先要在手机和 Mac 电脑上面安装 frida,安装方式参考官网的文档:frida home[10]

1)手机端安装 frida:

  • 手机越狱之后,Cydia → 软件源 → 编辑 → 添加源(build.frida.re)
  • 进入 build.frida.re 源下载 Frida。

2)Mac 端安装 frida:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo pip install frida

3)Mac 端安装 frida-ios-dump:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ git clone https://github.com/AloneMonkey/frida-ios-dump.git
$ cd frida-ios-dump
$ sudo pip install -r requirements.txt --upgrade

这个安装过程可能会遇到一些依赖包版本不对的问题,可以按照提示安装符合要求的版本。

3.2、连接手机

首先安装一下 usbmuxd,会自带一个 iproxy 的工具,我们用它来进行端口映射:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew install usbmuxd
$ iproxy 2222 22
Creating listening port 2222 for device port 22
waiting for connection
New connection for 2222->22, fd = 5
waiting for connection

在我们的越狱手机上安装好 OpenSSH,然后在 Mac 上我们新开一个终端窗口,然后登陆到手机上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ssh -p 2222 root@127.0.0.1 
// password:alpine // 这个密码参照越狱设备上 OpenSSH 的访问教程。

到此环境就配置好了,接下来就可以一键砸壳了。

3.3、一键砸壳

最简单的方式直接使用 ./dump + 应用显示的名字 即可,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd frida-ios-dump
$ ./dump.py XXX
open target app......
Waiting for the application to open......
start dump target app......
start dump /var/containers/Bundle/Application/6665AA28-68CC-4845-8610-7010E96061C6/XXX.app/XXX
XXX                                        100%   68MB  11.4MB/s   00:05
start dump /private/var/containers/Bundle/Application/6665AA28-68CC-4845-8610-7010E96061C6/XXX.app/Frameworks/WCDB.framework/WCDB
WCDB                                          100% 2555KB  11.0MB/s   00:00
start dump /private/var/containers/Bundle/Application/6665AA28-68CC-4845-8610-7010E96061C6/XXX.app/Frameworks/MMCommon.framework/MMCommon
MMCommon                                      100%  979KB  10.6MB/s   00:00
start dump /private/var/containers/Bundle/Application/6665AA28-68CC-4845-8610-7010E96061C6/XXX.app/Frameworks/MultiMedia.framework/MultiMedia
MultiMedia                                    100% 6801KB  11.1MB/s   00:00
start dump /private/var/containers/Bundle/Application/6665AA28-68CC-4845-8610-7010E96061C6/XXX.app/Frameworks/mars.framework/mars
mars                                          100% 7462KB  11.1MB/s   00:00
AppIcon60x60@2x.png                           100% 2253   230.9KB/s   00:00
AppIcon60x60@3x.png                           100% 4334   834.8KB/s   00:00
AppIcon76x76@2x~ipad.png                      100% 2659   620.6KB/s   00:00
AppIcon76x76~ipad.png                         100% 1523   358.0KB/s   00:00
AppIcon83.5x83.5@2x~ipad.png                  100% 2725   568.9KB/s   00:00
Assets.car                                    100%   10MB  11.1MB/s   00:00
.......
AppIntentVocabulary.plist                     100%  197    52.9KB/s   00:00
AppIntentVocabulary.plist                     100%  167    43.9KB/s   00:00
AppIntentVocabulary.plist                     100%  187    50.2KB/s   00:00
InfoPlist.strings                             100% 1720   416.4KB/s   00:00
TipsPressTalk@2x.png                          100%   14KB   2.2MB/s   00:00
mm.strings                                    100%  404KB  10.2MB/s   00:00
network_setting.html                          100% 1695   450.4KB/s   00:00
InfoPlist.strings                             100% 1822   454.1KB/s   00:00
mm.strings                                    100%  409KB  10.2MB/s   00:00
network_setting.html                          100% 1819   477.5KB/s   00:00
InfoPlist.strings                             100% 1814   466.8KB/s   00:00
mm.strings                                    100%  409KB  10.3MB/s   00:00
network_setting.html                          100% 1819   404.9KB/s   00:00

如果存在应用名称重复了怎么办呢?没关系首先使用如下命令查看安装的应用的名字和 bundle id:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ./dump.py -l
  PID  Name                       Identifier
-----  -------------------------  ----------------------------------------
 9661  App Store                  com.apple.AppStore
16977  Moment                     com.kevinholesh.Moment
 1311  Safari                     com.apple.mobilesafari
16586  信息                         com.apple.MobileSMS
 4147  XXX                         com.XXX.YYY
10048  相机                         com.apple.camera
 7567  设置                         com.apple.Preferences
    -  CrashReporter              crash-reporter
    -  Cydia                      com.saurik.Cydia
    -  通讯录                        com.apple.MobileAddressBook
    -  邮件                         com.apple.mobilemail
    -  音乐                         com.apple.Music
    ......

然后使用如下命令对指定的 bundle id 应用进行砸壳即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ./dump.py -b com.XXX.YYY

等待自动砸壳传输完成之后便会到当前目录生成一个解密后的 ipa 文件。

更多的细节你还可以参考:一条命令完成砸壳[11]

参考资料

[1]Theos: https://github.com/theos/theos

[2]MonkeyDev: https://github.com/AloneMonkey/MonkeyDev

[3]FLEX: https://github.com/Flipboard/FLEX

[4]checkra1n: https://checkra.in/

[5]frida-ios-dump: https://github.com/AloneMonkey/frida-ios-dump

[6]usbmuxd: https://github.com/libimobiledevice/usbmuxd

[7]MonkeyDev Wiki: https://github.com/AloneMonkey/MonkeyDev/wiki

[8]checkra1n 下载: https://checkra.in/releases/0.12.4-beta#all-downloads

[9]dumpdecrypted: https://github.com/stefanesser/dumpdecrypted

[10]frida home: https://www.frida.re/docs/home/

[11]一条命令完成砸壳: http://www.alonemonkey.com/2018/01/30/frida-ios-dump/

- 完 -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 关键帧Keyframe 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ios重签名教程
我们遇到android app现在加固限制可能有很高的分析难度,不容易进行抓包,我们可以用ios的包脱壳然后进行分析会相对容易些,这篇文章主要讲了如何给ios设备越狱、给ios应用程序脱壳重签名,脱壳之后就可以进行分析代码、修改代码重签名之后可以在安装到设备上。
tea9
2022/07/16
1.5K0
ios重签名教程
iOS逆向之app脱壳
iOS端App在上线之前会有苹果商店进行FairPlayDRM数字版权加密保护,我们称之为“加壳”。要对App Store分发的iOS App进行分析,我们需要先对App进行解密,我们称之为“脱壳”,有些人也称为“砸壳”。脱壳之后的二进制文件就是原始的、未加密的二进制文件。
VV木公子
2020/12/22
12.9K0
iOS逆向之app脱壳
iPhone手机越狱-逆向砸壳-代码注入
目前13以上系统还没有完美越狱的方案,可以临时使用checkra1n方案对手机进行越狱:
周希
2020/10/19
2.1K0
iPhone手机越狱-逆向砸壳-代码注入
ios逆向-frida&环境&破解appSign算法
比WIFI响应速度快,网络环境无限制 usbmuxd是网上开源社区,貌似是国外牛人倾力打造的一个专门针对该功能开源库 通过brew来安装brew install usbmuxdusbmuxd 自带工具iproxy,iproxy 可以快捷的操作连接iPhone等操作。由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。iproxy 2222 22以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的1215端口,那么想和设备22端口通信,直接和本地的1215端口通信就可以了。终端提示 waiting for connection ,表示这两个端口之间已经可以通信了,保留当前终端(如果关闭就停止端口之间的通信了),新建另一个终端输入,默认密码:alpinessh -p 2222 root@127.0.0.1
吾爱小白
2020/12/02
4.4K0
ios逆向-frida&环境&破解appSign算法
ios逆向工具MonkeyDev简介
MonkeyDev简介 虽然是米国的苹果开发的的的我操作系统系统,但是要论越狱iPhone和逆向分析来说,那国内远胜于米国了,可能是国内很多相关的灰色产业链吧。在之前,我们想动态调试一个没有源码的应用程序,通常是要借助于THEOS,自己操作LLVM来动态连接到应用程序,然后再使用LLVM的调试命令,整个的过程是非常耗时和繁琐的。 不过在17年的时候,iOS逆向后起之秀AloneMonkey对这些常用的工具进行了一些整合,弄了一个极为方便的逆向调试平台MonkeyDev,这个平台集成了常用的库,工具,并且还可
xiangzhihong
2018/04/02
2.5K0
逆向开发从零到整(dumpdecrypted砸壳)
https://github.com/stefanesser/dumpdecrypted
CC老师
2019/01/23
1.3K0
iOS逆向工具之Cydia(iOS)软件介绍
我之前的工具介绍中,也有OpenSSH的介绍. 文章地址: 汇编逆向工具集(二) --> OpenSSH
conanma
2021/11/04
1.3K0
IOS脱壳+反编译
拷贝 dumpdecrypted.dylib 这个之前编译签名好的文件到iPhone 上面该 APP 的 Documents 目录有两种方法.
小小咸鱼YwY
2022/05/09
2.3K0
iOS逆向工程工具集
本篇文章是我在学习逆向工程时整理的逆向工程工具集 只作为记录使用 并不是详细的教程 阅读本篇教程需要你有一定逆向工程知识
100001509164
2022/01/20
1K0
iOS安全测试—dumpdecrypted脱壳
我们日常开发提交给Appstore发布的App都经过官方保护加密,这样可以保证机器上跑的应用是经过苹果审核过的,也可以管理软件授权。经过App Store加密的应用,我们无法通进行反编译静态分析,在逆向分析过程中需要对加密的二进制文件进行解密才可以进行静态分析,这一过程就是所谓的脱壳(砸壳)。
清风穆云
2021/08/09
1.7K0
iOS逆向 【砸壳】之利用dumpdecrypted进行app脱壳
先用dumpdecrypted工具先对加过密的ipa包进行砸壳,然后再用class-dump工具去导出它的头文件。
公众号iOS逆向
2021/03/24
2.6K0
iOS逆向 【砸壳】之利用dumpdecrypted进行app脱壳
移动App入侵与逆向破解技术-iOS篇
如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理 介绍入侵常用的工具和方法,包括pc端和手机端 讲解黑客技术中的静态分析和动态分析法 通过一个简单的实例,来介绍如何综合运用砸壳、寻找注入点、lldb远程调试、追踪、反汇编技术来进行黑客实战 讲解越狱破解补丁和不需越狱的破解补丁制作方法和差别 ---- 黑客的素养 敏锐的嗅觉 有时候通过一个函数名,一个类名,就能大
腾讯Bugly
2018/03/23
6.1K0
移动App入侵与逆向破解技术-iOS篇
iOS逆向(8)-Monkey、Logos
https://juejin.im/post/5cc0983a6fb9a031ed20bd1d”
iOSSir
2019/06/14
1.9K0
iOS逆向(8)-Monkey、Logos
从微信扔骰子看iOS应用安全与逆向分析
在之前《免越狱调试与分析黑盒iOS应用》以及前几篇文章中已经介绍了如何开始分析iOS应用,不过都是基于非越狱的机器,其本意是为了能够在自己的主力设备中进行简单的分析和调试。但是执着于免越狱其实在很多情况下需要额外的工作,如果想要在iOS上做进一步研究的话,完全的访问权限是很有必要的。
evilpan
2023/02/12
2K0
从微信扔骰子看iOS应用安全与逆向分析
免越狱调试与分析黑盒iOS应用
上篇文章我们从开发者的角度介绍了如何建立iOS项目并且在真机上运行, 上上篇文章则介绍了Objective-C的基本概念和用法。而这一切,都是为了这次的铺垫。 今天,我们就要从攻击者的角度,尝试对黑盒iOS应用进行调试与动态跟踪(instrument)。
evilpan
2023/02/12
2K0
手把手教你制作一款iOS越狱App,伪装微信位置
本文是我个人在对逆向工程强烈的兴趣驱使下,拜读《iOS应用逆向工程》,所实现的一个好玩的功能,与大家分享,也是对自己学习的一个简单总结。BTW iOS逆向论坛 iOSRe 是一个很好的iOS逆向交流社区。
全栈程序员站长
2022/09/03
2.9K0
手把手教你制作一款iOS越狱App,伪装微信位置
iOS应用构建与部署小结
上篇文章介绍了Objective-C的基本概念,本文就来接着看如何创建我们的第一个简单iOS应用, 本着简单可复现的方式,我们会以尽可能小的成本来构建并在真机运行iOS应用。 也就是说, 不用越狱, 也无需开发者账号。当然,一台iPhone手机还是需要的,最好还有一台Mac。
evilpan
2023/02/12
2.1K0
iOS应用构建与部署小结
【Dev Club分享】iOS黑客技术大揭秘
Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师。每周都会举行嘉宾分享,话题讨论等活动。 本期,我们邀请了腾讯 CDG iOS 开发工程师“何兆林”为大家分享《iOS黑客技术大揭秘》。 分享内容简介: 在黑客的世界里,没有坚不可破的防护系统,也没有无往不胜、所向披靡的入侵利器,有时候看似简单的问题,破解起来也许花上好几天、好几个月,有时候看似很 low 的工具往往能解决大问题;我们以实现微信自动抢红包为引子,逐步展开 iOS 黑客入侵常用的几种武器,并
腾讯Bugly
2018/03/23
2.2K0
【Dev Club分享】iOS黑客技术大揭秘
iOS逆向之【Anti ptrace】去掉ptrace反调试保护进行lldb调试的方案(内含demo)
Ptrace 提供了一种父进程可以控制子进程运行的机制,并可以检查和改变它的核心image。
公众号iOS逆向
2021/03/24
2.5K0
iOS逆向之【Anti ptrace】去掉ptrace反调试保护进行lldb调试的方案(内含demo)
iOS逆向(10)-越狱!越狱!远程连接登录手机
之前的九篇文章讲述的是在不越狱的情况下,详细的讲解了对APP重签名的原理,如何动态库注入,以及之后的各种调试技巧。这些功能其实已经很强大了,能够帮助咱们在绝大多数情况下去分析并且更改对方的APP了。这对付一些在开发过程中没有安全意识的APP其实已经足以。但是但凡对方有对APP进行防护,那么重签名就显得有些弱鸡了。
iOSSir
2019/06/14
2.2K0
iOS逆向(10)-越狱!越狱!远程连接登录手机
相关推荐
ios重签名教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验