用作例子的軟件是 HyperSnap 7 專業(yè)版

在未注冊(cè)時(shí),一打開(kāi)會(huì)提示注冊(cè),猜測(cè)這是從注冊(cè)表中讀取了注冊(cè)信息,所以可以對(duì)注冊(cè)表操作函數(shù)下斷點(diǎn),從而找到驗(yàn)證的關(guān)鍵代碼并進(jìn)行分析修改達(dá)到破解的目的。
一、
1、來(lái)到軟件主程序,右鍵——查找——所有模塊間調(diào)用

根據(jù)前面的經(jīng)驗(yàn),知道注冊(cè)表函數(shù)都以Reg開(kāi)頭,所以可以按鍵盤上的r e g鍵,這會(huì)自動(dòng)跳到以Reg開(kāi)頭的函數(shù)那里。

我們要尋找的是打開(kāi)注冊(cè)表的函數(shù),找到后右鍵,對(duì)每個(gè)調(diào)用下斷點(diǎn)。
2、重新載入程序并運(yùn)行,斷下來(lái)后觀察堆棧窗口中是否會(huì)出現(xiàn)和進(jìn)程名HyperSnap相似的字符串。
出現(xiàn)后就單步跟蹤,還可能得跳出call后繼續(xù)跟蹤。主要是看讀取注冊(cè)信息的代碼所在的call返回值是否是0或者1。
如果出call后發(fā)現(xiàn)返回值不是0也不是1,證明這個(gè)call就不是關(guān)鍵call,要么繼續(xù)出call;要么繼續(xù)F9,找下一個(gè)斷下來(lái)的。這是最要緊最難的一步了,也就是在這一步找到了關(guān)鍵call。
在第10次斷下來(lái)后,出call一次還得再出call一次,才找到了關(guān)鍵call。
在這一過(guò)程中,看到可疑的關(guān)鍵處,可以修改一下試試,看能夠達(dá)到破解目的。
004A0B5E |. E8 2DBA0800 call 0052C590 ; 這個(gè)就是關(guān)鍵call了。第2次出call會(huì)來(lái)到這里
004A0B63 |. A3 F0B07200 mov dword ptr ds:[0x72B0F0],eax ; 關(guān)鍵處,eax的值影響了驗(yàn)證是否通過(guò)
004A0B68 |. E8 53CD0900 call 0053D8C0
3、原本想直接修改關(guān)鍵call的返回值,但是OD提示重定位的問(wèn)題

那么只好對(duì)關(guān)鍵call進(jìn)行替換了
004A0B5E B8 01000000 mov eax,0x1 ; 把關(guān)鍵call替換了
004A0B63 |. A3 F0B07200 mov dword ptr ds:[0x72B0F0],eax ; 關(guān)鍵處,eax的值影響了驗(yàn)證是否通過(guò)
004A0B68 |. E8 53CD0900 call 0053D8C0