OllyDbg 使用笔记 (十二)
OllyDbg 使用筆記 (十二)
參考
書:《加密與解密》
視頻:小甲魚 解密系列 視頻
演示樣例程序下載地址:http://pan.baidu.com/s/1eQiV6aI
安裝好程序后,打開程序能夠在About中看到注冊界面。能夠先從輸入的API入手試試。
右鍵-->查找-->全部模塊間的調用,搜索GetWindowTextA (直接輸入這些字母就可以搜索),選中找到的的調用,右鍵-->“在每一個調用到GetWindowTextA設置斷點”。? 我們能夠查看OD設置了3個斷點。(我們也能夠按Ctrl+N查看輸入輸出表搜索GetWindowTextA設置斷點)。
按F9執行程序,在程序還沒有執行到現實接面時。前面兩個斷點就觸發了,并且觸發了好多次。
能夠知道前面的2個都與About界面的輸入無關,取消這兩個斷點。又一次執行程序。在About中的Registration中輸入name和key,點擊OK,能夠發現程序斷在了第3個斷點上。
按F8單步執行程序。執行到以下代碼處:
00417457 . 8BCE mov ecx, esi 00417459 . C64424 30 01 mov byte ptr [esp+30], 1 0041745E . E8 2D020000 call 00417690 00417463 . 84C0 test al, al 00417465 . 75 7C jnz short 004174E3 00417467 . 51 push ecx 00417468 . 8D5424 14 lea edx, dword ptr [esp+14] 0041746C . 8BCC mov ecx, esp 0041746E . 896424 20 mov dword ptr [esp+20], esp 00417472 . 52 push edx 00417473 . E8 9D6A0400 call 0045DF15 00417478 . 51 push ecx 00417479 . 8D4424 1C lea eax, dword ptr [esp+1C] 0041747D . 8BCC mov ecx, esp 0041747F . 896424 20 mov dword ptr [esp+20], esp 00417483 . 50 push eax 00417484 . C64424 34 03 mov byte ptr [esp+34], 3 00417489 . E8 876A0400 call 0045DF15 0041748E . 8BCE mov ecx, esi 00417490 . C64424 30 01 mov byte ptr [esp+30], 1 00417495 . E8 F6010000 call 00417690 0041749A . 84C0 test al, al 0041749C . 75 45 jnz short 004174E3 0041749E . 6A 00 push 0 004174A0 . 68 04544800 push 00485404 ; ASCII "XoftSpy" 004174A5 . 68 C4684800 push 004868C4 ; ASCII "Invalid code." 004174AA . 8BCE mov ecx, esi 004174AC . E8 664F0400 call 0045C417 004174B1 . 68 48FA4800 push 0048FA48 004174B6 . 8BCD mov ecx, ebp 004174B8 . E8 206E0400 call 0045E2DD 004174BD . 68 48FA4800 push 0048FA48 004174C2 . 8BCF mov ecx, edi 004174C4 . E8 146E0400 call 0045E2DD 004174C9 . 68 48FA4800 push 0048FA48 004174CE . 8BCB mov ecx, ebx 004174D0 . E8 086E0400 call 0045E2DD 004174D5 . 6A 00 push 0 004174D7 . 8BCE mov ecx, esi 004174D9 . E8 03590400 call 0045CDE1 004174DE . E9 9D000000 jmp 00417580 004174E3 > 57 push edi 004174E4 . 55 push ebp 004174E5 . E8 769D0100 call 00431260 004174EA . 83C4 08 add esp, 8 004174ED . 8BCE mov ecx, esi 004174EF . 6A 00 push 0 004174F1 . 68 04544800 push 00485404 ; ASCII "XoftSpy" 004174F6 . 68 98684800 push 00486898 ; ASCII "Congratulations! successfully registered" 004174FB . E8 174F0400 call 0045C417
我們能夠發現?jnz???? short 004174E3? 非常關鍵它的跳轉決定了后面輸出窗體是"Invalid code." 還是 "Congratulations! successfully registered" 。可是假設我們僅僅是把它改成jmp ?? short 004174E3 盡管會彈出注冊成功的窗體。但實際上還是沒有注冊。我們能夠看看它前面的call??? 00417690。
又一次執行程序,進入00417690。我們能夠查看00417690 函數,能夠發現這個函數有兩處返回。第一處返回前。函數使得al變為1, 第二處返回前,函數使得al變為0。按F8,單步執行程序,改變標志寄存器或者指令使得00417690 函數在第一處retn 返回。可是這樣實現了以后依舊是會彈出注冊成功的窗體,但實際上還是沒有注冊。
我們能夠嘗試別的方法進行破解。
沖關鍵的字符串入手。
我們能夠重About界面中的“This XoftSpy license has not been registered” 入手,搜索次字符串,查看代碼所在的位置
0040147D . 50 push eax 0040147E . 51 push ecx 0040147F . C64424 3C 03 mov byte ptr [esp+3C], 3 00401484 . E8 17FF0200 call 004313A0 00401489 . 8B8E C0000000 mov ecx, dword ptr [esi+C0] 0040148F . 83C4 08 add esp, 8 00401492 . E8 093C0300 call 004350A0 00401497 . 84C0 test al, al 00401499 . 74 12 je short 004014AD 0040149B . 68 C4514800 push 004851C4 ; ASCII "This license of XoftSpy has been registered" 004014A0 . 8D4C24 08 lea ecx, dword ptr [esp+8] 004014A4 . E8 34CE0500 call 0045E2DD 004014A9 . 6A 00 push 0 004014AB . EB 10 jmp short 004014BD 004014AD > 68 94514800 push 00485194 ; ASCII "This XoftSpy license has not been registered" 004014B2 . 8D4C24 08 lea ecx, dword ptr [esp+8]
在0040147D處下斷點。又一次執行程序。能夠發現當按下主界面的Aboutbutton時。就會中斷在0040147D處。嘗試直接把? je????? short 004014AD? 改成 nop。能夠發現程序就被注冊了。
轉載于:https://www.cnblogs.com/yxwkf/p/5395005.html
總結
以上是生活随笔為你收集整理的OllyDbg 使用笔记 (十二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回溯算法之全排列问题
- 下一篇: TPC-H