OllyDbg 使用笔记 (十一)
参考
书:《加密与解密》
视频:小甲鱼 解密系列 视频
示例程序下载地址:http://pan.baidu.com/s/1mgxCtsc
此程序可以从注册时未输入last name 产生的 提示信息入手。
图片1
查找所有参考文本字串,搜索“Enter a Last”,可以看到:
图片2
观察前后的字符串,可以发现这堆字符串的最底下,ASCII "Registration Key accepted!" 与ASCII "Registration Key Failed!" 很关键
点击ASCII "Registration Key accepted!" 查看代码。
004A5829 . 64:8910 mov dword ptr fs:[eax], edx 004A582C . 68 41584A00 push 004A5841 004A5831 > 8B45 CC mov eax, dword ptr [ebp-34] 004A5834 . E8 5BE8F5FF call 00404094 004A5839 . C3 retn 004A583A .^ E9 E9EFF5FF jmp 00404828 004A583F .^ EB F0 jmp short 004A5831 004A5841 . C645 F3 01 mov byte ptr [ebp-D], 1 004A5845 . 807D 08 00 cmp byte ptr [ebp+8], 0 004A5849 . 75 0A jnz short 004A5855 004A584B . B8 A85A4A00 mov eax, 004A5AA8 ; ASCII "Registration Key accepted!" 004A5850 . E8 A339F9FF call 004391F8 004A5855 > A1 F4535A00 mov eax, dword ptr [5A53F4] 004A585A . C600 00 mov byte ptr [eax], 0 004A585D . EB 17 jmp short 004A5876 004A585F > 807D 08 00 cmp byte ptr [ebp+8], 0 004A5863 . 75 11 jnz short 004A5876 004A5865 . 6A 30 push 30 ; /BeepType = MB_ICONEXCLAMATION 004A5867 . E8 C829F6FF call <jmp.&user32.MessageBeep> ; \MessageBeep 004A586C . B8 CC5A4A00 mov eax, 004A5ACC ; ASCII "Registration Key Failed!"
我们可以发现这段代码很有dephi特点,用push 跟 retn结合 来实现jmp,例如上面代码中的004A582C跟004A5839。
我们先在004A5829下断点,重新运行程序,尝试注册程序。但是可以发现,程序并没有断下来,弹出error窗口。
图片3
我们可以看看下断点处上面的代码。
我们可以在004A5120处下断点,重新运行程序,尝试注册程序。可以发现程序断在了004A5120,按F8单步运行
运行到004A5461 call 0040A070时会弹出error窗口:
为了继续往下运行在此处下断点,从新运行程序,运行到004A5461 ,把call 0040A070改成nop继续运行。
改变后面的跳转实不实现,使得程序能运行到此处,就可完成注册。
004A584B . B8 A85A4A00 mov eax, 004A5AA8 ; ASCII "Registration Key accepted!"