记一次简单的 iOS CTF 练习题
By dwj1210 at
何为CTF:
夺旗(CTF)是一项计算机安全竞赛。CTF竞赛通常旨在作为一种教育活动,为参与者提供固定机器的经验,以及对现实世界中发现的这类攻击进行反应。逆向工程,网络嗅探,协议分析,系统管理,编程和密码分析都是DEF CT先前的CTF竞赛所需的技能。有两种主要的比赛形式:攻击/防守和危险。(wikipage中的定义)
参考地址:
这次的iOS CTF的练习题是我在Ivan R Blog中找到的,针对于初学者的iOS CTF。 这里是ipa文件的下载地址,而这里则是提交并检验找到的flag是否正确的地方。
版本详情:
下载的ipa包含两个版本:Headbook-v1.0 和 Headbook-v2.0
Headbook-v1.0 找到了五个flag
Headbook-v2.0 找到了三个flag
Headbook-v1.0:
第一个flag
解压下载的ipa,然后打开.app文件找到Mach-O拖到IDA里面分析。
在 [AppDelegate applicationWillTerminate:]
中发现有一句输出打印。此时把ipa装手机运行之后,双击home键上划,触发applicationWillTerminate
方法,发现打印出来falg: flag-9861DA53-C08C-47C4-84D6-B48463AB738A
。
拿到flag去提交验证发现正确,大功告成。
第二个flag
反编译完成的IDA左侧是 Function Windoow
,在这里我们可以看到一些很奇怪的方法名称,但是却和我们的flag很相似,所以试着把这几个奇怪的方法名由上到下拼到一起,看能不能得到flag。
拿到flag,验证正确~ flag-BD570736-D304-400A-A6B7-F61B02173428
第三个flag
在二进制文件中苦苦寻觅并没有得到什么有效的线索,该换个思路去别的地方找找了。这个时候我们去本地文件里面看一下,打开bundle目录下的plist文件,结果立马发现了一个新鲜flag。 flag-EC840814-CEBA-4731-8620-CB991D850B14
第四个flag
从plist文件中找到了一个flag,所以会不会在资源文件里也会有呢,带着猜想我们试试解压资源文件 Assets.car
,不知道该用什么工具解压的同学点这里。
解压文件以后惊喜的发现flag居然藏在了图片里面。
在这里不得不佩服作者的思路。
第五个flag
乘胜追击,看看bundle目录下还有哪里可能藏着我们要找的flag。
使用ATOM打开 Main.storyboardc
文件,直接搜索flag。
这样我们便找到了第五个flag flag-5932744F-4810-4A6C-BD8F-66FF3E115ED6
,至此圆满完成。
总结:
Headbook-v1.0只是一个练手的题目很简单,但是我们不得不佩服作者的思路,同时也对CTF题目有了更深刻的认识,集巧妙趣味于一身,让人深深被其吸引。
Headbook-v2.0:
第一个flag
同样解压下载的ipa,然后打开.app文件找到Mach-O拖到IDA里面分析。
直接把ipa运行在手机上发现直接打印出了一句话: Good thing this flag is encrypted: Ov630qDn5AbOWX4JIUUeurVdgNdsjqiaM8ywYCT2Yj1eiMcT/MEPJJ5W9icdC5qb
在IDA中查看发现这句话是在 [AppDelegate application:didFinishLaunchingWithOptions:]
中打印的。
这不明摆着告诉我们:这个flag是个好东西,并且他被加密了。
接下来我们就要去寻找解密方法了,直接在IDA中搜索 decrypt
,直接找到了 [AppDelegate decryptText:]
方法。很明显这是一个解密方法,但是不确定是不是我们要找的,所以我们就验证一下。
这里我使用了MonkeyDev来编写hook代码,验证我们的猜想。
运行代码,就在控制台打印出了: AppDelegate-decryptText:flag-71F5243A-A55D-4E97-893A-8C3C4B34A938
, 此时现在这个flag跟版本1中flag的结构一致,所以我们就直接提交flag验证发现猜想正确。
第二个flag
在主界面中点击 Enter
可以进入到第二个界面,发现名为 DownloadViewController
,顾名思义是个负责下载的控制器了。
查看 ViewDidLoad
方法发现该控制器初始化了一个 DownloadTask
,并且调用了 [DownloadTask start]
方法。
看到这个方法,第一时间想到去本地找下载的文件,但是并没有找到。然后我的做法是hook了 [NSURL URLWithString:]
方法,拿到了下载文件的地址 https://ctf.ivrodriguez.com/analytics
,其实在IDA中也完全可以看到。
把地址直接粘贴到浏览器发现下载了一个txt文件,打开txt文件就找到了第二个flag: flag-4056CEF3-DCCB-4D9B-9D0E-64428E9A50E3
。
第三个flag
这个ipa文件方法并不多,我们挨个查看寻找线索,发现了一个 [TextHandler mainFunc]
方法。
我是使用Monkeydev编写代码主动调用,并且打印出来 [TextHandler mainFunc]
的返回值。
运行程序此时打印出来: TextHandler-mainFunc:flag-F72ECAE7-0BBE-4D1D-BF49-3B75BD6F9DCA
。
拿到flag提交验证,我们就找到了第三个flag。