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

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

ipa下载地址:AliCrackMe

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第1张图片
screen01.jpg

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第2张图片
screen02.jpg

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

cycript -p level1
[[UIApp keyWindow] recursiveDescription]
iOS安全攻防(十二)2015移动安全挑战赛 第一题_第3张图片
visibleControls.png

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

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

按钮被设置成了蓝色背景


iOS安全攻防(十二)2015移动安全挑战赛 第一题_第4张图片
screen03.jpg

继续操作

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

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第5张图片
Assembly01.png
iOS安全攻防(十二)2015移动安全挑战赛 第一题_第6张图片
Assembly02.png
iOS安全攻防(十二)2015移动安全挑战赛 第一题_第7张图片
Assembly03.png

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

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第8张图片
Attach.png

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第9张图片
lldb.png

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第10张图片
lldb01.png

点击按钮,触发断点:

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第11张图片
lldb03.png
iOS安全攻防(十二)2015移动安全挑战赛 第一题_第12张图片
lldb04.png

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

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第13张图片
lldb05.png

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

iOS安全攻防(十二)2015移动安全挑战赛 第一题_第14张图片
screen04.jpg
iOS安全攻防(十二)2015移动安全挑战赛 第一题_第15张图片
screen05.jpg
(本文部分图片引用沙梓社论坛)

你可能感兴趣的:(iOS安全攻防(十二)2015移动安全挑战赛 第一题)