美文网首页iOS逆向开发
iOS安全攻防(十二)2015移动安全挑战赛 第一题

iOS安全攻防(十二)2015移动安全挑战赛 第一题

作者: Visitor | 来源:发表于2016-06-11 10:03 被阅读315次

2015移动安全挑战赛是由看雪和阿里巴巴联合举办的面向移动安全爱好者的比赛,感谢逆向工程界的前辈看雪论坛和非常重视技术积累的阿里巴巴为推动移动安全在国内的发展和普及所作出的贡献!这次实战的目的,是带大家一起做一做这次比赛的第1个iOS题,感受一下iOS逆向工程在比赛实战中的运用,如果你有更好的解题思路,欢迎参与讨论

ipa下载地址:AliCrackMe

下载app安装成功后界面如下

screen01.jpg

在输入框随意输入字符串,单击进入按钮,弹出密码错误提示框,好的,明白了题意即为截获正确密码

screen02.jpg

密码错误提示一定是由代码控制的,既然弹出了错误提示,说明在弹出提示之前,一定有字符串匹配(isEqualToString:),验证输入的字符串是否相等。打开终端, 劫持该进程

cycript -p level1
[[UIApp keyWindow] recursiveDescription]
visibleControls.png

ok,劫持成功后,根据终端打印的日志,找到"进入"按钮

signBtn = #0x17518230
signBtn.backgroundColor = [UIColor blueColor]

按钮被设置成了蓝色背景


screen03.jpg

继续操作

[signBtn allTargets]
[NSSet setWithArray:@[#"<ViewController:0x175b6b70>"]]]
[signBtn allControlEvents]
64
[signBtn actionsForTarget:#0x175b6b70 forControlEvent:64]

ok, "进入"按钮的相应函数是[ViewController onClick],开始分析汇编代码。
从[ViewController onClick]出发,找到答案,[ViewController onClick]的汇编执行流程如下图所示

Assembly01.png Assembly02.png Assembly03.png

很明显,这段汇编代码从textField里读text,转换成UTF8String之后,和某个值作判断,并根据判断结果跳转,这一现象跟我们上一节作出的预测不谋而合

在这段代码的开头下个断点,然后单步执行,看看每个objc_msgSend都做了什么操作,先用debugserver挂载level1:

Attach.png

挂载时间会比较长,挂载成功后用LLDB连过去(参考沙梓社):

lldb.png

在0000B76A下断点(这些操作也都在书上重复过无数遍了,下面还是以码代字):

lldb01.png

点击按钮,触发断点:

lldb03.png lldb04.png

看到了一个可疑的字符串“Sp4rkDr0idKit”,你应该已经猜到了,它就是我们的答案,知其然,还要知其所以然,我们继续分析,看看正确的判断逻辑是怎样的。

分析判断逻辑,顺着上面的代码,接着分析:

lldb05.png

值得一提的是,这个判断逻辑有一个bug——即我们输入的字符串,只需要含有“Sp4rkDr0idKit”这个前缀就可以了,而不用全文匹配这个字符串,如图所示:

screen04.jpg screen05.jpg
(本文部分图片引用沙梓社论坛)

相关文章

网友评论

  • 我叫俞小小贱:哪里可以找到一些 cycript的技巧?
  • 墨狂之逸才:我想问一下,想从事iOS移动开发安全领域的开发,需要哪些知识,以便小生课余时间抓紧学习,谢谢
    墨狂之逸才:@Visitor 好的谢谢。
    Visitor:@墨狂之逸才 有iOS App开发经验和能读懂基础汇编语法,其它知识可在实践中掌握

本文标题:iOS安全攻防(十二)2015移动安全挑战赛 第一题

本文链接:https://www.haomeiwen.com/subject/nsysdttx.html