大家好,又见面了,我是全栈君。
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, esi00417459 . C64424 30 01 mov byte ptr [esp+30], 10041745E . E8 2D020000 call 0041769000417463 . 84C0 test al, al00417465 . 75 7C jnz short 004174E300417467 . 51 push ecx00417468 . 8D5424 14 lea edx, dword ptr [esp+14]0041746C . 8BCC mov ecx, esp0041746E . 896424 20 mov dword ptr [esp+20], esp00417472 . 52 push edx00417473 . E8 9D6A0400 call 0045DF1500417478 . 51 push ecx00417479 . 8D4424 1C lea eax, dword ptr [esp+1C]0041747D . 8BCC mov ecx, esp0041747F . 896424 20 mov dword ptr [esp+20], esp00417483 . 50 push eax00417484 . C64424 34 03 mov byte ptr [esp+34], 300417489 . E8 876A0400 call 0045DF150041748E . 8BCE mov ecx, esi00417490 . C64424 30 01 mov byte ptr [esp+30], 100417495 . E8 F6010000 call 004176900041749A . 84C0 test al, al0041749C . 75 45 jnz short 004174E30041749E . 6A 00 push 0004174A0 . 68 04544800 push 00485404 ; ASCII "XoftSpy"004174A5 . 68 C4684800 push 004868C4 ; ASCII "Invalid code."004174AA . 8BCE mov ecx, esi004174AC . E8 664F0400 call 0045C417004174B1 . 68 48FA4800 push 0048FA48004174B6 . 8BCD mov ecx, ebp004174B8 . E8 206E0400 call 0045E2DD004174BD . 68 48FA4800 push 0048FA48004174C2 . 8BCF mov ecx, edi004174C4 . E8 146E0400 call 0045E2DD004174C9 . 68 48FA4800 push 0048FA48004174CE . 8BCB mov ecx, ebx004174D0 . E8 086E0400 call 0045E2DD004174D5 . 6A 00 push 0004174D7 . 8BCE mov ecx, esi004174D9 . E8 03590400 call 0045CDE1004174DE . E9 9D000000 jmp 00417580004174E3 > 57 push edi004174E4 . 55 push ebp004174E5 . E8 769D0100 call 00431260004174EA . 83C4 08 add esp, 8004174ED . 8BCE mov ecx, esi004174EF . 6A 00 push 0004174F1 . 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 eax0040147E . 51 push ecx0040147F . C64424 3C 03 mov byte ptr [esp+3C], 300401484 . E8 17FF0200 call 004313A000401489 . 8B8E C0000000 mov ecx, dword ptr [esi+C0]0040148F . 83C4 08 add esp, 800401492 . E8 093C0300 call 004350A000401497 . 84C0 test al, al00401499 . 74 12 je short 004014AD0040149B . 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 0045E2DD004014A9 . 6A 00 push 0004014AB . EB 10 jmp short 004014BD004014AD > 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。能够发现程序就被注冊了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115326.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...