OllyDbg 使用注意事项 (十)
2015-10-12 08:24
295 查看
OllyDbg 用笔记 (十)
參考
书:《加密与解密》
视频:小甲鱼 解密系列 视频
演示样例程序下载地址:http://pan.baidu.com/s/1kT1ce83
这个程序能够从标题栏的“ unregistered”入手,查找全部參考文本字串,搜索 “unregistered”
能够找到这段代码:
能够发现004046E0~0040470C 是一段函数。
我们能够发现je跳转比較关键,在这里能够先尝试让je不跳转。
可是这样仅仅能使标题中不会出现(unregistered),被屏蔽的功能还是不能使用。
直接改je跳转不行,我们能够看看引起je跳不跳转到al。al是call这个函数的參数,我们须要找到call这个函数的地方,查看al的变化。
在004046E0下断点。
又一次载入程序。按F9执行到断点处。
能够在信息版本号中看到调用这个函数的地址。
图片1
选中右键就可以跳到call的地址。
想要找出call这个函数的地址,还能够选中004046E0,右键--〉查找參考--〉选定命令,就可以看到call这个函数的地址。
图片2
我们能够看到,有两地方call这个函数,在这两个地方都下断点。又一次载入程序,按F9执行到第一个调用函数的命令。
我们能够发现改变al的是call 004046E0。在它上面下断点。进入这个函数,能够发现这个函数是计算密钥对不正确的函数。
F8单步执行。能够发现是xor al,al 把al变成0的。能够把xor al,al 改成mov al,1。
在执行,能够发被屏蔽的功能已经能够用了。
參考
书:《加密与解密》
视频:小甲鱼 解密系列 视频
演示样例程序下载地址:http://pan.baidu.com/s/1kT1ce83
这个程序能够从标题栏的“ unregistered”入手,查找全部參考文本字串,搜索 “unregistered”
能够找到这段代码:
004046DD 90 nop 004046DE 90 nop 004046DF 90 nop 004046E0 /$ 8A4424 04 mov al, byte ptr [esp+4] 004046E4 |. 84C0 test al, al 004046E6 |. 74 12 je short 004046FA 004046E8 |. A1 440A4300 mov eax, dword ptr [430A44] 004046ED |. 68 F09C4200 push 00429CF0 ; /Text = "Flash Jigsaw Producer" 004046F2 |. 50 push eax ; |hWnd => NULL 004046F3 |. FF15 5C924200 call dword ptr [<&USER32.SetWindowTex>; \SetWindowTextA 004046F9 |. C3 retn 004046FA |> 8B0D 440A4300 mov ecx, dword ptr [430A44] 00404700 |. 68 C89C4200 push 00429CC8 ; /Text = "Flash Jigsaw Producer (unregistered)" 00404705 |. 51 push ecx ; |hWnd => NULL 00404706 |. FF15 5C924200 call dword ptr [<&USER32.SetWindowTex>; \SetWindowTextA 0040470C \. C3 retn 0040470D 90 nop 0040470E 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.00430334 004047B7 |. 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>; \GetPrivateProfileStringA 004047C8 |. 68 34034300 push 00430334 ; ASCII "<No Pass>" 004047CD |. E8 6EFEFFFF call 00404640 004047D2 |. 50 push eax 004047D3 |. E8 08FFFFFF call 004046E0 004047D8 |. 83C4 08 add esp, 8 004047DB |. 5E pop esi 004047DC |. 83C4 28 add esp, 28 004047DF \. C3 retn
我们能够发现改变al的是call 004046E0。在它上面下断点。进入这个函数,能够发现这个函数是计算密钥对不正确的函数。
00404640 /$ 83EC 2C sub esp, 2C 00404643 |. 56 push esi 00404644 |. 8B7424 34 mov esi, dword ptr [esp+34] 00404648 |. 8BC6 mov eax, esi 0040464A |. 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 eax 00404653 |. 84C9 |test cl, cl 00404655 |.^ 75 F9 \jnz short 00404650 00404657 |. 2BC2 sub eax, edx 00404659 |. 83F8 04 cmp eax, 4 0040465C |. 73 07 jnb short 00404665 0040465E 32C0 xor al, al 00404660 |. 5E pop esi 00404661 |. 83C4 2C add esp, 2C 00404664 |. C3 retn 00404665 |> 6A 03 push 3 00404667 |. 68 C49C4200 push 00429CC4 ; ASCII "fjr" 0040466C |. 56 push esi 0040466D |. E8 6EAA0100 call 0041F0E0 00404672 |. 83C4 0C add esp, 0C 00404675 |. 85C0 test eax, eax 00404677 |.^ 75 E5 jnz short 0040465E
F8单步执行。能够发现是xor al,al 把al变成0的。能够把xor al,al 改成mov al,1。
在执行,能够发被屏蔽的功能已经能够用了。