【破文标题】菜鸟maomaoma的算法练习破文五
【破文作者】maomaoma
【作者邮箱】
【作者主页】无
【破解工具】OD、PEiD
【破解平台】winxp
【软件名称】Panorado 3.3.1.119
【软件大小】1808KB
【原版下载】http://ks.onlinedown.net/soft/45759.htm
【保护方式】无
【软件简介】一个特别为非常大的图片和全景图片而设计的图片查看器。它支持360度的查看、浏览、缩略图查看、全屏模式、幻灯片播放和打印功能。
【破解声明】我是菜鸟,学写破文,还请大侠多多指教:)
------------------------------------------------------------------------
【破解过程】

1、PEiD查主程序无壳,Microsoft Visual C++ 6.0编译
2、OD载入,ctrl+N在USER32.GetWindowTextW下断点,F9运行,输入e-mail地址:123@1.com,及假码:12345678,点注册,程序断下

00445770  /$  53            push    ebx
00445771  |.  55            push    ebp
00445772  |.  56            push    esi
00445773  |.  57            push    edi
00445774  |.  E8 77D3FFFF   call    00442AF0
00445779  |.  85C0          test    eax, eax
0044577B  |.  74 1A         je      short 00445797
0044577D  |.  8B4424 1C     mov     eax, [esp+1C]
00445781  |.  8B4C24 18     mov     ecx, [esp+18]
00445785  |.  8B5424 14     mov     edx, [esp+14]
00445789  |.  50            push    eax                              ; /Count
0044578A  |.  51            push    ecx                              ; |Buffer
0044578B  |.  52            push    edx                              ; |hWnd
0044578C  |.  FF15 8C354D00 call    [<&USER32.GetWindowTextW>]       ; \GetWindowTextW \\OD断在此处
00445792  |.  5F            pop     edi
00445793  |.  5E            pop     esi
00445794  |.  5D            pop     ebp
00445795  |.  5B            pop     ebx
00445796  |.  C3            retn

F8单步至

00425B82   .  8D4424 18     lea     eax, [esp+18]
00425B86   .  50            push    eax
00425B87   .  68 9E070000   push    79E
00425B8C   .  57            push    edi
00425B8D   .  E8 EEFE0100   call    00445A80                         ;  
00425B92   .  8D4C24 38     lea     ecx, [esp+38]
00425B96   .  51            push    ecx

向上至

00425B69   > \8B7C24 18     mov     edi, [esp+18]                    ;  Case 1 of switch 00425B11
00425B6D   .  8D5424 08     lea     edx, [esp+8]
00425B71   .  52            push    edx
00425B72   .  68 D9040000   push    4D9
00425B77   .  57            push    edi
00425B78   .  BE 05400080   mov     esi, 80004005
00425B7D   .  E8 FEFE0100   call    00445A80                         ;  
00425B82   .  8D4424 18     lea     eax, [esp+18]
00425B86   .  50            push    eax



00425B69   > \8B7C24 18     mov     edi, [esp+18]   处重新下断点,ctrl+F2重新载入程序,F9运行,输入
e-mail地址:123@1.com,及假码:12345678,点注册,程序断下

