一绍弟、破解過程
1、打開軟件后著洼,有一個提示注冊的樟遣,輸入假碼后,彈窗“對不起身笤,您輸入的注冊碼文本是不正確的”豹悬。
2、載入OD液荸,查找字符串“注冊”屿衅,發(fā)現(xiàn)找不到。
3莹弊、這可從哪里入手呢?正好有一個彈窗涡尘,可以試試F12暫停法忍弛。
回到OD,按F12考抄,從而讓程序暫停细疚,再按Alt+K
選擇其中的那個MessageBoxExW,右鍵——“顯示調(diào)用”川梅,下斷點疯兼。
重新載入程序,再次輸入假碼后斷下來了贫途,然后F8一下吧彪,回到程序點擊對話框的“返回”按鈕,這時OD會自動往下運行一下丢早,接下來就是一路F8單步姨裸,直到OD的標題欄變成這樣
說明回到了程序領(lǐng)空了秧倾。
4歌憨、找到了彈窗的call了况脆,向上找是否有跳轉(zhuǎn)能夠跳過它的。
00532F1E |. E8 7D83FFFF call 0052B2A0 ; 關(guān)鍵call
00532F23 |. 85C0 test eax,eax
00532F25 |. 74 2F je short 00532F56 ; 關(guān)鍵跳
00532F27 |. 8B0D CC557300 mov ecx,dword ptr ds:[0x7355CC] ; HprSnap7.0072AE98
00532F2D |. 8981 58020000 mov dword ptr ds:[ecx+0x258],eax
00532F33 |. 8B56 20 mov edx,dword ptr ds:[esi+0x20]
00532F36 |. 52 push edx ; /hWnd
00532F37 |. FF15 6C806500 call dword ptr ds:[<&USER32.OpenClipb>; \OpenClipboard
00532F3D |. 85C0 test eax,eax
00532F3F |. 74 0C je short 00532F4D
00532F41 |. FF15 58806500 call dword ptr ds:[<&USER32.EmptyClip>; [EmptyClipboard
00532F47 |. FF15 5C806500 call dword ptr ds:[<&USER32.CloseClip>; [CloseClipboard
00532F4D |> 8BCE mov ecx,esi
00532F4F |. E8 EE8C1000 call <jmp.&mfc100u.#10058>
00532F54 |. EB 0E jmp short 00532F64
00532F56 |> 6A FF push -0x1
00532F58 |. 6A 00 push 0x0
00532F5A |. 68 85690000 push 0x6985
00532F5F |. E8 B2851000 call <jmp.&mfc100u.#1986> ; 主程序中彈出“注冊碼不正確的”call
00532F64 |> 8D4D F0 lea ecx,[local.4]
00532F67 |. FF15 3C8A6500 call dword ptr ds:[<&mfc100u.#903>] ; mfc100u.#14057
在關(guān)鍵跳處下斷點却音,重新載入程序赡艰,發(fā)現(xiàn)關(guān)鍵跳是已實現(xiàn)的售淡,那么就把它給nop掉。確實不會彈窗了慷垮,可是程序一用還是會加水印揖闸,說明還是試用版的。
5换帜、關(guān)鍵跳不行楔壤,那么就看看關(guān)鍵call。
在關(guān)鍵call里面下斷點惯驼,重新載入程序蹲嚣,F(xiàn)8單步下去,發(fā)現(xiàn)關(guān)鍵call里面代碼太多了祟牲,但是返回值放到eax中為0隙畜。那么修改返回值為1是不是可行呢?
再加上這個關(guān)鍵call被很多地方調(diào)用了说贝,所以前面只是修改關(guān)鍵跳是不夠用的议惰。
于是把關(guān)鍵call的段首改為
mov eax, 1
retn 0x14
這個retn是跟到了關(guān)鍵call的末尾才找到是返回0x14的。
6乡恕、發(fā)現(xiàn)這樣就可以了言询,程序截圖也是沒有水印了。
可是在啟動軟件時還是會彈窗的傲宜,看了視頻中的講解运杭,才知道自己的思路和視頻中的不太一樣。
7函卒、把程序重新載入OD辆憔,當啟動界面出來后,回到OD中按F12暫停报嵌,再Alt+K:
選擇圖片中的函數(shù)虱咧,右鍵——“顯示調(diào)用”,來到了一段代碼锚国,在斷尾下斷點腕巡。至于為何在斷尾下斷點,我認為是想運行到斷尾處血筑,跳出這個call逸雹,所以直接在斷尾下斷點营搅,省得在中間下了斷點還得再F8單步了。
重新載入程序后梆砸,總是會斷在斷點處转质。可以取消這個斷點帖世,F(xiàn)8單步從而跳出了這段代碼休蟹,來到了新的代碼處。這時才發(fā)現(xiàn)日矫,剛才是斷在一個call里面來著赂弓。
F8單步一會,我們發(fā)現(xiàn)在一個循環(huán)里面哪轿,跳不出去呀盈魁!只好在再次在這段代碼的段尾下斷點了。
重新載入程序窃诉,需要點擊啟動界面中的一個按鈕杨耙,這樣OD才會斷下來。因為程序直接彈出了啟動界面讓我們點擊飘痛,所以需要點擊里面的一個按鈕珊膜,OD才會斷下來。
F8單步宣脉,會發(fā)現(xiàn)又出了狀況:本來是F8單步著车柠,突然OD顯示運行了,F(xiàn)8也不管用了塑猖。視頻中給出的方法是在下面的代碼下斷點竹祷,Alt+t然后右鍵激活所有線程就好了。
來到了程序的領(lǐng)空
0047F6E9 |. /75 04 jnz short 0047F6EF ; 這個跳跳過了下面的跳羊苟。需要nop掉溶褪。
0047F6EB |. |85C0 test eax,eax
0047F6ED |. |75 63 jnz short 0047F752 ; 這個跳轉(zhuǎn)能夠跳過下面的彈窗call。需要改為jmp
0047F6EF |> \8B4B 20 mov ecx,dword ptr ds:[ebx+0x20]
0047F6F2 |. 6A 00 push 0x0
0047F6F4 |. 56 push esi
0047F6F5 |. 51 push ecx
0047F6F6 |. 8D8D 70FEFFFF lea ecx,[local.100]
0047F6FC |. E8 8FDD0A00 call 0052D490
0047F701 |. 68 70C86500 push 0065C870 ; h
0047F706 |. 8D8B 54010000 lea ecx,dword ptr ds:[ebx+0x154]
0047F70C |. C645 FC 20 mov byte ptr ss:[ebp-0x4],0x20
0047F710 |. FF15 E08C6500 call dword ptr ds:[<&mfc100u.#2614>] ; mfc100u.#2614
0047F716 |. 85C0 test eax,eax
0047F718 |. 7E 16 jle short 0047F730
0047F71A |. B8 1D000000 mov eax,0x1D
0047F71F |. 8D56 FF lea edx,dword ptr ds:[esi-0x1]
0047F722 |. 3BC2 cmp eax,edx
0047F724 |. 1BC0 sbb eax,eax
0047F726 |. F7D0 not eax
0047F728 |. 23C6 and eax,esi
0047F72A |. 8983 20030000 mov dword ptr ds:[ebx+0x320],eax
0047F730 |> 8D8D 70FEFFFF lea ecx,[local.100]
0047F736 |. E8 13BC1B00 call <jmp.&mfc100u.#3627> ; 彈窗的call
0047F73B |. 8D8D 70FEFFFF lea ecx,[local.100] ; 通過F8回到了這里
修改關(guān)鍵跳后保存践险,發(fā)現(xiàn)可以正常使用了。
二吹菱、總結(jié)
1巍虫、重點是F12暫停法的使用,一定要靈活些鳍刷。視頻中也說了“破解不了是因為思路不正確”占遥。理解了原理才能靈活,否則就只是模仿输瓜、記住套路瓦胎。我在未看這集視頻前就只會模仿前面視頻中講過的F12暫停法芬萍,只是知道怎么去做,對于為什么這么做沒有想過搔啊,所以在遇到困難了就不知所措了柬祠。