IOS逆向初探

news/2024/5/6 16:58:49/文章来源:https://blog.csdn.net/qq_45414878/article/details/128014167

前言

这些文章用于记录学习路上的点点滴滴,也希望能给到刚入门的小伙伴们一点帮助。爱而所向,不负所心。

环境

iphone 6

MacOS Monterey 12.3.1

一、IOS开发语言

Objective-C

Objective-C是iOS操作系统运用的软件开发语言。Objective-C的流行完全是因为iphone的成功。Objective-C是OS 系统的开发语言,是面向对象的编程语言,它是C语言的扩展语言,也是基于C语言的升级语言。

Swift

Swift是苹果在2014年推出的全新开发语言,可以在iOS和Mac 操作系统上与Objective-C一起运行。Swift的本质是Objective-C,它采用了Objective-C的命名参数和动态对象模型,但它结合了C和Objective-C的优点,大大降低了开发iOS的门槛。

二、ipa目录结构

查看ipa文件(以douyu为例),太长了只列举一部分

image-20220729172321689

解压后会生成一个Payload文件夹,里面会有一个.app文件,在IOS里面是应用文件:

Bundle是一个含有可执行的代码及代码所需资源,以特定标准的层次结构组合起来的文件夹。Bundle的内部结构:

  • Info.plist :存储应用的相关配置、Bundle identifier 和 Executable file 可执行文件名(类似于android的AndroidManifest.xml)

  • Frameworks:当前应用使用的三方 Framework 或 Swift 动态库

  • 资源:其他文件,包括图片资源、配置文件、视频/音频,以及一些与本地化相关的文件

  • _CodeSignature文件夹:ipa包签名文件的存放文件夹

  • Assets.car:Assets.xcassts在编译过程中生成的最终展示文件,默认里面存放各种分辨率图片(测试项目未使用)

  • embedded.mobileprovision:证书配置文件

  • Plugins:App创建的扩展,比如Widget、Push和Share等

  • .Iproj:App所支持的语言文件

  • exec文件:可执行文件,例如widgetExtension

  • 图片资源:.png,.jpg,.webp,.gif

  • 其它资源文件

    .xml,.json

    .plist:项目中使用资源的.plist文件

    .conf:相关的配置文件

    .cer,.der,.p12:钥匙串文件

    .wav:音频文件

    .js,.html

    .nib:Xcode自带的数据文件,包含一个窗口程序和应用程序委托对象

    .sqlite:数据库文件

    .txt:文本文件

    .mom:Xcode创建的数据模型文件

三、安全机制

1、更小的受攻击面

受攻击面:受攻击面是指处理攻击者所提供输入的代码。

就算苹果公司的某些代码中存在漏洞,如果攻击者没法接触这些代码,或者苹果公司根本不会在iOS中包含这些代码,那么攻击者就没法针对这些漏洞开展攻击。因此,关键的做法就是尽可能降低攻击者可以访问(尤其是可以远程访问)的代码量。

例如,iOS不支持Java跟Flsah,不能处理.psd文件。苹果公司自有的.mov格式也只被iOS部分支持,因此很多可以在Mac OS X上播放的.mov文件在iOS上无法播放。虽然iOS原生支持.pdf文件,但只是解析该文件格式的部分特性。

瑕疵越少,攻击者发动漏洞攻击的机会就越小。

2、精简的操作系统

除了减少可能被攻击者利用的代码,苹果公司还精简掉了若干应用,以防为攻击者在进行漏洞攻击时和得手之后提供便利。

例如:iOS设备上没有shell(/bin/sh);

3、权限分离

iOS使用用户、组和其他传统UNIX文件权限机制分离了各进程;

例如:用户可以直接访问的很多应用,比如Web浏览器、邮件客户端或第三方应用,就是以用户mobile的身份运行的。而多数重要的系统进程则是以特权用户root的身份运行的。其他系统进程则以诸如_wireless和_mdnsresponder这样的用户运行。利用这一模型,那些完全控制了Web浏览器这类进程的攻击者执行的代码会被限制为以用户mobile的身份运行。