00425B69   > \8B7C24 18     mov     edi, [esp+18]                    ;  Case 1 of switch 00425B11  \\OD断在此处
00425B6D   .  8D5424 08     lea     edx, [esp+8]
00425B71   .  52            push    edx
00425B72   .  68 D9040000   push    4D9
00425B77   .  57            push    edi
00425B78   .  BE 05400080   mov     esi, 80004005
00425B7D   .  E8 FEFE0100   call    00445A80                         ;  取e-mail地址
00425B82   .  8D4424 18     lea     eax, [esp+18]
00425B86   .  50            push    eax
00425B87   .  68 9E070000   push    79E
00425B8C   .  57            push    edi
00425B8D   .  E8 EEFE0100   call    00445A80                         ;  取假码
00425B92   .  8D4C24 38     lea     ecx, [esp+38]
00425B96   .  51            push    ecx
00425B97   .  8D5424 38     lea     edx, [esp+38]
00425B9B   .  52            push    edx
00425B9C   .  8B5424 2C     mov     edx, [esp+2C]
00425BA0   .  8D4424 38     lea     eax, [esp+38]
00425BA4   .  50            push    eax
00425BA5   .  8D4C24 48     lea     ecx, [esp+48]
00425BA9   .  51            push    ecx
00425BAA   .  52            push    edx
00425BAB   .  E8 C0030000   call    00425F70                         ;  注册码合法性验证call,跟进(1)
00425BB0   .  83C4 2C       add     esp, 2C
00425BB3   .  85C0          test    eax, eax
00425BB5   .  0F84 E5000000 je      00425CA0
00425BBB   .  8B4C24 08     mov     ecx, [esp+8]
00425BBF   .  8D4424 10     lea     eax, [esp+10]
00425BC3   .  50            push    eax
00425BC4   .  51            push    ecx
00425BC5   .  E8 36F7FFFF   call    00425300                         ;  e-mail地址验证及变换call,跟进(2)
00425BCA   .  83C4 08       add     esp, 8
00425BCD   .  85C0          test    eax, eax
00425BCF   .  0F84 CB000000 je      00425CA0
00425BD5   .  8B4424 24     mov     eax, [esp+24]
00425BD9   .  394424 10     cmp     [esp+10], eax                    ;  注册码第一部分应为e-mail变换结果(我这里是0CECD864)
00425BDD   .  0F85 BD000000 jnz     00425CA0                         ;  不等则跳
00425BE3   .  8B5424 1C     mov     edx, [esp+1C]                    ;  假码第三部分入edx
00425BE7   .  8B4C24 18     mov     ecx, [esp+18]                    ;  假码第二部分入ecx
00425BEB   .  52            push    edx
00425BEC   .  51            push    ecx
00425BED   .  50            push    eax
00425BEE   .  E8 6DF7FFFF   call    00425360                         ;  注册码第四部分验证call,返回值作为真码保留在eax中,跟进(3)
00425BF3   .  8B4C24 2C     mov     ecx, [esp+2C]                    ;  假码第四部分入ecx
00425BF7   .  83C4 0C       add     esp, 0C
00425BFA   .  3BC1          cmp     eax, ecx
00425BFC   .  0F85 9E000000 jnz     00425CA0
00425C02   .  8B4424 18     mov     eax, [esp+18]                    ;  假码第二部分入eax
00425C06   .  3D 1AA9E111   cmp     eax, 11E1A91A                    ;  注册码第二部分为11E1A91A
00425C0B   .  74 15         je      short 00425C22
00425C0D   .  3D 00000502   cmp     eax, 2050000                     ;  注册码第二部分或为2050000
00425C12   .  74 0E         je      short 00425C22
00425C14   .  3D 00000003   cmp     eax, 3000000                     ;  注册码第二部分或为3000000
00425C19   .  74 07         je      short 00425C22
00425C1B   .  3D 00000303   cmp     eax, 3030000                     ;  注册码第二部分或为3030000
00425C20   .  75 7E         jnz     short 00425CA0
00425C22   >  8B15 C4615000 mov     edx, [5061C4]
00425C28   .  8B4424 08     mov     eax, [esp+8]
00425C2C   .  6A 40         push    40
00425C2E   .  83C2 04       add     edx, 4
00425C31   .  52            push    edx
00425C32   .  50            push    eax
00425C33   .  E8 48D70100   call    00443380
00425C38   .  8D4C24 14     lea     ecx, [esp+14]
00425C3C   .  51            push    ecx
00425C3D   .  E8 9ED70100   call    004433E0
00425C42   .  8D5424 1C     lea     edx, [esp+1C]
00425C46   .  52            push    edx
00425C47   .  E8 94D70100   call    004433E0
00425C4C   .  A1 C4615000   mov     eax, [5061C4]
00425C51   .  8B4C24 2C     mov     ecx, [esp+2C]
00425C55   .  8988 84000000 mov     [eax+84], ecx
00425C5B   .  8B15 C4615000 mov     edx, [5061C4]
00425C61   .  8B4424 30     mov     eax, [esp+30]
00425C65   .  8982 88000000 mov     [edx+88], eax
00425C6B   .  8B0D C4615000 mov     ecx, [5061C4]
00425C71   .  8B5424 34     mov     edx, [esp+34]
00425C75   .  83C4 14       add     esp, 14
00425C78   .  8991 8C000000 mov     [ecx+8C], edx
00425C7E   .  E8 BDF8FFFF   call    00425540
00425C83   .  8B0D C4615000 mov     ecx, [5061C4]
00425C89   .  8981 90000000 mov     [ecx+90], eax
00425C8F   .  8B15 C4615000 mov     edx, [5061C4]
00425C95   .  66:C782 94000>mov     word ptr [edx+94], 0
00425C9E   .  33F6          xor     esi, esi
00425CA0   >  8D4424 08     lea     eax, [esp+8]
00425CA4   .  50            push    eax
00425CA5   .  E8 36D70100   call    004433E0
00425CAA   .  8D4C24 10     lea     ecx, [esp+10]
00425CAE   .  51            push    ecx
00425CAF   .  E8 2CD70100   call    004433E0
00425CB4   .  83C4 08       add     esp, 8
00425CB7   .  85F6          test    esi, esi
00425CB9   .  7D 40         jge     short 00425CFB
00425CBB   .  68 E8030000   push    3E8                              ; /Timeout = 1000. ms
00425CC0   .  FF15 A4314D00 call    [<&KERNEL32.Sleep>]              ; \Sleep
00425CC6   .  8B15 F8625100 mov     edx, [5162F8]
00425CCC   .  68 4A560000   push    564A
00425CD1   .  6A 00         push    0
00425CD3   .  6A 10         push    10
00425CD5   .  52            push    edx
00425CD6   .  E8 15160200   call    004472F0
00425CDB   .  83C4 10       add     esp, 10
00425CDE   .  68 D9040000   push    4D9                              ; /ControlID = 4D9 (1241.)
00425CE3   .  57            push    edi                              ; |hWnd
00425CE4   .  FF15 D4364D00 call    [<&USER32.GetDlgItem>]           ; \GetDlgItem
00425CEA   .  50            push    eax                              ; /hWnd
00425CEB   .  FF15 70364D00 call    [<&USER32.SetFocus>]             ; \SetFocus
00425CF1   .  5F            pop     edi
00425CF2   .  33C0          xor     eax, eax
00425CF4   .  5E            pop     esi
00425CF5   .  83C4 0C       add     esp, 0C
00425CF8   .  C2 1000       retn    10
00425CFB   >  8B0D C4615000 mov     ecx, [5061C4]
00425D01   .  E8 7AF0FFFF   call    00424D80
00425D06   .  85C0          test    eax, eax
00425D08   .  7C 40         jl      short 00425D4A
00425D0A   .  E8 A1F3FFFF   call    004250B0
00425D0F   .  8B0D F8625100 mov     ecx, [5162F8]
00425D15   .  8BF0          mov     esi, eax
00425D17   .  E8 64380000   call    00429580
00425D1C   .  85F6          test    esi, esi
00425D1E   .  7C 2A         jl      short 00425D4A
00425D20   .  A1 F8625100   mov     eax, [5162F8]
00425D25   .  68 4B560000   push    564B
00425D2A   .  6A 00         push    0
00425D2C   .  6A 40         push    40
00425D2E   .  50            push    eax
00425D2F   .  E8 BC150200   call    004472F0                         ;  弹出注册成功对话框

