反向工程iOS应用程序-iOS 11版(第1部分)
尽管已经有很多关于“逆向工程iOS应用”的博客文章,教程甚至是youtube视频,但每次Apple发行新的iOS版本时,“游戏”都会改变。 研究人员必须找到一种新方法来越狱iOS的新发行版,并且我们必须更新工具以与新越狱环境一起工作。 对于最新的iOS 11越狱尤其如此,基于Ian Beer的async_wake漏洞的LiberiOS和Electra越狱技术与以前的越狱技术截然不同,并且大多数(全部?)现有工具在这些越狱时都被破坏了。
我将重点关注LiberiOS,因为这是我测试过的唯一一次越狱。 也是因为我是乔纳森·莱文(Jonathan Levin)的工作及其对社区的贡献的忠实拥护者。 LiberiOS越狱就是所谓的无KPP越狱(KPP代表内核补丁保护)。 基本上,这意味着KPP保护的内核区域没有任何修改,并且大多数越狱工具(如Clutch,dumpdecrypted)以及依赖Cydia Substrate的所有调整都尚未更新以使用此方法。
这篇文章的篇幅太长了,所以我决定将其分为两部分:
- 第1部分 :将帮助您设置设备并解密iOS应用
- 第2部分 :将帮助您转储应用程序的类,分解其指令并操纵运行时以更改应用程序的行为
教学大纲
第1部分
- 越狱您的设备(外部链接)
- 设置
iTunnel
- 设置
bfinject
- 使用
bfinject decrypt
解密Starbucks iOS应用
第2部分
- 使用
class-dump
转储星巴克应用程序的类 - 使用
Hopper
拆卸星巴克应用程序 - 使用
bfinject cycript
运行时操作
要开始重新使用iOS应用,您需要越狱的设备。 在本文中,我假设您使用的是iOS 11,因此让我们开始越狱设备。 我喜欢iClarified教程,并且它们对于在iOS 11–11.1.2上越狱您的iPhone / iPod / iPad(iDevice)来说是一个很棒的教程:
- 请按照iClarified的教程在此处使用LiberiOS越狱iDevice。
现在您的iDevice已越狱,我们可以开始对iOS应用进行逆向工程!
设置iTunnel
尽管LiberiOS的Dropbear SSH版本启用了wifi连接,但我发现USB更快,更可靠。 要使用照明电缆通过USB通过SSH进入设备,您需要设置iTunnel
(或类似工具)。
- 从此处下载最新版本的
iTunnel
- 提取.zip文件的内容
- 将
itnl
二进制文件复制到/usr/local/bin
- 将
libmd.dylib
库复制到/usr/local/lib
您也可以将两个文件都放在一个文件夹中,并使用./
前缀执行itnl
命令。
设置bfinject
正如我之前所说,许多现有工具无法像以前的越狱一样工作,但是感谢Bishop Fox,我们现在可以通过执行以下操作在LiberiOS中使用Clutch
:
- 在桌面上创建一个名为
bfinject
的文件夹 - 在
bfinject
文件夹中下载最新的tarball - 运行
itnl
将ssh通信转发到另一个端口,–--lport
是本地端口,而--iport
是iDevice端口:
> itnl --lport 2222 --iport 22
- 在另一个终端会话中,SSH进入iDevice:
> ssh -p 2222 root@localhost
- 输入root密码,默认密码是
alpine
(尽管您应该更改它)
- 要启用
binpack
请将binaries目录添加到PATH
:
# export PATH=$PATH:/jb/usr/bin:/jb/bin:/jb/sbin:/jb/usr/sbin:/jb/usr/local/bin:/sbin:/usr/sbin:/usr/local/bin:
- 在
/jb
创建一个bfinject
文件夹并将其更改为目录:
# mkdir /jb/bfinject && cd /jb/bfinject
- 在另一个终端会话中,将压缩包复制到设备:
> scp -P 2222 bfinject.tar root@localhost:/jb/bfinject
- 输入root密码,然后等待文件传输
- 提取压缩包内容:
# tar xvf bfinject.tar
- 将
/jb/bfinject
路径添加到PATH
:
# export PATH=$PATH:/jb/bfinject:
- 可选 :您可以将
.dylib
库移动或复制到/usr/local/lib
以便能够从任何目录运行bfinject
从现在开始,您可以将/jb/bfinject
添加到binpack路径列表中。 有关bfinject
更多信息,请访问其GitHub存储库。
tl; dr为什么我们需要首先解密应用程序
从App Store下载的应用程序的应用程序二进制文件使用Apple的FairPlay DRM进行了加密,以保护开发人员的知识产权并避免篡改。
使用bfinject解密解密Starbucks iOS应用
- 从App Store下载星巴克应用程序
- 运行
itnl
将ssh通信转发到另一个端口(如果尚未这样做):
> itnl --lport 2222 --iport 22
- 在另一个终端会话中,将SSH SSH到iDevice(如果尚未这样做):
> ssh -p 2222 root@localhost
- 输入root密码
- 将目录更改为
/private/var/containers/Bundle/Application
,这是iOS存储从App Store下载的所有应用程序的目录:
# cd /private/var/containers/Bundle/Application
- 在这里,您会看到一个UUID文件夹列表,每次下载应用程序时,iOS都会生成一个随机UUID。 如果您安装了许多应用程序,那么快速了解一下哪个是最后安装的应用程序是一种按日期对文件进行排序的方法:
# ls -lat
- 将目录切换到第一个UUID文件夹,在这种情况下,它应该是Starbucks应用程序。 您将看到如下内容:
- 记下
.app
捆绑包的名称,在这种情况下,只是Starbucks.app
但其他应用可能具有不同的名称。 此名称很重要,因为bfinject decrypt
将其作为参数,并将搜索与您的参数完全相同的捆绑软件
如果您将目录更改为Starbucks.app
,则将在此处看到Starbucks
应用程序捆绑包中包含的所有文件。 如您所见, 没有一个文件被加密 。 苹果公司说对应用程序进行加密时,是指实际的二进制文件而不是资产和多余的文件。 ( 提示: 有时您可能会幸运地找到一些服务器配置文件或密钥,因为某些开发人员可能没有意识到我们可以提取这些文件 )。 不必担心将这些文件传输到您的计算机,一旦我们解密了该应用程序,您就可以访问它们。
- 在您的iDevice上,打开“星巴克”应用
- 在您的终端上输入:
# bash bfinject -P Starbucks -L decrypt
如果您没有将.dylib
库移动/复制到/usr/local/lib
,则需要将目录更改为/jb/bfinject
并从此处执行命令。
- 在设备上,您应该会看到一个弹出对话框,如下所示:
- 可选 :如果要使用
NetCat
传输解密的应用程序,请点击“YES
并按照说明进行操作 - 我更喜欢使用
scp
传输解密的应用程序。 解密后的应用程序将存储在原始应用程序的/Documents
文件夹中。 iOS应用程序“Data
部分的目录为/private/var/mobile/Containers/Data/Application/
。 将目录更改为“Data
部分:
# cd /var/mobile/Containers/Data/Application/
- 同样,您将看到一个UUID文件夹列表,您可以再次按日期排序以获取最新的修改后的文件夹,将目录更改为该UUID,然后更改为
Documents
文件夹,您应该会看到一个decrypted-app.ipa
文件:
- 在另一个终端会话中,将
decrypted-app.ipa
文件传输到您的计算机:
> scp -P 2222 root@localhost:/var/mobile/Containers/Data/Application/{UUID}/Documents/decrypted-app.ipa decrypted-app.ipa
- 可选 :我不喜欢放置文件,将
decrypted-app.ipa
传输到我的机器后,通常会从设备中删除它:
# rm /var/mobile/Containers/Data/Application/{UUID}/Documents/decrypted-app.ipa
- 在您的计算机上,重命名文件并将其扩展名更改为
Starbucks.zip
:
> mv decrypted-app.ipa Starbucks.zip
- 提取.zip内容:
> unzip -a Starbucks.zip
- 您应该找到一个名为
Payload
的文件夹,并在一个名为Starbucks.app
的捆绑软件中,右键单击Starbucks.app
捆绑软件,然后选择Show Package Contents
,现在您应该看到Starbucks捆绑软件中包含的所有文件,包括解密后的版本。Starbucks
双星,是的!
我知道这是很多信息和说明,所以我将这篇文章分为两部分。 尝试用几个不同的应用程序重复这些步骤,以熟悉流程和工具,接下来我们将了解如何反汇编和转储解密的应用程序的类。
注意:之所以选择星巴克应用程序,是因为他们 在HackerOne上 有一个 漏洞赏金计划, 而他们的iOS应用程序属于该计划的范围,因此,如果通过阅读本教程,您设法找到一个漏洞,可以向他们报告。