来自App Store的应用其行为会受到限制,因为它们也是以用户mobile的身份执行的。

4、代码签名机制

所有的二进制文件(binary)和类库在被内核允许执行之前都必须经过受信任机构(比如苹果公司)的签名。此外,内存中只有那些来自已签名来源的页才会被执行。这意味着应用无法动态地改变行为或完成自身升级。这样做都是为了防止用户从因特网上下载和执行随机的文件。所有的应用都必须从苹果的App Store下载(除非对设备进行配置,使其接受其他的源)。

5、DEP

DEP: Data Execution Prevention,数据执行保护;

处理器能区分哪部分内存是可执行代码以及哪部分内存是数据。DEP不允许数据的执行,只允许代码执行。

当漏洞攻击试图运行有效载荷时,它会将有效载荷注入进程并执行该有效载荷。DEP会让这种攻击行不通,因为有效载荷会被识别为数据而非代码。

iOS中代码签名机制的作用原理与DEP相似。

6、ASLP

ASLP: Address Space Layout Randomization,地址空间布局随机化。

在iOS中,二进制文件、库文件、动态链接文件、栈和堆内存地址的位置全部是随机的。当系统同时具有DEP和ASLR机制时,针对该系统编写漏洞攻击代码的一般方法就完全无效了。在实际应用中,这通常意味着攻击者需要两个漏洞,一个用来获取代码执行权,另一个用来获取内存地址以执行ROP,不然攻击者就需要一个极其特殊的漏洞来做到这两点。

7、沙盒机制

iOS防御机制的最后一环是沙盒。与之前提到的UNIX权限系统相比,沙盒可以对进程可执行的行动提供更细粒度的控制。

例如:MS应用和Web浏览器都是以用户mobile的身份运行的,但它们执行的动作差别很大。SMS应用可能不需要访问Web浏览器的cookie,而Web浏览器不需要访问短信。而来自App Store的第三方应用不应该具有cookie和短信的访问权。

首先,它限制了恶意软件对设备造成的破坏。想象一下,就算恶意软件侥幸通过了App Store的审查流程,被下载到设备上并开始执行,该应用还是会被沙盒规则所限制。它可能会窃取设备上所有的照片和地址簿信息,但它没办法执行发短信或打电话等会直接使用话费的操作。沙盒还让漏洞攻击变得更困难。就算攻击者在减小的受攻击面上找到了漏洞,并绕过ASLR和DEP执行了代码,有效载荷也还是会被限制在沙盒里可访问的内容中。总而言之,所有这些保护机制虽然不能说会完全杜绝恶意软件和漏洞攻击,但也大大加大了攻击的难度。

四、连接IOS

Android是用adb连接PC客户端的,而IOS是使用ssh连接客户端的,并且IOS在越狱状态下root密码默认为 alpine。

OpenSSH

在同一 局域网下可以直接使用OpenSSH(在Cydia中搜索OpenSSH安装)对iPhone进行ssh连接。

ssh root@iPhoneip  #密码:alpine

usbmuxd

将iPhone和mac使用USB连接,使用usbmuxd在mac上进行端口转发,ssh本地ip+映射端口

brew install usbmuxd        #安装
iproxy 1233 22              #将iPhone的22端口映射到mac本地的1234端口
ssh -p 1234 root@127.0.0.1  #ssh连接iPhone

应用的一般安装位置位于:

/private/var/containers/Bundle/Application
/private/var/mobile/Containers/Bundle/Application/
/private/var/mobile/Containers/Data/Application/

五、加壳脱壳

加壳

应用在上传App Store时,App Store会对应用进行加壳操作。

原理:利用特殊的算法,对可执行文件的编码进行改变,比如压缩、加密,以达到保护程序代码的目的。