(1)注册码合法性验证call

00425F70  /$  8B4424 14     mov     eax, [esp+14]
00425F74  |.  8B4C24 10     mov     ecx, [esp+10]
00425F78  |.  8B5424 0C     mov     edx, [esp+C]
00425F7C  |.  53            push    ebx
00425F7D  |.  55            push    ebp
00425F7E  |.  56            push    esi
00425F7F  |.  8B7424 10     mov     esi, [esp+10]
00425F83  |.  C700 00000000 mov     dword ptr [eax], 0
00425F89  |.  8B4424 14     mov     eax, [esp+14]
00425F8D  |.  C701 00000000 mov     dword ptr [ecx], 0
00425F93  |.  57            push    edi
00425F94  |.  C702 00000000 mov     dword ptr [edx], 0
00425F9A  |.  56            push    esi
00425F9B  |.  C700 00000000 mov     dword ptr [eax], 0
00425FA1  |.  E8 DAD10100   call    00443180                         ;  取假码第一部分八位
00425FA6  |.  8B3D A4334D00 mov     edi, [<&MSVCRT.wcschr>]          ;  MSVCRT.wcschr
00425FAC  |.  6A 2D         push    2D                               ; /w = 002D  ('-')  \\ "-"连接
00425FAE  |.  56            push    esi                              ; |wstr
00425FAF  |.  894424 20     mov     [esp+20], eax                    ; |
00425FB3  |.  FFD7          call    edi                              ; \wcschr
00425FB5  |.  8BF0          mov     esi, eax
00425FB7  |.  83C4 0C       add     esp, 0C
00425FBA  |.  85F6          test    esi, esi
00425FBC  |.  75 05         jnz     short 00425FC3
00425FBE  |.  5F            pop     edi
00425FBF  |.  5E            pop     esi
00425FC0  |.  5D            pop     ebp
00425FC1  |.  5B            pop     ebx
00425FC2  |.  C3            retn
00425FC3  |>  83C6 02       add     esi, 2
00425FC6  |.  56            push    esi
00425FC7  |.  E8 B4D10100   call    00443180                         ;  取假码第二部分八位
00425FCC  |.  6A 2D         push    2D                                 \\ "-"连接
00425FCE  |.  56            push    esi
00425FCF  |.  8BE8          mov     ebp, eax
00425FD1  |.  FFD7          call    edi
00425FD3  |.  8BF0          mov     esi, eax
00425FD5  |.  83C4 0C       add     esp, 0C
00425FD8  |.  85F6          test    esi, esi
00425FDA  |.  75 05         jnz     short 00425FE1
00425FDC  |.  5F            pop     edi
00425FDD  |.  5E            pop     esi
00425FDE  |.  5D            pop     ebp
00425FDF  |.  5B            pop     ebx
00425FE0  |.  C3            retn
00425FE1  |>  83C6 02       add     esi, 2
00425FE4  |.  56            push    esi
00425FE5  |.  E8 96D10100   call    00443180                         ;  取假码第三部分八位
00425FEA  |.  6A 2D         push    2D                                \\ "-"连接
00425FEC  |.  56            push    esi
00425FED  |.  8BD8          mov     ebx, eax
00425FEF  |.  FFD7          call    edi
00425FF1  |.  8BF0          mov     esi, eax
00425FF3  |.  83C4 0C       add     esp, 0C
00425FF6  |.  85F6          test    esi, esi
00425FF8  |.  75 05         jnz     short 00425FFF
00425FFA  |.  5F            pop     edi
00425FFB  |.  5E            pop     esi
00425FFC  |.  5D            pop     ebp
00425FFD  |.  5B            pop     ebx
00425FFE  |.  C3            retn
00425FFF  |>  83C6 02       add     esi, 2
00426002  |.  56            push    esi
00426003  |.  E8 78D10100   call    00443180                       ;  取假码第四部分八位
00426008  |.  83C4 04       add     esp, 4
0042600B  |.  66:837E 10 00 cmp     word ptr [esi+10], 0
00426010  |.  74 07         je      short 00426019
00426012  |.  5F            pop     edi
00426013  |.  5E            pop     esi
00426014  |.  5D            pop     ebp
00426015  |.  33C0          xor     eax, eax
00426017  |.  5B            pop     ebx
00426018  |.  C3            retn
00426019  |>  8B4C24 14     mov     ecx, [esp+14]
0042601D  |.  8B5424 18     mov     edx, [esp+18]
00426021  |.  890A          mov     [edx], ecx
00426023  |.  8B4C24 1C     mov     ecx, [esp+1C]
00426027  |.  8B5424 20     mov     edx, [esp+20]
0042602B  |.  5F            pop     edi
0042602C  |.  8929          mov     [ecx], ebp
0042602E  |.  8B4C24 20     mov     ecx, [esp+20]
00426032  |.  5E            pop     esi
00426033  |.  891A          mov     [edx], ebx
00426035  |.  5D            pop     ebp
00426036  |.  8901          mov     [ecx], eax
00426038  |.  B8 01000000   mov     eax, 1
0042603D  |.  5B            pop     ebx
0042603E  \.  C3            retn
0042603F      90            nop
00426040   .  E9 0B000000   jmp     00426050

