iOS安全攻防(十一):Hack實戰——探究支付寶app手勢密碼

發表於2014-02-13

在之前的 iOS安全攻防(七):Hack實戰——解除支付寶app手勢解鎖錯誤次數限制 中,留了一個問題,就是如何破解手勢密碼。

方法不唯一,本文介紹如何利用gdb分析破解app。

當沒有程式原始碼的情況下,我們如何利用gdb呢?

為了確定應該如何設定斷點,不得不反彙編程式來作為參考了。

在前面的文章提到過,支付寶app的手勢密碼校驗處理非常嚴謹,沒有丟擲BOOL判斷的方法讓我們可以直接修改返回值跳過驗證,而是將全部操作封在了

於是,我反彙編了支付寶app,找到手勢密碼解鎖的相關程式碼片段:

fdbdfnbfdnbfdn20140119222103468

紅色箭頭標註的地方,讓人欣喜,這將是我們斷點位置的最好選擇。

首先,檢視一下相關程式段符號表:

得到結果:

sdrgdrhdh20140119223323156

得到結果:

fhnfghjrfghj20140119223510187

確定了了關鍵函式的輸出符號。

啟動支付寶app,並gdb該程式:

在上述兩個函式位置設定斷點:

fgnfgjfgj20140119223917968

可以通過info breakpoints 檢視斷點:

fddnhhfd20140119224053812

continue到 getPassword 位置,列印函式棧:

fdhfdhdfh20140119224333500

我們可以確定了 getPassword 的返回地址是 0x00becb36 ,  對該地址加斷點:

然後繼續continue,程式將卡在上面的斷點上。

從上面的反彙編程式碼,我們可以知道,使用者輸入的密碼為存在r8上,原始密碼為存在r0上,我們直接列印出這兩個暫存器的值:

fgjfgjfj20140119225755890

正確密碼是個“Z”手勢圖畫,而當前輸入為“一”手勢圖畫。

可以得出結論,支付寶app的手勢密碼和大多數app一樣,手勢密碼格式是字串,9個點分別對應字元123456789。

相關文章