image-20220801111147379

image-20220801111238857

加壳后的可执行文件不能直接运行,而壳程序能被ldyd文件识别运行后,最后将机密文件进行解密并运行

脱壳

检查

脱壳主要分为两种:
硬脱壳:在电脑上直接进行解密操作,下面提到的两种脱壳方式都是硬脱壳(Clutch、dumpdecrypted);
动态脱壳:在app运行在手机中后,手机会自动将app进行解密操作,再解密操作完成后,将解密后的app导入到自己的电脑上,得到的就是脱壳后的app;

image-20220801111428376

查看可执行文件是否加壳,解压ipa文件,提取Payload中的可执行文件,以斗鱼IOS测试版为例(还未上架App Store)

otool -l DYZB| grep crypt   

cryptid为0,则为脱壳后的应用
cryptid为1,则为未脱壳的应用

image-20220801141507459

接下来以在App Store中上架的生产版的斗鱼为例,app的目录应为 /private/var/containers/Bundle/Application

但是应用的文件名都被加密了,在文件众多的情况下建议使用find命令查找对应的.app文件夹

image-20220801141924982

找到对应的.app文件夹后使用scp将iPhone上的可执行文件复制到mac上,使用otool工具查看,发现已经加壳。

如果出现cryptid字段值为1.则代表加壳了,0就代表为加壳这里是由于该app有两种架构,所以出现的结果有两个。

scp -P 1234 root@127.0.0.1:/private/var/containers/Bundle/Application/BD7D4648-8361-4FBE-A6F5-96271200AECF/DYZB.app/DYZB .

image-20220801142345256

Clutch

github下载 :https://github.com/KJCracks/Clutch/releases

scp -P 1234 Clutch root@127.0.0.1:/usr/bin/   #复制到手机上
chmod +x Clutch    #赋予执行权限
Clutch -i        #列举未脱壳程序
Clutch -d 1      #对顺序为1的程序进行脱壳,即斗鱼

image-20220801143901431

执行脱壳操作后将DYZB可执行文件复制到mac本地继续检测是否完成脱壳

emmm,事情永远没有那么顺利,不出意外还是出了意外,脱壳失败。查看了网上大佬的一些文章,发现Clutch并不能将所有加壳app进行脱壳

image-20220801152341204

image-20220801152429600

经过测试了几个app之后发现某团外卖可以脱壳,没能脱壳的原因暂未清楚,继续学习。。。

image-20220801163110801

image-20220801163126090

Dumpdecrypted

github下载 :https://github.com/stefanesser/dumpdecrypted/ #需要自己手动编译

github下载 :https://github.com/we11cheng/WCdumpdecrypted #已经编译完成 ,若一脱壳失败可选择次项目

make    #.c目录下执行编译
scp -P 1234 dumpdecrypted.dylib root@127.0.0.1:/var/root    #复制到手机的/var/root目录下
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径      #执行脱壳操作#一般这里会报各种错,解决方案
https://www.jianshu.com/p/843c4b2d118f、https://blog.csdn.net/beizishaizi/article/details/125897113
笔者使用自己编译的文件进行脱壳失败了,应该是xcode sdk版本和ios不一致导致,使用项目二成功脱壳一家arm64架构,armv7的失败

笔者失败报错提示:

image-20220802105335495

脱壳成功提示,当前目录下会生成一个decrypted文件,就是脱完壳的可执行文件,只成功脱了arm64架构的壳,至于armv7也可能是编译的脱壳工具的问题,后续有待考究。

image-20220802105504988

image-20220802105833475

frida-ios-dump

github下载 :https://github.com/AloneMonkey/frida-ios-dump

mac虚拟机环境问题装了一下午的frida都失败了,最后安装anaconda新建了虚拟环境才成功安装(anaconda真香,谁用谁知道)