(2)e-mail地址验证及变换call

00425300  /$  56            push    esi
00425301  |.  8B7424 08     mov     esi, [esp+8]
00425305  |.  57            push    edi
00425306  |.  8B7C24 10     mov     edi, [esp+10]
0042530A  |.  33D2          xor     edx, edx
0042530C  |.  33C0          xor     eax, eax
0042530E  |.  8917          mov     [edi], edx
00425310  |.  66:8B06       mov     ax, [esi]
00425313  |.  66:85C0       test    ax, ax
00425316  |.  B9 01000000   mov     ecx, 1
0042531B  |.  74 32         je      short 0042534F
0042531D  |>  66:3D 2000    /cmp     ax, 20                          ;  与空格比较
00425321  |.  74 1B         |je      short 0042533E
00425323  |.  66:3D 0900    |cmp     ax, 9
00425327  |.  74 15         |je      short 0042533E
00425329  |.  25 FFFF0000   |and     eax, 0FFFF
0042532E  |.  0FAFC1        |imul    eax, ecx                        ;  eax=eax*ecx
00425331  |.  35 82945D41   |xor     eax, 415D9482                   ;  eax=eax xor 415D9482
00425336  |.  42            |inc     edx                             ;  循环计数
00425337  |.  83FA 1E       |cmp     edx, 1E                         ;  跟1E比较
0042533A  |.  8BC8          |mov     ecx, eax                        ;  eax结果入ecx
0042533C  |.  7D 0C         |jge     short 0042534A
0042533E  |>  66:8B46 02    |mov     ax, [esi+2]                     ;  下一字符入ax
00425342  |.  83C6 02       |add     esi, 2
00425345  |.  66:85C0       |test    ax, ax
00425348  |.^ 75 D3         \jnz     short 0042531D
0042534A  |>  83FA 08       cmp     edx, 8                           ;  e-mail地址长度要大于等于8位
0042534D  |.  7D 05         jge     short 00425354
0042534F  |>  5F            pop     edi
00425350  |.  33C0          xor     eax, eax
00425352  |.  5E            pop     esi
00425353  |.  C3            retn
00425354  |>  890F          mov     [edi], ecx
00425356  |.  5F            pop     edi
00425357  |.  B8 01000000   mov     eax, 1
0042535C  |.  5E            pop     esi
0042535D  \.  C3            retn

