閱讀241 返回首頁    go 阿裏雲 go 技術社區[雲棲]


qq安全原理

    故事總要有緣由,那麼這個故事的緣由就是,當我以前寫了一個獲取其它進程密碼框密碼的時候(前幾篇博客中有描述),我抱著試一試的心情去試探了一下能不能得到 QQ 的密碼,當我抓到密碼框的句柄,然後輸入給程序的時候,結果令人失望,並沒有任何結果,或許這根本就是一個假的密碼框。這便激發了我的興趣,便有了這次探究。

        QQ 的安全密碼框果然是下了功夫的。網上搜索相關內容,才發現,以前騰訊用了韓國的技術來保證密碼的安全性,但由於涉及到驅動,造成了一部分的不穩定性,所以最後取消掉了這種方法,那麼最新的方法是如何做到密碼安全呢?這種密碼安全是否還有提升的空間呢?我決定試一試。

        首先想到的辦法便是鍵盤鉤子,大家都知道,鍵盤鉤子可以監聽係統中所有的擊鍵信息,馬上編碼實現,主要調用為:

  1. HHOOK SetWindowsHookEx(          int idHook,  
  2.     HOOKPROC lpfn,  
  3.     HINSTANCE hMod,  
  4.     DWORD dwThreadId  
  5. );  

        傳入的參數是:WH_KEYBOARD

        打開程序監聽,目標程序選擇了大家不太關注的QQMusic(手頭上暫時隻有這個程序),打開密碼框輸入我的密碼,結果沒有任何有用信息,為什麼呢?我們知道如果在鉤子鏈中前麵的鉤子沒有顯示調用後麵的鉤子,後麵是得不到信息的,我們能不能把自己的鉤子放到最前麵呢。有兩點需要注意,一,後安裝的鉤子會在鉤子鏈的最前麵,二,我們安裝的是普通鉤子,還有一種低級的鍵盤鉤子會在其前麵執行。那我們直接安裝低級鉤子並且盡量遲的調用不就行了麼。

        程序完成後,我發現,確實可以收到鍵盤信息了,不過在收到的信息中有許多幹擾信息,基於純理論分析這一做法,可以猜測,肯定有一個定時發送模擬按鍵消息的 Timer 在執行,去掉這個 Timer,當然就沒有了幹擾信息。但事情進行的不是那麼簡單,我發現,每次我接收到的鍵盤消息並不是我真正按下去的按鍵,莫非它安裝了一個在我前麵的鉤子,改掉了按鍵信息?於是我便寫了一個程序,去分析當前係統中的鉤子的信息,結果如下:

  1. 0x64b012d       0xc2cbf81               QQMusic.exe  
  2. 0x64b012d       0xc2cbf81               QQMusic.exe  
  3. 0x64c012d       0xc2cbf81               QQMusic.exe  
  4. 0x64c012d       0xc2cbf81               QQMusic.exe  
  5. 0x64c012d       0xc2cbf81               QQMusic.exe  
  6. 0x64d012d       0xc2cbf81               QQMusic.exe  
  7. 0x64d012d       0xc2cbf81               QQMusic.exe  
  8. 0x64d012d       0xc2cbf81               QQMusic.exe  
  9. 0x64e012d       0xc2cbf81               QQMusic.exe  
  10. 0x64e012d       0xc2cbf81               QQMusic.exe  
  11. 0x64e012d       0xc2cbf81               QQMusic.exe  
  12. 0x64f012d       0xc2cbf81               QQMusic.exe  
  13. 0x64f012d       0xc2cbf81               QQMusic.exe  
  14. 0x64f012d       0xc2cbf81               QQMusic.exe  
  15. 0x650012d       0xc2cbf81               QQMusic.exe  
  16. 0x650012d       0xc2cbf81               QQMusic.exe  
  17. 0x650012d       0xc2cbf81               QQMusic.exe  
  18. 0x651012d       0xc2cbf81               QQMusic.exe  
  19. 0x651012d       0xc2cbf81               QQMusic.exe  
  20. 0x652012d       0xc2cbf81               QQMusic.exe  
  21. 0x652012d       0xc2cbf81               QQMusic.exe  
  22. 0x652012d       0xc2cbf81               QQMusic.exe  
  23. 0x652012d       0xc2cbf81               QQMusic.exe  
  24. 0x652012d       0xc2cbf81               QQMusic.exe  
  25. 0x652012d       0xc2cbf81               QQMusic.exe  

        第一列便是鉤子的句柄值,我是每隔一秒鍾掃描一次的,可以清楚的發現,值在不斷的變化,那麼很容易便可以猜想到,它肯定在不斷去設置新的鉤子來達到使其在鉤子最前端這一效果。那麼去掉這個鉤子,我們便能夠使自己的鉤子監聽到鍵盤信息了。

        本文隻給出了思路,可以看出,在密碼安全這一方麵,還是做了不少工夫的,現在密碼的安全也越來越受到各個公司的重視,希望能夠以此文互相交流,使我們的密碼安全做到更好。

最後更新:2017-04-03 07:57:16

  上一篇:go 找不到BufferedImage這個Class的解決方法
  下一篇:go java.util.concurrent包(5)——CountDownLatch使用