正所谓树大招风,移动付出平台的鼓起,也给浩瀚一直彷徨在网络阴暗地带的黑客们又一次更生的时机。因为移动平台方才鼓起,人们对移动平台的安详认识度还不足。就拿我身边的许多伴侣来说,他们一买来手机就开始root,之后卸载预装软件,下载游戏外挂等等。本日,我们就以破解付出宝钱包的手势暗码为例,来深入相识下android系统上的一些安详常识,但愿能引起人们对移动平台安详的重视。
在此申明:以下文章涉及的代码与阐明内容仅供android系统安详常识的进修和交换利用,任何小我私家或组织不得利用文中提到的技能和代码做违法犯法勾当,不然由此激发的任何效果与法令责任本人概不认真。
尝试情况:
小米4TD版
MIUI-JHACNBA13.0(已ROOT)
付出宝钱包8.1.0.043001版
利用东西:
APK IDE
Smali.jar
Ddms
SQLite Expert
应用宝
筹备阶段:
安装完付出宝钱包之后,运行软件,我这里选择淘宝帐号登录,界面如图1所示。
登录之后,配置手势暗码,如图2所示
完成上述两步之后,退出付出宝历程。用腾讯应用宝定位到付出宝的安装目次datadatacom.eg.android.AlipayGphone,查察目次布局如图3所示。
实战开始 - 破解手势暗码错误次数限制
利用APK IDE对付出宝的安装包举办解包阐明。解包完成之后,搜索setgestureErrorNum字样,功效如图5所示
颠末大抵阐明,UserInfoDao.smali文件中的addUserInfo函数较量可疑,截取个中一段配置手势暗码错误次数的
{v0},
Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->getGestureErrorNum()Ljava/lang/String;
move-result-object v1
#挪用getGestureErrorNum函数得到未加密的错误次数,并生存到v1寄存器
invoke-virtual {v0},
Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->getUserId()Ljava/lang/String;
move-result-object v2
#挪用getUserId函数得到user id,并生存到v2寄存器
invoke-static {v2},
Lcom/alipay/mobile/security/gesture/util/GesutreContainUtil;->get8BytesStr(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
#获取user id的前8个字节,生存到v2寄存器
invoke-static {v1, v2},
Lcom/alipay/mobile/common/security/Des;->encrypt(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
#以user id的前8字节作为key,挪用des加密错误次数字符串,并生存到v1寄存器
invoke-virtual {v0, v1},
Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->setGestureErrorNum(Ljava/lang/String;)V
#挪用setGestureErrorNum函数,将加密的字符串生存[/code]通过对上述代码的阐明得知,第一次getGestureErrorNum的挪用取出的错误次数应该是未加密的字符串,添加log代码验证,代码如图6所示
生存修改的smali文件,从头编译打包,安装完成之后,输入错误的手势暗码,log输出数字依次递增。最后一次输入正确的手势暗码,错误次数从头归0。LogCat捕获到的日志如图7所示。
措施阐明到这里,我不禁揣摩,在错误次数未加密前,把v1寄存器的值配置为字符串“0”是不是就可以骗过付出宝而可以无限次的输入手势暗码了呢?于是乎,我又开始了下面的验证,代码如图8所示。
编译打包,从头安装付出宝,输入错误的手势暗码,发明5次错误之后措施照旧让我们从头登录。看来我们这里配置错误次数已经晚了,于是乎,继承搜索挪用addUserInfo函数来加密gestureErrorNum的处所。个中,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;-><init>()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;
move-result-object v0 #挪用toString函数转换成字符串范例,赋给v0