(3)注册码第四部分验证call

00425360  /$  8B4424 04     mov     eax, [esp+4]                     ;  真码第一部分入eax
00425364  |.  8B4C24 08     mov     ecx, [esp+8]                     ;  假码第二部分入ecx
00425368  |.  56            push    esi
00425369  |.  8B7424 10     mov     esi, [esp+10]                    ;  假码第三部分入esi
0042536D  |.  35 21098B43   xor     eax, 438B0921                    ;  eax=eax xor 438B0921
00425372  |.  81F6 377F5583 xor     esi, 83557F37                    ;  esi=esi xor 83557F37
00425378  |.  0FAFF0        imul    esi, eax                         ;  esi=esi*eax
0042537B  |.  81F1 44709C63 xor     ecx, 639C7044                    ;  ecx=ecx xor 639C7044
00425381  |.  0FAFF1        imul    esi, ecx                         ;  esi=esi*ecx
00425384  |.  33D2          xor     edx, edx
00425386  |.  8BC6          mov     eax, esi
00425388  |.  B9 1F000000   mov     ecx, 1F
0042538D  |.  F7F1          div     ecx
0042538F  |.  8BCA          mov     ecx, edx
00425391  |.  D3C6          rol     esi, cl                          ;  esi左移位cl次
00425393  |.  33D2          xor     edx, edx
00425395  |.  B9 1F000000   mov     ecx, 1F
0042539A  |.  81F6 7ACD9642 xor     esi, 4296CD7A                    ;  esi=esi xor 4296CD7A
004253A0  |.  8BC6          mov     eax, esi
004253A2  |.  F7F1          div     ecx
004253A4  |.  8BC6          mov     eax, esi
004253A6  |.  5E            pop     esi
004253A7  |.  8BCA          mov     ecx, edx
004253A9  |.  D3C0          rol     eax, cl                          ;  eax左移位cl次
004253AB  \.  C3            retn








------------------------------------------------------------------------
【破解总结】

1、e-mail地址长度要大于等于八位;
2、注册码分四部分,每部分为八位,中间由“-”连接;
3、注册码第一部分与e-mail地址有关,由其转换结果决定;
4、注册码第二部分为固定值,可为11E1A91A、2050000、3000000、3030000其中之一;
5、注册码第三部分任意;
6、注册码第四部分由注册码第一部分、注册码第二部分、注册码第三部分计算而来;
7、提供一组可用注册码:
   e-mail:123@1.com
   注册码:0CECD864-11E1A91A-78787878-B40EF817
8、注册信息保存于注册表。
------------------------------------------------------------------------
【版权声明】本文系作者原创, 转载请注明作者并保持文章的完整, 谢谢!