移动互联网技术分享

ios逆向查看视图层级

2021-01-29  本文已影响0人  sunney0

参考:https://xiaozhuanlan.com/topic/7193845260

从越狱、提取iPA档敲壳到UI分析注入及反编译的探索过程

关于安全

之前唯一做过跟安全有关的就只有 使用中间人攻击嗅探传输资料;假设我们在资料传输前编码加密、接受时 APP 内解密,用以防止中间人嗅探;那还有可能被偷走资料吗?

答案是肯定的!,就算没真的试验过;世界上没有破不了的系统,只有时间成本的问题,当破解耗费的时间精力大于破解成果,那就可以称为是安全的!

How?

都做到这样了,那还能怎么破?就是本篇想记录的议题 — 「逆向工程 」,敲开你的 APP 研究你是怎么做加解密的;其实一直以来对这个领域都是懵懵懂懂,只在 iPlayground 2019 上听过两堂大大的分享,大概知道原理还有怎么实现,最近刚好有机会玩了一下跟大家分享!

逆了向,能干嘛?

实现环境

macOS 版本:10.15.3 Catalina
iOS 版本:iPhone 6 (iOS 12.4.4 / 已越狱) *必要
Cydia: Open SSH

越狱的部分

任何版本的 iOS、iPhone 都可以,只要是能越狱的设备,建议使用旧的手机或是开发机,以避免不必要的风险;可根据自己的手机、iOS 版本参考疯先生越狱教学,必要时需要将 iOS 降版认证状态查询)再越狱。

我是拿之前的旧手机 iPhone 6 来测试,原本已经升到 iOS 12.4.5 了,但发现 12.4.5 一直越狱不成功,所幸先降回 12.4.4 然后使用 checkra1n 越狱就成功了!

步骤不多,也不难;只是需要时间等待!

附上一个自己犯蠢的经验:下载完旧版 IPSW 档案后,手机接上 Mac ,直接使用 Finder 档案浏览器(macOS 10.5 后就没有 iTunes 了),在左方 Locations 选择手机,出现手机资讯画面后,「Option」按着然后再点「Restore iPhone」就能跳出 IPSW 档案选择视窗,选择刚下载下来的旧版 IPSW 档案就能完成刷机降版。

image

我本来傻傻的直接按 Restore iPhone…只会浪费时间重刷一次最新版而已….

使用 lookin 工具查看别人的 APP UI 排版

我们先来点有趣的前菜,使用工具搭配越狱手机查看别人APP 是怎么排版。

查看工具: 一是 老牌 Reveal (功能更完整,需付费约 $60 美金/可试用),二是腾讯 QMUI Team 制作的 lookin 免费开源工具;这边使用 lookin 作为示范,Reveal 大同小异。

若没有越狱手机也没关系,此工具主要是让你用在开发中的专案上,查看 Debug 排版(取代 Xcode 阳春的 inspector)平常开发也能用到唯有要看别人的 APP 需要使用越狱手机。

如果要看自己的专案…

可以选择使用 CocoaPods 安装、断点插入(仅支援模拟器)、手动导入Framework 到专案手动设置,四种方法。

将专案 Build + Run 起来之后,就能在 Lookin 工具上选择 APP 画面 -> 查看排版结构

image

如果要看别人的APP…

image

Step 1. 在越狱手机上打开「Cydia」-> 搜寻「LookinLoader」->「安装」-> 回到手机「设定」->「Lookin」->「Enabled Applications」-> 启用想要查看的 APP

Step 2. 使用传输线将手机连接至 Mac 电脑 -> 打开想要查看的APP -> 回到电脑,在 Lookin 工具上选择 APP 画面 -> ****即可****查看排版结构**。

Lookin 查看排版结构

Facebook 登入画面排版结构

可在左侧栏检视 View Hierarchy、右侧栏对选中的物件进行动态修改。

原本的「建立新帐号」被我改成「哈哈哈」

对物件的修改也会实时的显示在手机 APP 上,如上图。

就如同网页的「F12」开发者工具,所有的修改仅对 View 有效,不会影响实际的资料;主要是拿来 Debug ,当然也可以用来改值、截图,然后骗朋友 XD

使用 Reveal 工具查看 APP UI 排版结构

image

虽然 Reveal 需要付费才能使用,但个人还是比较喜欢 Reveal;在结构显示上资讯更详细、右方资讯栏位几乎等同于 XCode 开发环境,想做什么即时调整都可以,另外也会提示 Constraint Error 对于 UI 排版修正非常有帮助!

这两个工具在日常开发自己的 APP 上都非常有帮助!

*了解完流程环境及有趣的部分之后,就让我们进入正题吧!
**以下开始都需要越狱手机配合

提取 APP .ipa 档案 & 砸壳

所有从 App Store 安装的 APP,其中的 .ipa 档案都有 FairPlay DRM 保护 ,俗称加壳保护/相反的去掉保护就叫「砸壳」,所以单纯从 App Stroe 提取 .ipa 是没有意义的,也用不了。

*另一个工具 APP Configurator 2 只能提取有保护的档案,没意义就不再赘述,有兴趣使用此工具的朋友可以点此查看教学。

使用工具+越狱手机提取砸壳之后的原始 .ipa 档案:

关于工具部分起初我使用的是 Clutch ,但怎么尝试都出现 FAILED 查了下专案 issue,发现有很多人有同样状况,貌似此工具已经不能在 iOS ≥ 12 使用了、另外还有一个老牌工具 dumpdecrypted ,但我没有研究。

