iOS安全攻防(十一):Hack實戰——探究支付寶app手勢密碼 – iPhone手機開發技術文章 iPhone軟體開發教學課程

Hack實戰——探究支付寶app手勢密碼

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

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

當沒有程序源代碼的情況下,我們如何利用gdb呢?

為瞭確定應該如何設置斷點,不得不反匯編程序來作為參考瞭。

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

  1. -(void)gestureInputView:(id)view didFinishWithPassword:(id)password;

    於是,我反匯編瞭支付寶app,找到手勢密碼解鎖的相關代碼片段:

    紅色箭頭標註的地方,讓人欣喜,這將是我們斷點位置的最好選擇。vcD48cD48YnIgLz48L3A+PHA+ytfPyKOssum/tNK7z8LP4LnYs8zQ8rbOt/u6xbHto7o8L3A+PHA+PHByZSBjbGFzcz0=”brush:java;”>nm Portal | grep -i gestureinputview
    得到結果:

    nm Portal | grep -i getpassword

    得到結果:

    確定瞭瞭關鍵函數的輸出符號。

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

    gdb -q -p 671
    

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

    可以通過info breakpoints 查看斷點:

    continue到 getPassword 位置,打印函數棧:

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

    b * 0xbecb36

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

    從上面的反匯編代碼,我們可以知道,用戶輸入的密碼為存在r8上,原始密碼為存在r0上,我們直接打印出這兩個寄存器的值:

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

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

發佈留言