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

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
(本文部分图片引用沙梓社论坛)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容