常見保護的攻擊:序列號方式 續
怎么攻擊序列號保護
要找到序列號,或修改掉判斷序列號之后的跳轉指令,最重要的是要利用各種工具定位判斷序列號的代碼段。這些常用的API包括GetDlgItemInt, GetDlgItemTextA, GetTabbedTextExtentA, GetWindowTextA, Hmemcpy (僅僅視窗系統 9x), lstrcmp, lstrlen, memcpy (限于NT/2000)。
1)數據約束性的秘訣
這個概念是+ORC提出的,只限于用明文比較注冊碼的那種保護方式。在大多數序列號保護的程式中,那個真正的、正確的注冊碼或密碼(Password)會于某個時刻出目前內存中,當然他出現的位置是不定的,但多數情況下他會在一個范圍之內,即存放用戶輸入序列號的內存地址±0X90字節的地方。這是由于加密者所用工具內部的一個視窗系統數據傳輸的約束條件決定的。
2)Hmemcpy函數(俗稱萬能斷點)
函數Hmemcpy是視窗系統9x系統的內部函數,位于KERNEL32.DLL中,他的作用是將內存中的一塊數據拷貝到另一個地方。由于視窗系統9x系統頻繁使用該函數處理各種字串,因此用他作為斷點非常實用,他是視窗系統9x平臺最常用的斷點。在視窗系統 NT/2K中沒有這個斷點,因為其內核和視窗系統9x完全不同。
3)S命令
由于S命令忽略不在內存中的頁面,因此你能使用32位平面地址數據段描述符30h在整個4GB(0~FFFFFFFFh )空間查找,一般用在視窗系統9x下面。具體步驟為:先輸入姓名或假的序列號(如: 78787878),按Ctrl+D轉換到SoftICE下,下搜索命令:
s 30:0 L ffffffff ’78787878’
會搜索出地址:ss:ssssssss(這些地址可能不止一個),然后用bpm斷點監視搜索到的假注冊碼,跟蹤一下程式怎么處理輸入的序列號,就有可能找到正確的序列號。
4)利用消息斷點
在處理字串方面能利用消息斷點WM_GETTEXT和WM_COMMAND。前者用來讀取某個控件中的文本,比如拷貝編輯窗口中的序列號到程式提供的一個緩沖區里;后者則是用來通知某個控件的父窗口的,比如當輸入序列號之后點擊OK按鈕,則該按鈕的父窗口將收到一個WM_COMMAND消息,以表明該按鈕被點擊。
BMSG xxxx WM_GETTEXT (攔截序列號)
BMSG xxxx WM_COMMAND (攔截OK按鈕)
能用SoftICE提供的HWND命令獲得窗口句柄的信息,也能利用Visual Studio中的Spy++實用工具得到相應窗口的句柄值,然后用BMSG設斷點攔截。例:
BMSG 0129 WM_COMMAND
序列號方式的保護方式就為大家介紹完了,希望大家已經掌握。如果想了解更多的相關內容,請大家閱讀:常見保護的攻擊:序列號方式
【編輯推薦】