飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5113|回复: 7

[原创] OJOsoft MP3 Converter2.5.0.1009简单分析

[复制链接]
  • TA的每日心情
    慵懒
    2018-2-11 09:23
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2008-10-17 10:59:39 | 显示全部楼层 |阅读模式
    【破文标题】OJOsoft MP3 Converter2.5.0.1009简单分析
    【破文作者】冰糖[BST]
    【作者邮箱】bthulu#gmail.com
    【作者主页】http://bbs.thulu.com
    破解工具】peid0.94+OD
    【破解平台】XPsp3
    【软件名称】OJOsoft MP3 Converter2.5.0.1009
    【软件大小】15M
    【原版下载】自己找
    【保护方式】注册码
    【软件简介】一个音频格式转换软件,转换格式挺多的,我数了一下有十多种
    【破解声明】本文仅供研究学习,本人对因这篇文章而导致的一切后果,不承担任何法律责任。本文中的不足之处
    ------------------------------------------------------------------------
    【破解过程】Microsoft Visual C++ 7.0 Method2 [Debug]无壳,OD直接载入运行输入假码BCDE-FGHI-JKLM-NOPQ-RSTU(为什么输入这个假码?因为这个假码便于下面的观察),跳出错误提示,F12**,返回下断

    00401D10   .  6A FF         push    -1                               ;  F2下断
    00401D12   .  68 4DFE4100   push    0041FE4D                         ;  SE 处理程序安装
    00401D17   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
    00401D1D   .  50            push    eax
    00401D1E   .  64:8925 00000>mov     dword ptr fs:[0], esp
    00401D25   .  83EC 0C       sub     esp, 0C
    00401D28   .  56            push    esi
    00401D29   .  8BF1          mov     esi, ecx
    00401D2B   .  8D4C24 04     lea     ecx, dword ptr [esp+4]
    00401D2F   .  FF15 18424200 call    dword ptr [<&MFC71.#310>]        ;  MFC71.7C173199
    00401D35   .  8D4424 04     lea     eax, dword ptr [esp+4]
    00401D39   .  50            push    eax
    00401D3A   .  8D4E 74       lea     ecx, dword ptr [esi+74]
    00401D3D   .  C74424 1C 000>mov     dword ptr [esp+1C], 0
    00401D45   .  E8 46D40100   call    <jmp.&MFC71.#3761>
    00401D4A   .  51            push    ecx                              ;  假码BCDE-FGHI-JKLM-NOPQ-RSTU
    00401D4B   .  8D5424 08     lea     edx, dword ptr [esp+8]
    00401D4F   .  8BCC          mov     ecx, esp
    00401D51   .  896424 10     mov     dword ptr [esp+10], esp
    00401D55   .  52            push    edx
    00401D56   .  FF15 D8414200 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    00401D5C   .  8B8E C8000000 mov     ecx, dword ptr [esi+C8]
    00401D62   .  FF15 28404200 call    dword ptr [<&Control.AVProxy::Re>;  算法比较CALL,F7跟入
    00401D68   .  85C0          test    eax, eax
    00401D6A   .  8B86 CC000000 mov     eax, dword ptr [esi+CC]
    00401D70   .  75 6A         jnz     short 00401DDC                   ;  关键跳转,跳就失败
    00401D72   .  05 34010000   add     eax, 134
    00401D77   .  50            push    eax
    00401D78   .  8D4C24 10     lea     ecx, dword ptr [esp+10]
    00401D7C   .  FF15 D8414200 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    00401D82   .  8B8E CC000000 mov     ecx, dword ptr [esi+CC]
    00401D88   .  81C1 38010000 add     ecx, 138
    00401D8E   .  51            push    ecx
    00401D8F   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
    00401D93   .  C64424 1C 01  mov     byte ptr [esp+1C], 1
    00401D98   .  FF15 D8414200 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    00401D9E   .  6A 40         push    40
    00401DA0   .  8D4C24 10     lea     ecx, dword ptr [esp+10]
    00401DA4   .  C64424 1C 02  mov     byte ptr [esp+1C], 2
    00401DA9   .  FF15 D0414200 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    00401DAF   .  50            push    eax
    00401DB0   .  8D4C24 10     lea     ecx, dword ptr [esp+10]
    00401DB4   .  FF15 D0414200 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    00401DBA   .  50            push    eax
    00401DBB   .  8BCE          mov     ecx, esi
    00401DBD   .  E8 BCD30100   call    <jmp.&MFC71.#4104>               ;  正确提示
    00401DC2   .  8B16          mov     edx, dword ptr [esi]
    00401DC4   .  8BCE          mov     ecx, esi
    00401DC6   .  FF92 54010000 call    dword ptr [edx+154]
    00401DCC   .  8D4C24 08     lea     ecx, dword ptr [esp+8]
    00401DD0   .  FF15 C0414200 call    dword ptr [<&MFC71.#578>]        ;  MFC71.7C1771B1
    00401DD6   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
    00401DDA   .  EB 5E         jmp     short 00401E3A
    00401DDC   >  05 34010000   add     eax, 134
    00401DE1   .  50            push    eax
    00401DE2   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
    00401DE6   .  FF15 D8414200 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    00401DEC   .  8B8E CC000000 mov     ecx, dword ptr [esi+CC]
    00401DF2   .  81C1 40010000 add     ecx, 140
    00401DF8   .  51            push    ecx
    00401DF9   .  8D4C24 10     lea     ecx, dword ptr [esp+10]
    00401DFD   .  C64424 1C 03  mov     byte ptr [esp+1C], 3
    00401E02   .  FF15 D8414200 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    00401E08   .  6A 40         push    40
    00401E0A   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
    00401E0E   .  C64424 1C 04  mov     byte ptr [esp+1C], 4
    00401E13   .  FF15 D0414200 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    00401E19   .  50            push    eax
    00401E1A   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
    00401E1E   .  FF15 D0414200 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    00401E24   .  50            push    eax
    00401E25   .  8BCE          mov     ecx, esi
    00401E27   .  E8 52D30100   call    <jmp.&MFC71.#4104>               ;  错误提示
    00401E2C   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
    00401E30   .  FF15 C0414200 call    dword ptr [<&MFC71.#578>]        ;  MFC71.7C1771B1


    F7跟入部分
    00396CC8  |.  C68424 800400>mov     byte ptr [esp+480], 4
    00396CD0  |.  FF15 88503A00 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    00396CD6  |.  8D4C24 1C     lea     ecx, dword ptr [esp+1C]
    00396CDA  |.  889C24 7C0400>mov     byte ptr [esp+47C], bl
    00396CE1  |.  E8 4AB60000   call    003A2330                         ;  算法比较CALL,继续F7
    00396CE6  |.  0FB6C0        movzx   eax, al
    00396CE9  |.  85C0          test    eax, eax
    00396CEB  |.  0F84 38020000 je      00396F29                         ;  关键跳转,跳就失败
    00396CF1  |.  8D4C24 1C     lea     ecx, dword ptr [esp+1C]
    00396CF5  |.  FF15 98503A00 call    dword ptr [<&MFC71.#310>]        ;  MFC71.7C173199
    00396CFB  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
    00396CFF  |.  B3 05         mov     bl, 5
    00396D01  |.  51            push    ecx
    00396D02  |.  889C24 780400>mov     byte ptr [esp+478], bl
    00396D09  |.  E8 C2D1FFFF   call    00393ED0
    00396D0E  |.  8BC8          mov     ecx, eax
    00396D10  |.  E8 ABC2FFFF   call    00392FC0
    00396D15  |.  8B10          mov     edx, dword ptr [eax]             ;  下面是注册信息保存地点config\config.ini
    00396D17  |.  68 28543A00   push    003A5428                         ;  ASCII "config.ini"
    00396D1C  |.  52            push    edx
    00396D1D  |.  8D4424 24     lea     eax, dword ptr [esp+24]
    00396D21  |.  68 18543A00   push    003A5418                         ;  ASCII "%s\config\%s"
    00396D26  |.  50            push    eax
    00396D27  |.  C68424 840400>mov     byte ptr [esp+484], 6
    00396D2F  |.  FF15 B8503A00 call    dword ptr [<&MFC71.#2322>]       ;  MFC71.7C146A9D
    00396D35  |.  83C4 10       add     esp, 10


    F7跟入部分
    003A2330  /$  6A FF         push    -1
    003A2332  |.  68 824E3A00   push    003A4E82                         ;  SE 处理程序安装
    003A2337  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
    003A233D  |.  50            push    eax
    003A233E  |.  64:8925 00000>mov     dword ptr fs:[0], esp
    003A2345  |.  81EC B8000000 sub     esp, 0B8
    003A234B  |.  53            push    ebx
    003A234C  |.  55            push    ebp
    003A234D  |.  56            push    esi
    003A234E  |.  8BF1          mov     esi, ecx
    003A2350  |.  57            push    edi
    003A2351  |.  897424 14     mov     dword ptr [esp+14], esi
    003A2355  |.  51            push    ecx
    003A2356  |.  8D8424 E00000>lea     eax, dword ptr [esp+E0]
    003A235D  |.  8BCC          mov     ecx, esp
    003A235F  |.  896424 14     mov     dword ptr [esp+14], esp
    003A2363  |.  50            push    eax
    003A2364  |.  C78424 D80000>mov     dword ptr [esp+D8], 1
    003A236F  |.  33FF          xor     edi, edi
    003A2371  |.  FF15 88503A00 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    003A2377  |.  8BCE          mov     ecx, esi
    003A2379  |.  E8 32FCFFFF   call    003A1FB0                         ;  算法CALL,检验输入假码格式是否正确,F7跟入
    003A237E  |.  84C0          test    al, al
    003A2380  |.  0F84 49010000 je      003A24CF                         ;  不正确就失败
    003A2386  |.  8B2D 8C513A00 mov     ebp, dword ptr [<&MSVCR71.touppe>;  MSVCR71.toupper
    003A238C  |.  33DB          xor     ebx, ebx
    003A238E  |.  8D7424 68     lea     esi, dword ptr [esp+68]
    003A2392  |>  83FF 04       /cmp     edi, 4                          ;  EDI与4比较,即省略计算“-”
    003A2395  |.  75 04         |jnz     short 003A239B
    003A2397  |.  33FF          |xor     edi, edi
    003A2399  |.  EB 23         |jmp     short 003A23BE
    003A239B  |>  53            |push    ebx
    003A239C  |.  8D8C24 E00000>|lea     ecx, dword ptr [esp+E0]
    003A23A3  |.  FF15 18513A00 |call    dword ptr [<&MFC71.#865>]       ;  MFC71.7C1894E7
    003A23A9  |.  0FBEC8        |movsx   ecx, al                         ;  分别取输入假码每个非"-"字符
    003A23AC  |.  51            |push    ecx
    003A23AD  |.  FFD5          |call    ebp
    003A23AF  |.  0FBED0        |movsx   edx, al
    003A23B2  |.  83EA 41       |sub     edx, 41                         ;  edi-65即每个非“-”字符ASCII-65
    003A23B5  |.  83C4 04       |add     esp, 4
    003A23B8  |.  8916          |mov     dword ptr [esi], edx            ;  将结果告别存入[ESI]
    003A23BA  |.  47            |inc     edi
    003A23BB  |.  83C6 04       |add     esi, 4                          ;  esi 加 4,即隔四位分别存放上面的计算结果
    003A23BE  |>  43            |inc     ebx
    003A23BF  |.  83FB 18       |cmp     ebx, 18                         ;  判断24个字符是否取完
    003A23C2  |.^ 7C CE         \jl      short 003A2392
    003A23C4  |.  68 80000000   push    80
    003A23C9  |.  51            push    ecx
    003A23CA  |.  8D8424 E00000>lea     eax, dword ptr [esp+E0]
    003A23D1  |.  8BCC          mov     ecx, esp
    003A23D3  |.  896424 18     mov     dword ptr [esp+18], esp
    003A23D7  |.  50            push    eax
    003A23D8  |.  FF15 88503A00 call    dword ptr [<&MFC71.#297>]        ;  MFC71.7C14E575
    003A23DE  |.  8D8C24 C00000>lea     ecx, dword ptr [esp+C0]
    003A23E5  |.  51            push    ecx
    003A23E6  |.  8B4C24 20     mov     ecx, dword ptr [esp+20]
    003A23EA  |.  E8 81FCFFFF   call    003A2070                         ;  这个CALL是计算几个固定的值用于下面的计算,F7跟入看看
    003A23EF  |.  8B5424 68     mov     edx, dword ptr [esp+68]          ;  1
    003A23F3  |.  8B4C24 70     mov     ecx, dword ptr [esp+70]          ;  3
    003A23F7  |.  8B4424 6C     mov     eax, dword ptr [esp+6C]          ;  2
    003A23FB  |.  895424 18     mov     dword ptr [esp+18], edx          ;  =1
    003A23FF  |.  8B5424 74     mov     edx, dword ptr [esp+74]          ;  4
    003A2403  |.  894C24 20     mov     dword ptr [esp+20], ecx          ;  =3
    003A2407  |.  8B4C24 7C     mov     ecx, dword ptr [esp+7C]          ;  6
    003A240B  |.  894424 1C     mov     dword ptr [esp+1C], eax          ;  =2
    003A240F  |.  8B4424 78     mov     eax, dword ptr [esp+78]          ;  5
    003A2413  |.  895424 24     mov     dword ptr [esp+24], edx          ;  =4
    003A2417  |.  8B9424 800000>mov     edx, dword ptr [esp+80]          ;  7
    003A241E  |.  894C24 2C     mov     dword ptr [esp+2C], ecx          ;  =6
    003A2422  |.  8B8C24 880000>mov     ecx, dword ptr [esp+88]          ;  9
    003A2429  |.  894424 28     mov     dword ptr [esp+28], eax          ;  =5
    003A242D  |.  8B8424 840000>mov     eax, dword ptr [esp+84]          ;  8
    003A2434  |.  895424 30     mov     dword ptr [esp+30], edx          ;  =7
    003A2438  |.  8B9424 8C0000>mov     edx, dword ptr [esp+8C]          ;  A
    003A243F  |.  894C24 38     mov     dword ptr [esp+38], ecx          ;  =9
    003A2443  |.  8B8C24 940000>mov     ecx, dword ptr [esp+94]          ;  C
    003A244A  |.  894424 34     mov     dword ptr [esp+34], eax          ;  =8
    003A244E  |.  8B8424 900000>mov     eax, dword ptr [esp+90]          ;  B
    003A2455  |.  895424 3C     mov     dword ptr [esp+3C], edx          ;  =A
    003A2459  |.  8B9424 980000>mov     edx, dword ptr [esp+98]          ;  D
    003A2460  |.  894C24 44     mov     dword ptr [esp+44], ecx          ;  =C
    003A2464  |.  8B8C24 A00000>mov     ecx, dword ptr [esp+A0]          ;  F
    003A246B  |.  894424 40     mov     dword ptr [esp+40], eax          ;  =B
    003A246F  |.  8B8424 9C0000>mov     eax, dword ptr [esp+9C]          ;  E
    003A2476  |.  895424 48     mov     dword ptr [esp+48], edx          ;  =D
    003A247A  |.  8B9424 A40000>mov     edx, dword ptr [esp+A4]          ;  10
    003A2481  |.  894C24 50     mov     dword ptr [esp+50], ecx          ;  =F
    003A2485  |.  894424 4C     mov     dword ptr [esp+4C], eax          ;  =E
    003A2489  |.  895424 54     mov     dword ptr [esp+54], edx          ;  =10
    003A248D  |.  B3 01         mov     bl, 1                            ;  上面一段两次交换,相当于没有交换,作用是把由输入假码计算的值的前16位复制一份用于下面的计算,1,2,3,4等是我为了方便标示记下的计算结果,这也是为什么假码用BCDE-FGHI-JKLM-NOPQ-RSTU而不用其他的原因
    003A248F  |.  33C9          xor     ecx, ecx                         ;  ECX清零
    003A2491  |>  8B6C0C 18     /mov     ebp, dword ptr [esp+ecx+18]     ;  1,2,3,4
    003A2495  |.  8B840C B80000>|mov     eax, dword ptr [esp+ecx+B8]     ;  11,5,13,7
    003A249C  |.  8B7C0C 28     |mov     edi, dword ptr [esp+ecx+28]     ;  5,6,7,8
    003A24A0  |.  8B740C 48     |mov     esi, dword ptr [esp+ecx+48]     ;  D,E,F,10
    003A24A4  |.  8B540C 38     |mov     edx, dword ptr [esp+ecx+38]     ;  9,A,B,C,D
    003A24A8  |.  03C5          |add     eax, ebp
    003A24AA  |.  03C7          |add     eax, edi
    003A24AC  |.  03C6          |add     eax, esi
    003A24AE  |.  03C2          |add     eax, edx                        ;  上面4个数相加
    003A24B0  |.  99            |cdq
    003A24B1  |.  BE 1A000000   |mov     esi, 1A
    003A24B6  |.  F7FE          |idiv    esi
    003A24B8  |.  3B940C A80000>|cmp     edx, dword ptr [esp+ecx+A8]     ;  余数分别与输入假码计算结果的后四位比较
    003A24BF  |.  89540C 58     |mov     dword ptr [esp+ecx+58], edx
    003A24C3      75 0A         jnz     short 003A24CF                   ;  不相等就失败
    003A24C5  |.  83C1 04       |add     ecx, 4                          ;  地址偏移
    003A24C8  |.  83F9 10       |cmp     ecx, 10                         ;  是否取完四次
    003A24CB  |.^ 7C C4         \jl      short 003A2491
    003A24CD  |.  EB 02         jmp     short 003A24D1                   ;  不跳就失败
    003A24CF      32DB          xor     bl, bl                           ;  BL清零,标志位破解只需要把这里改成mov     bl, 1
    003A24D1  |>  8D8C24 D80000>lea     ecx, dword ptr [esp+D8]
    003A24D8  |.  FF15 94503A00 call    dword ptr [<&MFC71.#578>]        ;  MFC71.7C1771B1
    003A24DE  |.  8D8C24 DC0000>lea     ecx, dword ptr [esp+DC]
    003A24E5  |.  FF15 94503A00 call    dword ptr [<&MFC71.#578>]        ;  MFC71.7C1771B1
    003A24EB  |.  8B8C24 C80000>mov     ecx, dword ptr [esp+C8]
    003A24F2  |.  5F            pop     edi


    下面是判断注册码格式的F7部分
    003A1FCC   .  C74424 14 000>mov     dword ptr [esp+14], 0
    003A1FD4   .  33FF          xor     edi, edi
    003A1FD6   .  FF15 A0503A00 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    003A1FDC   .  8D50 01       lea     edx, dword ptr [eax+1]           ;  假码BCDE-FGHI-JKLM-NOPQ-RSTU
    003A1FDF   .  90            nop
    003A1FE0   >  8A08          mov     cl, byte ptr [eax]
    003A1FE2   .  40            inc     eax
    003A1FE3   .  84C9          test    cl, cl
    003A1FE5   .^ 75 F9         jnz     short 003A1FE0
    003A1FE7   .  2BC2          sub     eax, edx                         ;  上面四行计算输入假码的位数
    003A1FE9   .  83F8 18       cmp     eax, 18                          ;  输入的假码是否等于24
    003A1FEC   .  75 62         jnz     short 003A2050                   ;  不等于24位就注册失败
    003A1FEE   .  8B1D 8C513A00 mov     ebx, dword ptr [<&MSVCR71.touppe>;  MSVCR71.toupper
    003A1FF4   .  33F6          xor     esi, esi
    003A1FF6   .  EB 08         jmp     short 003A2000
    003A1FF8   .  8DA424 000000>lea     esp, dword ptr [esp]
    003A1FFF   .  90            nop
    003A2000   >  56            push    esi                              ;  下面判断输入注册码是不是都是大写字母
    003A2001   .  8D4C24 20     lea     ecx, dword ptr [esp+20]
    003A2005   .  FF15 18513A00 call    dword ptr [<&MFC71.#865>]        ;  MFC71.7C1894E7
    003A200B   .  0FBEC0        movsx   eax, al
    003A200E   .  50            push    eax
    003A200F   .  FFD3          call    ebx
    003A2011   .  83C4 04       add     esp, 4
    003A2014   .  83FF 04       cmp     edi, 4                           ;  判读是不是隔了4个字符
    003A2017   .  75 08         jnz     short 003A2021
    003A2019   .  3C 2D         cmp     al, 2D                           ;  判读第五个字符是不是-
    003A201B   .  75 33         jnz     short 003A2050
    003A201D   .  33FF          xor     edi, edi                         ;  清空EDI重新计数
    003A201F   .  EB 09         jmp     short 003A202A                   ;  上面5行判断每隔4个字符是不是出现“-”
    003A2021   >  3C 41         cmp     al, 41                           ;  ASCII码是否大于41即字母"A"
    003A2023   .  7C 2B         jl      short 003A2050                   ;  小于“A”就失败
    003A2025   .  3C 5A         cmp     al, 5A                           ;  ASCII码是否小于5A即字母"Z"
    003A2027   .  7F 27         jg      short 003A2050                   ;  大于“Z”就失败
    003A2029   .  47            inc     edi                              ;  EDI加计数
    003A202A   >  46            inc     esi
    003A202B   .  83FE 18       cmp     esi, 18
    003A202E   .^ 7C D0         jl      short 003A2000                   ;  上面判断输入注册码是不是都是大写字母
    003A2030   .  8D4C24 1C     lea     ecx, dword ptr [esp+1C]
    003A2034   .  FF15 94503A00 call    dword ptr [<&MFC71.#578>]        ;  MFC71.7C1771B1
    003A203A   .  B0 01         mov     al, 1
    003A203C   .  8B4C24 0C     mov     ecx, dword ptr [esp+C]
    003A2040   .  64:890D 00000>mov     dword ptr fs:[0], ecx
    003A2047   .  5F            pop     edi

    下面是计算4个固定值的部分
    003A2070  /$  81EC 8C000000 sub     esp, 8C
    003A2076  |.  A1 D4C53A00   mov     eax, dword ptr [3AC5D4]
    003A207B  |.  8D8C24 940000>lea     ecx, dword ptr [esp+94]
    003A2082  |.  898424 880000>mov     dword ptr [esp+88], eax
    003A2089  |.  FF15 A0503A00 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    003A208F  |.  8D50 01       lea     edx, dword ptr [eax+1]           ;  “MP3 Converter"
    003A2092  |>  8A08          /mov     cl, byte ptr [eax]              ;  分别取"MP3 Converter"的每个字符
    003A2094  |.  40            |inc     eax
    003A2095  |.  84C9          |test    cl, cl
    003A2097  |.^ 75 F9         \jnz     short 003A2092
    003A2099  |.  53            push    ebx
    003A209A  |.  8B9C24 9C0000>mov     ebx, dword ptr [esp+9C]          ;  80
    003A20A1  |.  55            push    ebp
    003A20A2  |.  2BC2          sub     eax, edx                         ;  计算"MP3 Converter"字符数13
    003A20A4  |.  3BC3          cmp     eax, ebx                         ;  13和80比较
    003A20A6  |.  56            push    esi
    003A20A7  |.  57            push    edi
    003A20A8  |.  77 21         ja      short 003A20CB                   ;  大于就跳
    003A20AA  |.  8D8C24 A40000>lea     ecx, dword ptr [esp+A4]
    003A20B1  |.  FF15 A0503A00 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    003A20B7  |.  8D50 01       lea     edx, dword ptr [eax+1]
    003A20BA  |.  8D9B 00000000 lea     ebx, dword ptr [ebx]
    003A20C0  |>  8A08          /mov     cl, byte ptr [eax]
    003A20C2  |.  40            |inc     eax
    003A20C3  |.  84C9          |test    cl, cl
    003A20C5  |.^ 75 F9         \jnz     short 003A20C0
    003A20C7  |.  2BC2          sub     eax, edx                         ;  上面计算"MP3 Converter"字符数13
    003A20C9  |.  8BD8          mov     ebx, eax                         ;  ebx=eax=13
    003A20CB  |>  33C0          xor     eax, eax
    003A20CD  |.  B9 20000000   mov     ecx, 20                          ;  ecx=32
    003A20D2  |.  8D7C24 14     lea     edi, dword ptr [esp+14]
    003A20D6  |.  F3:AB         rep     stos dword ptr es:[edi]
    003A20D8  |.  8D8C24 A40000>lea     ecx, dword ptr [esp+A4]
    003A20DF  |.  AA            stos    byte ptr es:[edi]
    003A20E0  |.  FF15 A0503A00 call    dword ptr [<&MFC71.#876>]        ;  MFC71.7C158BCD
    003A20E6  |.  8BCB          mov     ecx, ebx
    003A20E8  |.  8BF0          mov     esi, eax
    003A20EA  |.  8BC1          mov     eax, ecx
    003A20EC  |.  C1E9 02       shr     ecx, 2
    003A20EF  |.  8D7C24 14     lea     edi, dword ptr [esp+14]
    003A20F3  |.  F3:A5         rep     movs dword ptr es:[edi], dword p>
    003A20F5  |.  8BC8          mov     ecx, eax
    003A20F7  |.  83E1 03       and     ecx, 3
    003A20FA  |.  F3:A4         rep     movs byte ptr es:[edi], byte ptr>
    003A20FC  |.  8B8C24 A00000>mov     ecx, dword ptr [esp+A0]
    003A2103  |.  894C24 10     mov     dword ptr [esp+10], ecx
    003A2107  |.  BB 01000000   mov     ebx, 1
    003A210C  |.  8D6424 00     lea     esp, dword ptr [esp]
    003A2110  |>  8D4424 14     /lea     eax, dword ptr [esp+14]
    003A2114  |.  33ED          |xor     ebp, ebp
    003A2116  |.  8D50 01       |lea     edx, dword ptr [eax+1]
    003A2119  |.  8DA424 000000>|lea     esp, dword ptr [esp]
    003A2120  |>  8A08          |/mov     cl, byte ptr [eax]
    003A2122  |.  40            ||inc     eax
    003A2123  |.  84C9          ||test    cl, cl
    003A2125  |.^ 75 F9         |\jnz     short 003A2120
    003A2127  |.  2BC2          |sub     eax, edx
    003A2129  |.  8BF8          |mov     edi, eax
    003A212B  |.  33C9          |xor     ecx, ecx
    003A212D  |.  85FF          |test    edi, edi
    003A212F  |.  7E 18         |jle     short 003A2149
    003A2131  |>  0FBE740C 14   |/movsx   esi, byte ptr [esp+ecx+14]
    003A2136  |.  8BC3          ||mov     eax, ebx
    003A2138  |.  0FAFC6        ||imul    eax, esi
    003A213B  |.  99            ||cdq
    003A213C  |.  2BC2          ||sub     eax, edx
    003A213E  |.  D1F8          ||sar     eax, 1
    003A2140  |.  03C6          ||add     eax, esi
    003A2142  |.  03E8          ||add     ebp, eax
    003A2144  |.  41            ||inc     ecx
    003A2145  |.  3BCF          ||cmp     ecx, edi
    003A2147  |.^ 7C E8         |\jl      short 003A2131
    003A2149  |>  8BC5          |mov     eax, ebp
    003A214B  |.  99            |cdq
    003A214C  |.  B9 1A000000   |mov     ecx, 1A
    003A2151  |.  F7F9          |idiv    ecx
    003A2153  |.  8B4424 10     |mov     eax, dword ptr [esp+10]
    003A2157  |.  83C3 06       |add     ebx, 6
    003A215A  |.  83C0 04       |add     eax, 4
    003A215D  |.  83FB 19       |cmp     ebx, 19
    003A2160  |.  894424 10     |mov     dword ptr [esp+10], eax         ;  上面懒得分析了,是根据"MP3 Converter"算出固定值
    003A2164  |.  8950 FC       |mov     dword ptr [eax-4], edx          ;  这里是根据上面字符串计算的固定值,11,5,13,7,且在内存中接在由输入假码计算的值的后面每隔四位存放
    003A2167  |.^ 7C A7         \jl      short 003A2110
    003A2169  |.  8D8C24 A40000>lea     ecx, dword ptr [esp+A4]
    003A2170  |.  FF15 94503A00 call    dword ptr [<&MFC71.#578>]        ;  MFC71.7C1771B1
    003A2176  |.  8B8C24 980000>mov     ecx, dword ptr [esp+98]
    003A217D  |.  5F            pop     edi
    003A217E  |.  5E            pop     esi
    003A217F  |.  5D            pop     ebp


    ------------------------------------------------------------------------
    【破解总结】这个软件爆破非常简单,写这篇分析没有什么其他的意思,就是无聊了找点事做做
    我用VB模拟了一下算法
    Private Sub Command1_Click()
        Dim a As Integer
        Dim b(20) As Integer
        Dim c(20) As Integer
        Dim d(4) As Integer
        zcm = Text1.Text
        a = Len(zcm)
        If a <> 24 Then
            MsgBox ("输入必须是24位")
            Exit Sub
        End If
        i = 0
        For i = 1 To a
            If i Mod 5 = 0 Then
                If Mid(zcm, i, 1) <> "-" Then
                    MsgBox ("输入格式错")
                    Exit Sub
                End If
            ElseIf (Asc(Mid(zcm, i, 1)) < 65 Or Asc(Mid(zcm, i, 1)) > 90) Then
                MsgBox ("输入必须是大写字母")
                Exit Sub
            End If
        Next i

        k = 0
        For j = 1 To a
            If j Mod 5 <> 0 Then
                k = k + 1
                b(k) = Asc(Mid(zcm, j, 1)) - 65
            End If
        Next j

        For m = 1 To 16
            c(m) = b(m)
        Next m
        d(1) = 17 'D的值是根据字符串算从来的固定的
        d(2) = 5
        d(3) = 19
        d(4) = 7

        For n = 1 To 4
            e = c(n) + d(n) + c(n + 4) + c(n + 12) + c(n + 8)
            If (e Mod 26 = b(n + 11)) Then
                MsgBox ("注册码正确")
            Else
                MsgBox ("注册码错误")
                Exit Sub
            End If

        Next n

    End Sub

    继续改进写了个穷举的程序

    Option Base 1
    Private Sub Command1_Click()
        Dim b() As Variant
        Dim c() As Variant
        Dim D() As Variant
        D = Array(17, 5, 19, 7)

        For h1 = 0 To 25
            For h2 = 0 To 25
                For h3 = 0 To 25
                    For h4 = 0 To 25
                        For h5 = 0 To 25
                            For h6 = 0 To 25
                                For h7 = 0 To 25
                                    For h8 = 0 To 25
                                        For h9 = 0 To 25
                                            For h10 = 0 To 25
                                                For h11 = 0 To 25
                                                    For h12 = 0 To 25
                                                        For h13 = 0 To 25
                                                            For h14 = 0 To 25
                                                                For h15 = 0 To 25
                                                                    For h16 = 0 To 25
                                                                        For h17 = 0 To 25
                                                                            For h18 = 0 To 25
                                                                                For h19 = 0 To 25
                                                                                    For h20 = 0 To 25

                                                                                        b = Array(h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, h14, h15, h16, h17, h18, h19, h20)
                                                                                        'c = Array(h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, h14, h15, h16)

                                                                                        For n = 1 To 4
                                                                                            'e = c(n) + D(n) + c(n + 4) + c(n + 12) + c(n + 8)
                                                                                            e = b(n) + D(n) + b(n + 4) + b(n + 12) + b(n + 8)

                                                                                            If (e Mod 26 = b(n + 11)) Then
                                                                                                zcm = Chr$(65 + b(1)) & Chr$(65 + b(2)) & Chr$(65 + b(3)) & Chr$(65 + b(4)) & "-" & Chr$(65 + b(5)) & Chr$(65 + b(6)) & Chr$(65 + b(7)) & Chr$(65 + b(8)) & "-" & Chr$(65 + b(9)) & Chr$(65 + b(10)) & Chr$(65 + b(11)) & Chr$(65 + b(12)) & "-" & Chr$(65 + b(13)) & Chr$(65 + b(14)) & Chr$(65 + b(15)) & Chr$(65 + b(16)) & "-" & Chr$(65 + b(17)) & Chr$(65 + b(18)) & Chr$(65 + b(19)) & Chr$(65 + b(20))
                                                                                                Text3.Text = Text3.Text & zcm & Chr$(13) & Chr$(10)
                                                                                                'Exit Sub

                                                                                            Else
                                                                                                Exit For
                                                                                            End If

                                                                                        Next n

                                                                                    Next h20

                                                                                Next h19

                                                                            Next h18

                                                                        Next h17

                                                                    Next h16

                                                                Next h15

                                                            Next h14

                                                        Next h13

                                                    Next h12

                                                Next h11

                                            Next h10

                                        Next h9

                                    Next h8

                                Next h7

                            Next h6

                        Next h5

                    Next h4

                Next h3

            Next h2

        Next h1
    End Sub

    电脑慢,跑了半天没出结果,谁有兴趣可以试试,最好改进下算法,降低点CPU,不然你就干不了别的事了o(∩_∩)o...

    ------------------------------------------------------------------------
    【版权声明】来自于BBS.THULU.COM 转载请注明作者并保持文章的完整, 谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-17 16:33:11 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2025-1-14 08:16
  • 签到天数: 1592 天

    [LV.Master]伴坛终老

    发表于 2008-10-17 17:28:06 | 显示全部楼层
    收藏一个,慢慢学习!谢谢了!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-17 17:42:53 | 显示全部楼层
    代码写的很有层次啊,分析的很详细
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2018-2-11 09:23
  • 签到天数: 8 天

    [LV.3]偶尔看看II

     楼主| 发表于 2008-10-17 18:03:50 | 显示全部楼层
    老飘发错位置了?/:012
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2008-10-17 18:04:28 | 显示全部楼层
    原帖由 冰糖 于 2008-10-17 18:03 发表
    老飘发错位置了?/:012


    sorry,删除了~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-10-17 22:30:28 | 显示全部楼层
    学习来了/:good
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-2-16 14:00:24 | 显示全部楼层
    慢慢学习,谢谢了!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表