pip install -r requirements.txt   #安装依赖库
iproxy 2222 22        #端口转发
frida-ps -U           #列出手机的进程和对应的app
sudo python dump.py 斗鱼    #运行app执行脱壳操作,一定要使用root权限进行操作,否则会卡住不动

脱壳成功会生成新的ipa应用文件,使用otool命令查看显示已经脱壳,目前主流方式也是利用frida-ios-dump进行脱壳

image-20220802181957789

image-20220802182450723

六、反编译

class-dump

github下载:https://github.com/AloneMonkey/MonkeyDev/blob/master/bin/class-dump

class-dump,顾名思义,就是用来dump目标对象 的class信息的工具。它利用Objective-C语言的runtime 特性,将存储在Mach-O文件中的头文件信息提取出 来,并生成对应的.h文件。

使用命令:

-H 反编译的app

-o 反编译得到的.h文件存放目录

/Users/douyu/Downloads/class-dump  -H /Users/douyu/Desktop/DYZB  -o /Users/douyu/Desktop/douyu   

image-20220729180820013

image-20220729180933376

只能看到一些函数声明,看不到函数内容,函数具体实现代码存在.m文件中。很久之前能反编译出.m,后因激起群愤,就只能反编译出.h。

加壳的可执行文件dump不出.h头文件,但是可以使用IDA、Ghidra等工具反汇编查看伪c代码分析。

七、反汇编

IDA

因某些不可抗因素后续补充

Ghidra

github下载:https://github.com/NationalSecurityAgency/ghidra/releases

打开Ghidra加载可执行文件,选择第三个,架构随便选一个

image-20220803110252599

image-20220803110315772

image-20220803110349821

等待软件加载,加载结束后便会出现相应的汇编代码和伪c代码,剩下的就是根据需要分析伪c代码了。

image-20220803110059198

八、IOS HOOK

MonkeyDev

安装和导入项目网上都有教程,不做演示(遇见的坑太多了)

因为环境和虚拟机太卡的缘故没能顺利进行hook,后续补充

Frida

后续补充

关于hook的部分后续会通过靶场的形式来演示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_224900.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter高仿微信-第21篇-支付-向商家付款(二维码)

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.…

【Hack The Box】Linux练习-- Knife

HTB 学习笔记 【Hack The Box】Linux练习-- Knife 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月17日🌴 &#x1f36…

【计算机网络】Servlet API重点知识汇总

目录 1.HttpServlet: 2.HttpServletRequest: 3.HttpServletRequest代码实例: 3.1.打印请求的内容: 3.2.获取请求中的重要参数 (query string中的值): 3.3.获取请求中的重要参数 &#x…

用HTML+CSS仿网易云音乐网站(6个页面)_实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

【安装教程】vscode安装教程(超详细)

Visual Studio Code(简称 VSCode)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和 Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以…

SpringBoot SpringBoot 开发实用篇 6 监控 6.5 health 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.5 health 端点指标控制6.5.1 问题引入6.5.2 health 端点指标…

还有人以为高并发=多线程吗?跟着大佬带你了解二者关系与区别,面试难题轻松拿下!

高并发和多线程的关系 “高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则高并发≠多线程 多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。 高并发是一种系统运…

Android 10.0 11.0 12.0 启动模拟器教程

Android 10.0 11.0 12.0 启动模拟器教程 一、android 12.0 模拟器二、创建模拟器设备三、创建删除路经文件夹avd和配置环境变量四、启动模拟器一、android 12.0 模拟器 Android 10.0 11.0 12.0 启动模拟器都行,我选择android 12.0 模拟器 二、创建模拟器设备 第一步骤:在 …

推荐一个基于Springboot + Vue 开发的前后端分离博客

基于Springboot Vue 开发的前后端分离博客 博客介绍 本博客是参考 [风丶宇] 大佬的博客更新而成,感谢大佬提供的页面,然后定制新增部分功能,是个非常值得新手入门学习的Java规范化编程案例! 在线地址 项目链接: h…

