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