这边使用 frida-ios-dump 这个 Python 工具进行动态砸壳,使用起来非常方便!

首先我们先准备 Mac 上的环境:

  1. Mac 本身自带 Python 2.7 版本,此工具支援 Python 2.X/3.X,所以不用在特别安装 Python;但我是使用 Python 3.X 进行操作的,如果有遇到 Python 2.X 的问题,不妨尝试安装使用 Python 3 吧!

  2. 安装 pip( Python 的套件源管理器)

  3. 使用 pip 安装 frida
    sudo pip install frida -upgrade -ignore-installed six (python 2.X)
    sudo pip3 install frida -upgrade -ignore-installed six (python 3.X)

  4. 在 Terminal 输入 frida-ps 如果没错误讯息代表安装成功!

  5. Clone AloneMonkey/frida-ios-dump 这个专案

  6. 进入专案,用文字编辑器打开 dump.py 档案

  7. 确认 SSH 连线设定部分是否正确 (预设不用特别动)
    User = ‘root’
    Password = ‘alpine’
    Host = ‘localhost’
    Port = 2222

越狱手机上的环境:

  1. 安装 Open SSH :Cydia → 搜寻 → Open SSH →安装

  2. 安装 Frida 源:Cydia → 来源 → 右上角「编辑」 → 左上角「加入」 → https://build.frida.re

  3. 安装 Frida:Cydia → 搜寻 → Frida → 依照手机处理器版本安装对应的工具(EX: 我是 iPhone 6 A11,所以是装 Frida for pre-A12 devices 这个工具)

环境都弄好之后,开工:

1.将手机使用 USB 连接到电脑

2.在 Mac 上打开一个 Terminal 输入 iproxy 2222 22 ,启动 Server。

3.确保手机/电脑处于相同网路环境中(EX: 连同个WiFi)

4.再打开一个 Terminal 输入 ssh root@127.0.0.1,输入 SSH 密码(预设是 alpine)

image

5.再打开一个 Terminal 进行敲壳命令操作,cd 到 clone 下来的 /frida-ios-dump 目录下。

输入 dump.py -l 列出手机中已安装/正在执行的 APP。

image
  1. 找到要敲壳导出的 APP 名称 / Bundle ID,输入:

dump.py APP名称或BundleID -o 输出结果的路径/输出档名.ipa

这边务必指定输出结果的路径/档名,因为预设输出路径会在 /opt/dump/frida-ios-dump/ 这边不想把它搬到 /opt/dump 中,所以要指定输出路径避免权限错误。

  1. 输出成功后就能取得已敲壳的 .ipa 档案!


    image

7.将 .ipa 档直接重新命名成 .zip 档,然后直接右键解压缩档

会出现 /Payload/APP名称.app

有了原始 APP 档后我们可以…

1. 提取 APP 的资源目录

在 APP名称.app 右键 → 「Show Package Contents」就能看到 APP 的资源目录


image

2. class-dump 出 APP .h头文件讯息

使用 class-dump 工具导出全 APP (包含 Framework) .h 头文件讯息 (仅限 Objective-C,若专案为 Swift 则无效)

nygard/class-dump* 大大的工具我尝试失败,一直 failed;最后还是一样使用 AloneMonkey/MonkeyDev 大大的工具集中改写过的 class-dump 工具才成功。*

image

dump 成功之后就能获取到整个 APP 的 .h 资讯。

4. 最后也是最困难的 — 进行反编译

可以使用 IDAHopper 反编译工具进行分析使用,两款都是收费工具, Hopper 可免费试用(每次 30 分钟)

我们将取得的 APP名称.app 档案直接拉到 Hopper 即可开始进行分析。

image

不过我也就止步于此了,因为从这开始就要研究机器码、搭配 class-dump 结果推测方法…等等;需要非常深入的功力才行!

突破反编译后,可以自行窜改运作重新打包成新的 APP。

图片取自航海王

逆向工程的其他工具

1.使用 MITM Proxy 免费工具嗅探 API 网路请求资讯

image

2.Cycript (搭配越狱手机) 动态分析/注入工具:

可使用 Objective-c/Javascript 进行调试控制。

image

For Example:

**cy#** alert = [[UIAlertView alloc] initWithTitle:@"HIHI" message:@"ZhgChg.li" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nl]
**cy#** [alert show]

注入一个 UIAlertViewController…

详细操作可参考此篇文章

3. Lookin / Reveal 查看 UI 排版工具

前面介绍过,再推一次;在自己的专案日常开发上也非常好用,建议购买使用 Reveal。

4. MonkeyDev 集成工具,可透过动态注入窜改 APP 并重新打包成新的 APP

5.ptoomey3/Keychain-Dumper,导出 KeyChain 内容

详细操作请参考此篇文章,不过我没试成功,看专案 issue 貌似也是在 iOS ≥ 12 之后就失效了。

总结

这个领域是个超级大坑,需要非常多的技术知识基础才有可能精通;本篇文章只是粗浅了「体验」了一下逆向工程是什么感觉,如有不足敬请见谅!仅供学术研究,勿做坏坏的事;个人觉得整个流程工具玩下来蛮有趣的,也对 APP 安全更有点概念!

上一篇下一篇

猜你喜欢

热点阅读