【带你去你不知道的地方】是一个专门写安全的系列。第一篇有关于支付宝 Android APP 的文章写于 2014 年 7 月 10 日,当时是写在另一个平台上的,现在迁移过来。同时,Ricky 从 2017 年年中开始,会不断地接触一些安全的东西,到时候会从易到难写一些跟 hacker 有关的安全文章放到这个系列里,敬请期待。 |
在此申明:以下文章涉及的代码与分析内容仅供 Android 系统安全知识的学习和交流使用,任何个人或组织不得使用文中提到的技术和代码做违法犯罪活动,否则由此引发的任何后果与法律责任本人概不负责。
昨晚(2014 年 7 月 10 日)在某 hacker 网站上看到一篇名为《支付宝钱包手势密码破解实战(root后可直接绕过手势密码)》的教程,今早心血来潮就验证了一番,发现非常有效!!
如果你有一定的破解经验,请直接阅读该文章后面附上的原文;如果你没有破解经验,我将非常浅显、一步一步地告诉你应该怎么做。
首先你需要准备:
- 一台已 ROOT 的安卓手机(我采用的手机是联想 A60 手机,乐蛙 OS,基于 2.3.5,已 ROOT);
- SQLiteExpert,一个用于读写 SQLite 数据库的软件(SQLiteExpert 下载地址:官网下载,注意:SQLite Expert Professional (trial version) 是收费版本;SQLite Expert Professional 是免费版本,请下载免费版本);
- APKIDE,APK 反编译与重编译软件(APKIDE 下载地址:主链接,百度云盘,备用链接);
- android-sdk-windows,Android 的 SDK 开发工具,如果你对 Android 编程有一定了解相信你对它不会感到陌生(下载地址请自行百度,就是一个压缩包,解压后会有一堆文件,无需安装,用 APKIDE 重新编译 APK 时需要用到);
- 360 手机助手或者腾讯应用宝,用于读出手机中的支付宝的 SQLite 数据库(我用的是 360 手机助手,这个就不用我贴下载地址了吧);
- 支付宝钱包 8.1.0.043001 版,我们将基于这个 APK 进行破解,该版本的支付宝于 2014 年 6 月 4 日发布(支付宝钱包 8.1.0.043001 版下载地址:主链接,百度云盘,备用链接)。
md5sum : 3a1fee6115d9c075a31320737b8539c5 ApkIDE最新3.3.3少月增强版20160730.rar 9fac860d8e47b326491ae2b84b46f14c com.eg.android.AlipayGphone_154224.apk
若哪一天下载链接不幸失效,请在下方评论说明,我会及时更新,谢谢。
好,准备好了你已 ROOT 的安卓手机,下载好了上面的软件,我们开始!!
1、首先在手机上安装好支付宝钱包 8.1.0.043001 版,登录并设置支付宝的手势密码,如下图所示:

2、现在,把你的手机接到电脑上,打开360手机助手,点击 “ 文件 ”,如下图所示:

3、定位到支付宝的安装目录 \data\data\com.eg.android.AlipayGphone,如下图所示:

4、这些都是支付宝软件下的数据库。我们可以右键单击上面的数据库文件,执行 “ 导出 ” 到电脑的操作,同时用 SQLiteExpert 工具打开所有的 db 文件,分析发现 alipayclient.db 数据库中的 userinfo 表中保存了用户名、输入错误次数、手势密码等详细信息,如下图所示:

其中的 gestureErrorNum 字段应该就是保存了手势密码输入错误的次数了,很明显这里已经被加密了。
5、打开 APKIDE 软件,我们需要对它进行一番设置。点击 “ 工具 ” → “ 配置与选项 ”,打开如下图所示的界面。Java SDK 默认安装后会自动读取到路径,无需配置,如果你没有安装 Java SDK 请去下一个;Android SDK 安装路径指向你解压出来的 android-sdk-windows 文件夹即可。

6、点击软件左上方的 “ 项目 ” → “ 打开 APK 文件 ”,去打开支付宝钱包 8.1.0.043001 版,软件将会执行反编译操作,这将需要一点时间,如下图所示:

其他相关文章:
编译出来的均为 smali 语言文件,如果你对 smali 语言并不熟悉请参阅这里:
7、在搜索内容中输入:setgestureErrorNum,让我们来看看代码的哪些地方调用了这个方法,从而找到判断手势密码输入错误的地方,进而修改源代码进行绕过。搜索截图如下图所示:

