近来,阿里的支付宝钱包蛮火的嘛,特别是余额宝,屌丝们的理财神器,我也是屌丝啊哈哈。。。

让我觉得比较赞的是支付宝钱包的界面做的还不错,故想研究一下。

apktool反编译过后,觉得页面也就那样,各种各样的嵌套。之前看过 gameHacker的 Android屏幕解锁图案破解》

所以我也来研究一下支付宝钱包的android客户端v7.6.0.1028(以下简称钱包apk)。


(一)思路,先找到钱包apk的屏幕密码的存放位置。

根据初步判断,钱包apk的屏幕密码gesture.key不是放在 android系统 /data/system 下,而是放在某个数据库文件中。如下图:


aplipayclient.db就是存放屏幕密码的数据库。各位网友可以修改钱包apk的屏幕密码,对比一下修改前后 /data/data/com.eg.android.AlipayGphone下的

文件的修改时间,就会发现哪一个db是存放钱包apk屏幕密码的数据库了。


aplipayclient.db是android 内置sqlLite数据库文件,用SQLiteSpy打开该文件。



好了,gesturePwd就是我们要找的屏幕密码。


(二)加密方式

该密码字符串采用的是怎么样的加密方式。先分析一下,

钱包apk的屏幕图案是个九宫格,应满足三个要求:

1.至少四个点;
2.最多九个点;
3.无重复点。

举个例子:图形“2”(参考上图),android默认的屏幕则是字符串“000102050403060708”,经过SHA1加密后得到密文是“333d9f31c209ce1217bc165c5baa7307b06bbf87

故钱包apk的屏幕密码不是采用SHA1加密方式。

经过反编译,在classes\com\alipay\mobile\security\securitycommon\SecurityUtil.smali 文件中找到了加密方式--MD5.如下图:




具体的反编译过程,就不细说了。各种反编译工具,本次crack用的工具是APK改之理(APK IDE)。



(三)解密

大家都知道MD5的解密难度,要想暴力破解谈何容易。

我所知有效的两种破解方法:

1.在线破解网站,把MD5密文收录进数据库提供查询,如:www.md5.com

2.单机多线程暴力破解工具--MD5Crack V3.0 经过我的测试,觉得还蛮好用的,能快读破解一些相对简单的MD5.


本文只是窥探,不是破解。用java写了一个测试类,

import java.security.MessageDigest;public class MD5 {public static String MD5(String inStr) {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (Exception e) {e.printStackTrace();return "";}char[] charArray = inStr.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++)byteArray[i] = (byte) charArray[i];byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16)hexValue.append("0");hexValue.append(Integer.toHexString(val));}return hexValue.toString();}public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(MD5("000102050403060708"));}}

输出的结果3d0440c66434d6d7a4f12ca4048d60e7并不与我们第一步获取的密码 一致啊,难道是加密方式错了???


后面想了想,试了试,钱包apk的屏幕密码不是“000102050403060708” ,而是“012543678”,再一次运行测试类得到密文“fe7ebe14c415675533965150bf650bbc”


OK!正确!懂得了android屏幕密码的原理,在支付宝钱包上得到发挥了,这算是学以致用了,嘿嘿。。。







后记:

在探索的过程中,遇到了几个小问题,现一并贴上方便初学者。

(一)

adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *


adb 不管执行 shell devices 还是logcat 都会报错

其原因是adb server没启动。


5037端口被占用了,查看一下。

netstat -ano | findstr "5037"

打开任务管理器关掉4236 这个进程(该死的企鹅)。ok!


(二)

使用adb pull命令从android系统中读取文件失败。显示:Permission denied

原因:是由于文件权限原因引起的。

使用 android sdk中的adb shell ls –l命令查看android系统中的文件权限为:


应该有两种方式读取文件:

1 使用su命令,用超级用户登路,然后chmod命令。这个没试。

2 把gesture.key的内容读取到sdcard下某一个文件222.txt,然后读取pull 222.txt文件。


(三)

暴力破解android屏幕图案,直接用超级用户删除/data/system/gesture.key


更多相关文章

  1. Android官方开发文档Training系列课程中文版:多样屏幕之支持不同
  2. Android通过 SharedPreference 实现用户名与密码的存储与调用
  3. Android(安卓)常用的距离单位
  4. Android屏幕录制并转换gif
  5. 外媒曝Surface Duo即将上市!正在准备Android兼容性测试
  6. 字节跳动屏幕适配方案解读
  7. 【android】应用程序签名详解
  8. ANDROID 如何适配屏幕
  9. Android登录界面的实现代码分享

随机推荐

  1. Android(安卓)Monkey测试入门-2-ADB安装
  2. Android(安卓)Add外部library工程,总是链
  3. Android(安卓)实现广告欢迎界面(倒计时)
  4. Android线程通信之Handler
  5. android 安全讲座第四层(扩展篇)
  6. Android(安卓)+ HTML开发手机应用 demo
  7. android 仿IOS实现SegmentControl
  8. android中非阻塞socket通信
  9. Android(安卓)Beam 告诉我们未来近距离数
  10. android 下使用GPS 无法获取经纬度的解决