JVM 中类加载的链接与初始化

类加载系统,主要有以下部分 加载链接 验证准备解析初始化 它们每部分都做些什么事情呢? 加载 (2条消息) JVM 双亲委派模型_兜兜转转m的博客-CSDN博客 链接 链接-验证 一般验证部分,IDEA已经帮我们规范了。 验证是连接阶段的第一步&…

数据结构和常用排序算法复杂度

1.顺序表 插入操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数n/2 删除操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n-1)/2 按值查找时间复杂度 最好O(1),最坏O(n),平…

JVM垃圾回收——CMS垃圾收集器

目录 一、什么是CMS垃圾收集器 二、CMS垃圾收集的过程 三、CMS收集器的不足 四、CMS收集器的参数配置 一、什么是CMS垃圾收集器 虽然HotSpot虚拟机已经在jdk14中移除了CMS垃圾收集的参数,但是考虑到还有很多开发是基于jdk8开发的,所以还是有必要了解…

数据结构-难点突破(C++实现并查集+路径优化,详解哈夫曼编码树)

文章目录1. 并查集2. 哈夫曼编码树1. 并查集 并查集是一个多棵树的集合(森林)。 并查集由多个集合构成,每一个集合就是一颗树。 并:合并多个集合。查:判断两个值是否再一个集合中。 每棵树存在数组中,使…

集世界杯+GameFi元素的MetaElfLand,为何将在世界杯期间爆发?

又到了四年一度的球迷狂欢节,本次卡塔尔世界杯已于11月21号举行。 每当世界杯来临,与世界杯相关产业都会迎来一波爆发,毕竟这个千亿美金市值的市场暗藏着无数的机会。而自GameFi的火热开始,世界杯也成为了加密投资者的狂欢日&…

pytorch的buffer学习整理

pytorch模型中的buffer 这段时间忙于做项目,但是在项目中一直在模型构建中遇到buffer数据,所以花点时间整理下模型中的parameter和buffer数据的区别💕 1.torch.nn.Module.named_buffers(prefix‘‘, recurseTrue) 贴上pytorch官网对其的说…

分布式文件系统HDFS实践及原理详解part3

HDFS原理 说明:3.5开头目录是因为和上篇文章内容同属一章,所以开头使用了3.5 3.5 HDFS核心设计 3.5.1 心跳机制 1、 Hadoop 是 Master/Slave 结构,Master 中有 NameNode 和 ResourceManager,Slave 中有 Datanode 和 NodeManag…

异构网络小入

A Survey of Heterogeneous Information Network Analysis Heterogeneous Graph Attention Network 异构网络很火吗? 在一个网络中,不用节点的类型不同,这是肯定的。 所以,异构网络在表征比较复杂的情形时,是比较合适…

基于图像识别的小车智能寻迹控制系统

目录 摘要…… I Abstract II 基于图像识别的智能寻迹控制系统设计 I Design of Intelligent tracking Control system based on Image recognition II 目录 III 第1章 绪论 1 1.1 课题背景 1 1.1 国内外文献综述 1 1.2 论文研究内容 2 第2章 基于图像识别的智能寻迹控制系统方…

【安装Ubuntu18.04遇到的问题】未找到WIFI适配器

大家好,我是小政。好久没有更新文章,近期开始陆续分享一些研究生阶段正在学习的知识和遇到的一些问题。 联想拯救者Y9000P关于安装Ubuntu未找到WIFI适配器的解决方法1.Ubuntu18.042.网卡信息3.解决方法(1)用手机USB连接电脑提供网…

动态规划--树型dp

6个题1. 树的最长路径2.树的中点.由于第三题需要用到一些数学地知识,所以先去补一补数学知识。连接链接在这里4.二叉苹果树5.战略游戏6.皇宫守卫1. 树的最长路径 定义:树中两个点直接的最远距离称为树的直径 先说一个结论 先任意找到一个树中一个点u&am…