iOS安全攻防(十一):Hack实战——探究支付宝app手势密码

Hack实战——探究支付宝app手势密码



在之前的 iOS安全攻防(七):Hack实战——解除支付宝app手势解锁错误次数限制 中,留了一个问题,就是如何破解手势密码。

方法不唯一,本文介绍如何利用gdb分析破解app。


当没有程序源代码的情况下,我们如何利用gdb呢?

为了确定应该如何设置断点,不得不反汇编程序来作为参考了。


在前面的文章提到过,支付宝app的手势密码校验处理非常严谨,没有抛出BOOL判断的方法让我们可以直接修改返回值跳过验证,而是将全部操作封在了

  1. -(void)gestureInputView:(id)view didFinishWithPassword:(id)password;  

于是,我反汇编了支付宝app,找到手势密码解锁的相关代码片段:




红色箭头标注的地方,让人欣喜,这将是我们断点位置的最好选择。


首先,查看一下相关程序段符号表:

nm Portal | grep -i gestureinputview

得到结果:



nm Portal | grep -i getpassword

得到结果:


确定了了关键函数的输出符号。


启动支付宝app,并gdb该进程:

gdb -q -p 671


在上述两个函数位置设置断点:



可以通过info breakpoints 查看断点:



continue到 getPassword 位置,打印函数栈:



我们可以确定了 getPassword 的返回地址是 0x00becb36 ,  对该地址加断点:

b * 0xbecb36

然后继续continue,程序将卡在上面的断点上。


从上面的反汇编代码,我们可以知道,用户输入的密码为存在r8上,原始密码为存在r0上,我们直接打印出这两个寄存器的值:



正确密码是个“Z”手势图画,而当前输入为“一”手势图画。

可以得出结论,支付宝app的手势密码和大多数app一样,手势密码格式是字符串,9个点分别对应字符123456789。





郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。