8、调用到 setgestureErrorNum 方法的地方仅有 4 个类,经过类名的判断以及综合分析(没错,如何审阅代码的过程这里一律略过,我们直奔主题 → →),发现 AlipayPattern.smali 文件的 settingGestureError 函数比较可疑,可疑的函数代码以及注释如下:
.method public settingGestureError(Lcom/alipay/mobile/framework/app/ui/BaseActivity;Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;I)V .locals 1 new-instance v0,Ljava/lang/StringBuilder; # 初始化 StringBuilder 实例 invoke-direct {v0}, Ljava/lang/StringBuilder;->()V invoke-virtual {v0, p3},Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; # p3 是一个 I 类型的整型变量,调用 StringBuilder.append 赋值 move-result-object v0 invoke-virtual {v0},Ljava/lang/StringBuilder;->toString()Ljava/lang/String; #调用 toString 函数转换成字符串类型,赋给 v0 move-result-object v0 invoke-virtual {p2, v0},Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->setGestureErrorNum(Ljava/lang/String;)V # 调用 setGestureErrorNum 设置未加密的错误次数字符串 invoke-static {},Lcom/alipay/mobile/framework/AlipayApplication;->getInstance()Lcom/alipay/mobile/framework/AlipayApplication; move-result-object v0 invoke-static {v0},Lcom/alipay/mobile/framework/service/ext/dbhelper/SecurityDbHelper;->getInstance(Landroid/content/Context;)Lcom/alipay/mobile/framework/service/ext/dbhelper/SecurityDbHelper; move-result-object v0 invoke-virtual {v0, p2},Lcom/alipay/mobile/framework/service/ext/dbhelper/SecurityDbHelper;->addUserInfo(Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;)Z # 调用 SecurityDbHelper.addUserInfo 函数加密、更新数据库 return-void .end method
9、通过上述代码注释我们知道,修改 p3 的值为 0 即可去除支付宝只能尝试输入 5 次手势密码的限制,代码修改如下图所示:

10、修改完毕代码,按 ctrl + s 保存,点击 “ 编译 ” → “ 编译生成 APK ”,在下方的 “ 输出 ” 框里会看到编译结果,编译结果如下图所示:

11、如果编译不通过说明你的 Java SDK 或是 Android SDK 没有配置好,请返回第 5 步重试。现在我们将重新编译好的 APK 安装到手机,你会发现大功告成!!如下图所示,让我们来测试一下:




Enjoy yourself !!
如下图所示,支付宝的手势密码其实就是数字 0 到 8、最短 4 位,最长 9 位的纯数字密码。采用暴力破解法对于现在的手机来说 so easy,用电脑穷举 4 位到 9 位的纯数字密码,也不到一分钟。如果你看到这里有一点点进一步的破解思路请接着往下看原文!!

这里点到为止,如需深挖,还请大家多多加油!!
如果你是资深写安卓程序的程序猿相信你对 DDMS(Dalvik Debug Monitor Service)并不陌生,APKIDE 也是可以开启 DDMS 的,只需点击 “ 工具 ” → “ Dalvik Debug Monitor Service ” 即可启动。

APKIDE 是一个很棒的安卓反编译与重编译工具,在这里真的要感谢一下原作者,没有你的辛勤付出就没有如此方便的反编译工具!!
原文:支付宝钱包手势密码破解实战(root 后可直接绕过手势密码)
随着移动互联网的普及以及手机屏幕越做越大等特点,在移动设备上购物、消费已是人们不可或缺的一个生活习惯了。随着这股浪潮的兴起,安全、便捷的移动支付需求也越来越大。因此,各大互联网公司纷纷推出了其移动支付平台。其中,用的比较多的要数腾讯的微信和阿里的支付宝钱包了。就我而言,平时和同事一起出去 AA 吃饭,下班回家打车等日常生活都已经离不开这两个支付平台了。
正所谓树大招风,移动支付平台的兴起,也给众多一直徘徊在网络阴暗地带的黑客们又一次重生的机会。因为移动平台刚刚兴起,人们对移动平台的安全认识度还不够。就拿我身边的很多朋友来说,他们一买来手机就开始 root,之后卸载预装软件,下载游戏外挂等等。今天,我们就以破解支付宝钱包的手势密码为例,来深入了解下 Android 系统上的一些安全知识,希望能引起人们对移动平台安全的重视。
手机硬件以及破解的支付宝版本:
红米TD版 MIUI-JHACNBA13.0(已越狱)、支付宝钱包 8.1.0.043001 版
其他工具软件:
APKIDE、Smali.jar、Ddms、SQLiteExpert、应用宝
准备阶段:
安装完支付宝钱包之后,运行软件,我这里选择淘宝帐号登录,界面如下图所示:
后记
如上所述,通过修改支付宝钱包数据库来达到破解目的的方法是需要在已经 root 过的手机上才能使用的。设想一下这种情况,我的手机已经 root,并且手机被盗。那么,除了手机上的艳照有可能泄露之外,小偷还可以通过修改支付宝的手势密码来登录我的支付宝,因此,造成直接的金钱损失也不是没有可能。
一般来说,普通用户日常使用的手机尽量不要去 root,也不要随便去下载来历不明的软件和外挂。
本文完。如有疑问,欢迎在下方留言;如本文有什么错误,欢迎在下方留言指正,谢谢。
发表评论?