破解Easy Video to 3GP Converter注册码

被害者:Easy Video to 3GP Converter 1.4.2

工具:FastScanner(查壳工具)   OllyDbg(调试器)

作案者:Xelloss

之前也看了不少教程,自己也尝试过,但运气不好,找来的软件都是网络注册的,本地破不了汗 。这次总算是找到个正常的了...

首先先打 卡软件点Register,在User Name里我们填上这边要注册的名字(我填的Xelloss),在Registration Code里随便填一点东西(我填了fark)。点OK之后弹出了“Invalid user name or registeration code”。

接下来对软件用OD进行调试。在里面搜索 ACSII,输入关键字“Invalid user name or registeration code”找到一条Enter进行追踪,调查立即参数,发现只有一个地址,不用管它。接下来光标往上移一点发现

004060A5   > \6A 40         push    40   是被00405FC0   . /0F85 DF000000 jnz     004060A5  从老远跳过来的。

 

锁定那个jnz,看看它的周围

00405FA9   8D8424 880000>lea     eax, dword ptr [esp+88]
00405FB0   8D4C24 48     lea     ecx, dword ptr [esp+48]
00405FB4   50            push    eax
00405FB5   51            push    ecx
00405FB6   .  E8 35F8FFFF   call    004057F0
00405FBB  
83C4 08       add     esp, 8
00405FBE  
85C0          test    eax, eax
00405FC0   0F85 DF000000 jnz     004060A5
00405FC6  
8A4C04 08     mov     cl, byte ptr [esp+eax+8]
00405FCA   8888 98964100 mov     byte ptr [eax+419698], cl
00405FD0   40            inc     eax
00405FD1   84C9          test    cl, cl
00405FD3   .^ 75 F1         jnz     short 00405FC6
00405FD5  
33C0          xor     eax, eax
00405FD7   8A4C04 48     mov     cl, byte ptr [esp+eax+48]
00405FDB   8888 50924100 mov     byte ptr [eax+419250], cl

我们可以看 出00405FB6   .  E8 35F8FFFF   call    004057F0 是关键点。

00405FA9   8D8424 880000>lea     eax, dword ptr [esp+88] 上按F2下个断点按F9运行程序,注册,输入Name和Code后OK,OllyDBG 跳了出来,暂停在我们下的断点处。看信息窗口

Stack address=0012A310, (ASCII "7E87237D"
eax=00000001

这东西一会儿有用。F8单步一次后可以看到信息窗口里我们刚刚输入的信息:

Stack address=0012A2D0, (ASCII "fark"
ecx=77A7E910 (ntdll.77A7E910)

也就是我们输入的Code。根据经验可以看出这儿准备要比对注册码。继续F8单步。

 

走到00405FB6   .  E8 35F8FFFF   call    004057F0 这步,按F7跟进去。我们看到的是这么一段函数:

004057F0  /$  53            push    ebx 
004057F1  |8B5C24 08     mov     ebx, dword ptr [esp+8
004057F5  |56            push    esi 
004057F6  |57            push    edi 
004057F7  |8BFB          mov     edi, ebx 
004057F9  |83C9 FF       or      ecx, FFFFFFFF 
004057FC  |33C0          xor     eax, eax 
004057FE  |33D2          xor     edx, edx 
00405800  |.  F2:AE         repne   scas byte ptr es:[edi
00405802  |.  F7D1          not     ecx 
00405804  |49            dec     ecx 
00405805  |85C9          test    ecx, ecx 
00405807  |7E 15         jle     short 0040581E 
00405809 
|>  8A041A        /mov     al, byte ptr [edx+ebx
0040580C  |3C 61         |cmp     al, 61 
0040580E 
|7C 09         |jl      short 00405819 
00405810 
|3C 7A         |cmp     al, 7A 
00405812 
|7F 05         |jg      short 00405819 
00405814 
|2C 20         |sub     al, 20 
00405816 
|88041A        |mov     byte ptr [edx+ebx], al 
00405819  |>  42            |inc     edx 
0040581A  |3BD1          |cmp     edx, ecx 
0040581C  |.^ 7C EB         \jl      short 00405809 
0040581E 
|>  8B7424 14     mov     esi, dword ptr [esp+14
00405822  |8BC3          mov     eax, ebx 
00405824  |>  8A10          /mov     dl, byte ptr [eax
00405826  |8A1E          |mov     bl, byte ptr [esi
00405828  |8ACA          |mov     cl, dl 
0040582A  |3AD3          |cmp     dl, bl 
0040582C  |75 20         |jnz     short 0040584E 
0040582E 
|84C9          |test    cl, cl 
00405830  |74 16         |je      short 00405848 
00405832 
|8A50 01       |mov     dl, byte ptr [eax+1
00405835  |8A5E 01       |mov     bl, byte ptr [esi+1
00405838  |8ACA          |mov     cl, dl 
0040583A  |3AD3          |cmp     dl, bl 
0040583C  |75 10         |jnz     short 0040584E 
0040583E 
|83C0 02       |add     eax,
00405841 
|83C6 02       |add     esi,
00405844 
|84C9          |test    cl, cl 
00405846  |.^ 75 DC         \jnz     short 00405824 
00405848 
|>  5F            pop     edi 
00405849  |5E            pop     esi 
0040584A  |33C0          xor     eax, eax 
0040584C  |5B            pop     ebx 
0040584D  |.  C3            retn 
0040584E  |>  1BC0          sbb     eax, eax 
00405850  |5F            pop     edi 
00405851  |5E            pop     esi 
00405852  |5B            pop     ebx 
00405853  |83D8 FF       sbb     eax, -
00405856 
\.  C3            retn

继续单步。经过分析可以发现前面只是在检验注册码的合法性和大小写转换。接下来是重点。

0040581E  |> \8B7424 14     mov     esi, dword ptr [esp+14
00405822  |8BC3          mov     eax, ebx 
00405824  |>  8A10          /mov     dl, byte ptr [eax
00405826  |8A1E          |mov     bl, byte ptr [esi
00405828  |8ACA          |mov     cl, dl 
0040582A  |3AD3          |cmp     dl, bl 
0040582C  |75 20         |jnz     short 0040584E 
0040582E 
|84C9          |test    cl, cl 
00405830  |74 16         |je      short 00405848 
00405832 
|8A50 01       |mov     dl, byte ptr [eax+1
00405835  |8A5E 01       |mov     bl, byte ptr [esi+1
00405838  |8ACA          |mov     cl, dl 
0040583A  |3AD3          |cmp     dl, bl 
0040583C  |75 10         |jnz     short 0040584E 
0040583E 
|83C0 02       |add     eax,
00405841 
|83C6 02       |add     esi,
00405844 
|84C9          |test    cl, cl 
00405846  |.^ 75 DC         \jnz     short 00405824

一边单步以 便注意信息窗口和寄存器窗口。这步0040581E  |> \8B7424 14     mov     esi, dword ptr [esp+14] 将一个ASCII为“7E87237D”的值移入esi之后的循环就是将这个值和我们输入的Code一位一位地 比较,一旦不等就跳走,函数返回code错误。根据这个,我们可以知道我们的注册码就是那个ASCII码 值“7E87237D”。接下来禁用掉刚刚下的断点,F9重新运行,注册,输入Name Xelloss,Code 7E87237D。点OK,显示“This copy is licensed to:Xelloss”注册成功~

查看帮助关于信息:

成功~

posted @ 2009-07-01 00:42  Xelloss  阅读(959)  评论(0编辑  收藏  举报