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!"