本章我們將學習特征碼的提取與定位,特征碼是軟件中一段固定的具有標志性的代碼片段,特征碼的用途非常廣泛,最常見的就是殺毒軟件的查殺了,查殺就是根據特征碼定位技術實現的,再比如木馬的免殺也是修改了特征碼的一些特征片段而躲避查殺的啦。
本章的內容對於軟件破解非常的有用,比如你需要破解一個程序,但你無法定位到關鍵按鈕的事件中去,此時你可以先查看待破解程序使用了那種編程語言來寫的,然后自己用對應的編程語言編寫一個簡單的小程序,並放入容易搜索到的字串,然后提取針對特定語言特定版本的通殺特征,最后應用到需要破解的程序中去。
------------------------------------------------------------
本章難度:★☆☆☆☆☆☆☆☆☆
本章課件:CM_02.zip
------------------------------------------------------------
MFC: sub eax,0a VC++6.0: sub eax,0a VB語言: 81 6C 24 易語言: FF 55 FC 5F 5E或 (e-debug) 萬能斷點: F3 A5 8B C8 83 E1 03 F3 A4 E8 Z(User32模塊下斷) Delphi: 74 0E 8B D3 8B 83 ?? ?? ?? ?? FF 93 ?? ?? ?? ?? 藍屏保護特征碼: 55 8B EC BB 06 00 00 00 藍屏防御特征碼: 55 8B EC 81 EC 14 00 00 00 68 0C 00 00 00
1.先來看一下這個CM例子,當我們點擊按鈕1的時候,會提示一個MessageBox信息框,而點擊按鈕2則程序沒有反映,我們現在要做的就是通過按鈕1提取到按鈕事件的特征碼,然后下斷點並定位到按鈕2的按鈕事件中。
2.打開OD直接將這個CM拖入OD中,默認會停在程序的OEP位置,這次我們不用字符串來找了換個思路,我們下一個MessageBox彈窗斷點,直接選擇【設置API斷點】,選擇消息框,然后選擇MessageBoxA就可以了。
3.接着我們按下【F9】讓程序跑起來,然后點擊CM程序中的【彈出窗口】按鈕,發現OD斷在了系統領空,系統領空的東西是不能改的,我們直接出這個CALL。
4.通過單步【F8】出CALL后,看到以下代碼,並沒有段首,我們繼續F8出這個call.
5.再次出CALL ,並沒有首的符號,這里還在函數的內部,我們繼續單步到【retn】出這個call.
6.最后看到了。
7.直接斷首下一個【F2】斷點,然后運行程序,再次點擊彈窗按鈕,OD再一次斷下了。
8.這只是一個獨立的彈窗過程並不是按鈕的按鈕事件,按鈕事件一定是調用了這個過程,所以我們需要找到是誰執行了這里的代碼。
由於,調用call指令會將當前指令的下一條指令的地址壓入棧存儲,所以我們就直接觀察堆棧中的參數就能夠定位到按鈕事件的上一層代碼的位置了。
9.OD直接搜索這個地址,看一下是不是有call 調用了他。
10.果然,我們果斷在這里下一個【F2】斷點,然后直接【F9】運行程序。
11.點擊【測試定位效果】按鈕,程序會被斷下,這更能確定,這就是按鈕的調用源頭。最后提取這段通殺特征【FF 55 FC 5F 5E】。
12.直接按下【F7】,進入按鈕二的核心代碼處。
13.如果要使用特征碼定位的話,可以在OD反匯編窗口按下【ctrl + B】,直接搜索即可。
總結:學會了這一個小技能,對於軟件的破解大有幫助,雖然簡單,但很實用
寫教程不容易,轉載請加出處,您添加出處,是我創作的動力!