方法不唯一,本文介绍如何利用gdb分析破解app。
当没有程序源代码的情况下,我们如何利用gdb呢?
为了确定应该如何设置断点,不得不反汇编程序来作为参考了。
在前面的文章提到过,支付宝app的手势密码校验处理非常严谨,没有抛出BOOL判断的方法让我们可以直接修改返回值跳过验证,而是将全部操作封在了
1
| -(void)gestureInputView:(id)view didFinishWithPassword:(id)password;
|
于是,我反汇编了支付宝app,找到手势密码解锁的相关代码片段:
images/loading.gif' data-original="http://jbcdn2.b0.upaiyun.com/2014/02/3335d910fd88964b1b0aa4ee43885ae2.jpg" />
红色箭头标注的地方,让人欣喜,这将是我们断点位置的最好选择。
首先,查看一下相关程序段符号表:
1
| nm Portal | grep -i gestureinputview
|
得到结果:
1
| nm Portal | grep -i getpassword
|
得到结果:
确定了了关键函数的输出符号。
启动支付宝app,并gdb该进程:
在上述两个函数位置设置断点:
可以通过info breakpoints 查看断点:
continue到 getPassword 位置,打印函数栈:
我们可以确定了 getPassword 的返回地址是 0x00becb36 , 对该地址加断点:
然后继续continue,程序将卡在上面的断点上。
从上面的反汇编代码,我们可以知道,用户输入的密码为存在r8上,原始密码为存在r0上,我们直接打印出这两个寄存器的值:
正确密码是个“Z”手势图画,而当前输入为“一”手势图画。
可以得出结论,支付宝app的手势密码和大多数app一样,手势密码格式是字符串,9个点分别对应字符123456789。
前两天在一群里看见有人推荐一个app叫问啊,就可以发题答题那种的,感觉就跟uber滴滴打车似的,一般这种软件一上来就砸钱给红包啥的,哥之前刷过uber的单有经验!试验了几次应该可以刷,把注册红包和之前领的红包钱套现,目前我提了五十多,目测还能刷更多。ps,但是尽量要问技术相关的问题,不然容易被封。
有技术的可以自己试,不会的可以q我315414695:QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!
原标题:Hack实战——探究支付宝app手势密码
关键词: