標籤:ollydbg 反組譯碼
OllyDbg 使用筆記 (十)
參考
書:《加密與解密》
視頻:小甲魚 解密系列 視頻
樣本程式:http://pan.baidu.com/s/1kT1ce83
這個程式可以從標題列的“ unregistered”入手,尋找所有參考文本字串,搜尋 “unregistered”
可以找到這段代碼:
004046DD 90 nop004046DE 90 nop004046DF 90 nop004046E0 /$ 8A4424 04 mov al, byte ptr [esp+4]004046E4 |. 84C0 test al, al004046E6 |. 74 12 je short 004046FA004046E8 |. A1 440A4300 mov eax, dword ptr [430A44]004046ED |. 68 F09C4200 push 00429CF0 ; /Text = "Flash Jigsaw Producer"004046F2 |. 50 push eax ; |hWnd => NULL004046F3 |. FF15 5C924200 call dword ptr [<&USER32.SetWindowTex>; \SetWindowTextA004046F9 |. C3 retn004046FA |> 8B0D 440A4300 mov ecx, dword ptr [430A44]00404700 |. 68 C89C4200 push 00429CC8 ; /Text = "Flash Jigsaw Producer (unregistered)"00404705 |. 51 push ecx ; |hWnd => NULL00404706 |. FF15 5C924200 call dword ptr [<&USER32.SetWindowTex>; \SetWindowTextA0040470C \. C3 retn0040470D 90 nop0040470E 90 nop
可以發現004046E0~0040470C 是一段函數。
我們可以發現je跳轉比較關鍵,在這裡可以先嘗試讓je不跳轉。但是這樣只能使標題中不會出現(unregistered),被屏蔽的功能還是不能使用。
直接改je跳轉不行,我們可以看看引起je跳不跳轉到al,al是call這個函數的參數,我們需要找到call這個函數的地方,查看al的變化。
在004046E0下斷點。重新載入程式。按F9運行到斷點處。
可以在資訊版本中看到調用這個函數的地址。
圖片1
選中右鍵即可跳到call的地址。
想要找出call這個函數的地址,還可以選中004046E0,右鍵--〉尋找參考--〉選定命令,即可看到call這個函數的地址。
圖片2
我們可以看到,有兩地方call這個函數,在這兩個地方都下斷點。重新載入程式,按F9運行到第一個調用函數的命令。
004047AB |. 68 60034300 push 00430360 ; /IniFileName = "C:\Users\vbox32\AppData\Local\YavSoft\fjproducer\startup.ini"004047B0 |. 6A 28 push 28 ; |BufSize = 28 (40.)004047B2 |. 68 34034300 push 00430334 ; |ReturnBuffer = fjproduc.00430334004047B7 |. 68 089D4200 push 00429D08 ; |Default = "<-No Pass->"004047BC |. 51 push ecx ; |Key => "Password"004047BD |. 68 149D4200 push 00429D14 ; |Section = "Registration"004047C2 |. FF15 68904200 call dword ptr [<&KERNEL32.GetPrivate>; \GetPrivateProfileStringA004047C8 |. 68 34034300 push 00430334 ; ASCII "<No Pass>"004047CD |. E8 6EFEFFFF call 00404640004047D2 |. 50 push eax004047D3 |. E8 08FFFFFF call 004046E0004047D8 |. 83C4 08 add esp, 8004047DB |. 5E pop esi004047DC |. 83C4 28 add esp, 28004047DF \. C3 retn
我們可以發現改變al的是call 004046E0,在它上面下斷點,進入這個函數,可以發現這個函數是計算金鑰組不對的函數。
00404640 /$ 83EC 2C sub esp, 2C00404643 |. 56 push esi00404644 |. 8B7424 34 mov esi, dword ptr [esp+34]00404648 |. 8BC6 mov eax, esi0040464A |. 8D50 01 lea edx, dword ptr [eax+1]0040464D |. 8D49 00 lea ecx, dword ptr [ecx]00404650 |> 8A08 /mov cl, byte ptr [eax]00404652 |. 40 |inc eax00404653 |. 84C9 |test cl, cl00404655 |.^ 75 F9 \jnz short 0040465000404657 |. 2BC2 sub eax, edx00404659 |. 83F8 04 cmp eax, 40040465C |. 73 07 jnb short 004046650040465E 32C0 xor al, al00404660 |. 5E pop esi00404661 |. 83C4 2C add esp, 2C00404664 |. C3 retn00404665 |> 6A 03 push 300404667 |. 68 C49C4200 push 00429CC4 ; ASCII "fjr"0040466C |. 56 push esi0040466D |. E8 6EAA0100 call 0041F0E000404672 |. 83C4 0C add esp, 0C00404675 |. 85C0 test eax, eax00404677 |.^ 75 E5 jnz short 0040465E
F8單步運行,可以發現是xor al,al 把al變成0的,可以把xor al,al 改成mov al,1。在運行,可以發被屏蔽的功能已經可以用了。
OllyDbg 使用筆記 (十)