正所謂樹大招風(fēng),移動付出平臺的鼓起,也給浩瀚一直彷徨在網(wǎng)絡(luò)陰暗地帶的黑客們又一次更生的時機。因為移動平臺方才鼓起,人們對移動平臺的安詳認(rèn)識度還不足。就拿我身邊的許多伴侶來說,他們一買來手機就開始root,之后卸載預(yù)裝軟件,下載游戲外掛等等。本日,我們就以破解付出寶錢包的手勢暗碼為例,來深入相識下android系統(tǒng)上的一些安詳常識,但愿能引起人們對移動平臺安詳?shù)闹匾暋?
在此申明:以下文章涉及的代碼與闡明內(nèi)容僅供android系統(tǒng)安詳常識的進修和交換利用,任何小我私家或組織不得利用文中提到的技能和代碼做違法犯法勾當(dāng),不然由此激發(fā)的任何效果與法令責(zé)任本人概不認(rèn)真。
嘗試情況:
小米4TD版
MIUI-JHACNBA13.0(已ROOT)
付出寶錢包8.1.0.043001版
利用東西:
APK IDE
Smali.jar
Ddms
SQLite Expert
應(yīng)用寶
籌備階段:
安裝完付出寶錢包之后,運行軟件,我這里選擇淘寶帳號登錄,界面如圖1所示。
登錄之后,配置手勢暗碼,如圖2所示
完成上述兩步之后,退出付出寶歷程。用騰訊應(yīng)用寶定位到付出寶的安裝目次datadatacom.eg.android.AlipayGphone,查察目次布局如圖3所示。
實戰(zhàn)開始 - 破解手勢暗碼錯誤次數(shù)限制
利用APK IDE對付出寶的安裝包舉辦解包闡明。解包完成之后,搜索setgestureErrorNum字樣,功效如圖5所示
顛末大抵闡明,UserInfoDao.smali文件中的addUserInfo函數(shù)較量可疑,截取個中一段配置手勢暗碼錯誤次數(shù)的
{v0},
Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->getGestureErrorNum()Ljava/lang/String;
move-result-object v1
#挪用getGestureErrorNum函數(shù)得到未加密的錯誤次數(shù),并生存到v1寄存器
invoke-virtual {v0},
Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->getUserId()Ljava/lang/String;
move-result-object v2
#挪用getUserId函數(shù)得到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個字節(jié),生存到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字節(jié)作為key,挪用des加密錯誤次數(shù)字符串,并生存到v1寄存器
invoke-virtual {v0, v1},
Lcom/alipay/mobile/framework/service/ext/security/bean/UserInfo;->setGestureErrorNum(Ljava/lang/String;)V
#挪用setGestureErrorNum函數(shù),將加密的字符串生存[/code]通過對上述代碼的闡明得知,第一次getGestureErrorNum的挪用取出的錯誤次數(shù)應(yīng)該是未加密的字符串,添加log代碼驗證,代碼如圖6所示
生存修改的smali文件,從頭編譯打包,安裝完成之后,輸入錯誤的手勢暗碼,log輸出數(shù)字依次遞增。最后一次輸入正確的手勢暗碼,錯誤次數(shù)從頭歸0。LogCat捕獲到的日志如圖7所示。
措施闡明到這里,我不禁揣摩,在錯誤次數(shù)未加密前,把v1寄存器的值配置為字符串“0”是不是就可以騙過付出寶而可以無限次的輸入手勢暗碼了呢?于是乎,我又開始了下面的驗證,代碼如圖8所示。
編譯打包,從頭安裝付出寶,輸入錯誤的手勢暗碼,發(fā)明5次錯誤之后措施照舊讓我們從頭登錄。看來我們這里配置錯誤次數(shù)已經(jīng)晚了,于是乎,繼承搜索挪用addUserInfo函數(shù)來加密gestureErrorNum的處所。個中,AlipayPattern.smali文件的settingGestureError函數(shù)引起了我的留意。函數(shù)
.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函數(shù)轉(zhuǎn)換成字符串范例,賦給v0