飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4576|回复: 8

[原创] 【奥运献礼】MP3 Cutter Joiner新版 算法分析+Delphi嵌入汇编注册机

[复制链接]
  • TA的每日心情
    难过
    2022-2-6 09:25
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2008-8-8 19:24:19 | 显示全部楼层 |阅读模式
    【破文标题】MP3 Cutter Joiner最新版 算法分析+Delphi嵌入汇编注册机
    【破文作者】p layboysen
    【作者邮箱】p [email protected]
    【作者主页】p layboysen2.photo.163.com
    破解工具】PEiD,OD
    【破解平台】Windows XP
    【软件名称】MP3 Cutter Joiner
    【软件大小】2.94 MB
    【软件类别】国外软件/音频编辑
    【软件授权】共享版
    【软件语言】英文
    【更新时间】2008-8-8 【奥运献礼】
    【原版下载】http://www.audiotoolsfactory.com/mp3cutter/mp3cutter.htm
    【保护方式】用户名、注册码
    【软件简介】MP3 Cutter Joiner是一款功能强大、简单易用的音频编辑工具,可以将音频文件进行分割,也可以将多个音频文件合并为一个文件,支持MP3、WAV、WMA以及OGG格式,支持批量处理,通过内置的音频播放器,用户可以预先听取音频文件然后设置分隔/合并时的开始/结束时间。

    【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
    初学破解与编程,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
    --------------------------------------------------------------
    【破解内容】

        昨天七夕,写了一篇算法分析“【七夕礼物】Power Video Converter算法分析+另类注册机”,以纪念我们中国自己的“情人节”,图个彩头(*^__^*) 嘻嘻……
        可今天是咱们的奥运开幕——2008年8月8日,快8点了,呵呵我得快点,回去看开幕式去,支持中国!这样的一个特别的日子,当然也不舍得错过,一鼓作气再写一篇,奥运献礼,一是希望自己明年毕业时能找到像样的工作,二是祝福我们论坛越干越火,三是诅咒大家生活越过越顺,男孩没娶的娶,女孩该嫁的嫁,百年梦想今实现,大伙天天好心情!!
      
        抓紧时间来入正题哦,OD载入试运行知道是用户名注册码保护,无壳,加载查找字符串定位关键,输入假码立即断下:
    1. 004B2079  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
    2. 004B207C  |.  8B87 1C030000 mov     eax, dword ptr [edi+31C]
    3. 004B2082  |.  E8 CD65FBFF   call    00468654                         ;  求用户名长度
    4. 004B2087  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  用户名入EAX
    5. 004B208A  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
    6. 004B208D  |.  E8 3E67F5FF   call    004087D0
    7. 004B2092  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
    8. 004B2095  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    9. 004B2098  |.  E8 6767F5FF   call    00408804
    10. 004B209D  |.  8B55 F0       mov     edx, dword ptr [ebp-10]
    11. 004B20A0  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
    12. 004B20A3  |.  E8 3822F5FF   call    004042E0
    13. 004B20A8  |.  BB 15000000   mov     ebx, 15
    14. 004B20AD  |.  BE EC1B4C00   mov     esi, 004C1BEC
    15. 004B20B2  |>  8B45 FC       /mov     eax, dword ptr [ebp-4]          ;  用户名放入EAX
    16. 004B20B5  |.  8B16          |mov     edx, dword ptr [esi]            ;  此处查看数据窗口会发现一个用户名表
    17. 004B20B7  |.  E8 9825F5FF   |call    00404654
    18. 004B20BC  |.  75 09         |jnz     short 004B20C7
    19. 004B20BE  |.  C605 5C3E4C00>|mov     byte ptr [4C3E5C], 0
    20. 004B20C5  |.  EB 06         |jmp     short 004B20CD
    21. 004B20C7  |>  83C6 04       |add     esi, 4
    22. 004B20CA  |.  4B            |dec     ebx
    23. 004B20CB  |.^ 75 E5         \jnz     short 004B20B2                  ;  上面这个循环是在比较用户名是否是软件预定义的20多个用

    24. 户名中的一个
    25. 004B20CD  |>  803D 5C3E4C00>cmp     byte ptr [4C3E5C], 0             ;  用户名若不是预定义的用户名中的一个,则提示错误
    26. 004B20D4  |.  74 1A         je      short 004B20F0
    27. 004B20D6  |.  6A 00         push    0                                ; /Arg1 = 00000000
    28. 004B20D8  |.  66:8B0D FC224>mov     cx, word ptr [4B22FC]            ; |
    29. 004B20DF  |.  B2 02         mov     dl, 2                            ; |
    30. 004B20E1  |.  B8 08234B00   mov     eax, 004B2308                    ; |invalid register code! please retry!
    31. 004B20E6  |.  E8 B13BF8FF   call    00435C9C                         ; \MP3_Cutt.00435C9C
    32. 004B20EB  |.  E9 C0010000   jmp     004B22B0
    33. 004B20F0  |>  8D55 EC       lea     edx, dword ptr [ebp-14]
    34. 004B20F3  |.  8B87 20030000 mov     eax, dword ptr [edi+320]
    35. 004B20F9  |.  E8 5665FBFF   call    00468654
    36. 004B20FE  |.  8B45 EC       mov     eax, dword ptr [ebp-14]          ;  假码放入EAX
    37. 004B2101  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
    38. 004B2104  |.  E8 C766F5FF   call    004087D0
    39. 004B2109  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
    40. 004B210C  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
    41. 004B210F  |.  E8 F066F5FF   call    00408804
    42. 004B2114  |.  8B55 E8       mov     edx, dword ptr [ebp-18]
    43. 004B2117  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
    44. 004B211A  |.  E8 C121F5FF   call    004042E0
    45. 004B211F  |.  837D FC 00    cmp     dword ptr [ebp-4], 0             ;  比较用户名是否为空
    46. 004B2123  |.  0F84 87010000 je      004B22B0
    47. 004B2129  |.  837D F8 00    cmp     dword ptr [ebp-8], 0             ;  比较注册码是否为空
    48. 004B212D  |.  0F84 7D010000 je      004B22B0
    49. 004B2133  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  假码入栈
    50. 004B2136  |.  E8 CD23F5FF   call    00404508                         ;  求假码长度
    51. 004B213B  |.  85C0          test    eax, eax
    52. 004B213D  |.  7E 35         jle     short 004B2174
    53. 004B213F  |.  BA 01000000   mov     edx, 1
    54. 004B2144  |>  8B4D F8       /mov     ecx, dword ptr [ebp-8]          ;  这个循环是在检测用户名是不是数字,不是则提示错误
    55. 004B2147  |.  0FB64C11 FF   |movzx   ecx, byte ptr [ecx+edx-1]
    56. 004B214C  |.  83F9 30       |cmp     ecx, 30
    57. 004B214F  |.  7C 05         |jl      short 004B2156
    58. 004B2151  |.  83F9 39       |cmp     ecx, 39
    59. 004B2154  |.  7E 1A         |jle     short 004B2170
    60. 004B2156  |>  6A 00         |push    0                               ; /Arg1 = 00000000
    61. 004B2158  |.  66:8B0D FC224>|mov     cx, word ptr [4B22FC]           ; |
    62. 004B215F  |.  B2 02         |mov     dl, 2                           ; |
    63. 004B2161  |.  B8 08234B00   |mov     eax, 004B2308                   ; |invalid register code! please retry!
    64. 004B2166  |.  E8 313BF8FF   |call    00435C9C                        ; \MP3_Cutt.00435C9C
    65. 004B216B  |.  E9 40010000   |jmp     004B22B0
    66. 004B2170  |>  42            |inc     edx
    67. 004B2171  |.  48            |dec     eax
    68. 004B2172  |.^ 75 D0         \jnz     short 004B2144
    69. 004B2174  |>  33F6          xor     esi, esi
    70. 004B2176  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    71. 004B2179  |.  E8 8A23F5FF   call    00404508                         ;  计算用户名长度
    72. 004B217E  |.  85C0          test    eax, eax
    73. 004B2180  |.  7E 13         jle     short 004B2195
    74. 004B2182  |.  BB 01000000   mov     ebx, 1
    75. 004B2187  |>  8B55 FC       /mov     edx, dword ptr [ebp-4]          ;  求用户名十六进制和,设为Sum
    76. 004B218A  |.  0FB6541A FF   |movzx   edx, byte ptr [edx+ebx-1]
    77. 004B218F  |.  03F2          |add     esi, edx
    78. 004B2191  |.  43            |inc     ebx
    79. 004B2192  |.  48            |dec     eax
    80. 004B2193  |.^ 75 F2         \jnz     short 004B2187
    81. 004B2195  |>  69C6 9FF30700 imul    eax, esi, 7F39F                  ;  把Sum*0x7F39F的值放入EAX
    82. 004B219B  |.  83C0 20       add     eax, 20                          ;  上一步求出的值加上0x20
    83. 004B219E  |.  D1F8          sar     eax, 1                           ;  对EAX的值算数右移1位,值依旧放入EAX
    84. 004B21A0  |.  79 03         jns     short 004B21A5                   ;  非负跳转
    85. 004B21A2  |.  83D0 00       adc     eax, 0                           ;  EAX+0+CF标志位
    86. 004B21A5  |>  8BF0          mov     esi, eax                         ;  把根据用户民求出的值放入ESI保存(即真正的注册码)
    87. 004B21A7  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  假码放入EAX
    88. 004B21AA  |.  E8 DD69F5FF   call    00408B8C                         ;  这个函数应该是strtoint,然后inttohex,既然核心算法已经结束,我们就不看了
    89. 004B21AF  |.  3BF0          cmp     esi, eax
    90. 004B21B1  |.  75 56         jnz     short 004B2209                   ;  很明显,跳向错误哦
    91. 004B21B3  |.  6A 00         push    0                                ; /Arg1 = 00000000
    92. 004B21B5  |.  66:8B0D FC224>mov     cx, word ptr [4B22FC]            ; |
    93. 004B21BC  |.  B2 02         mov     dl, 2                            ; |
    94. 004B21BE  |.  B8 38234B00   mov     eax, 004B2338                    ; |congratulation! you have successfully registered!
    95. 004B21C3  |.  E8 D43AF8FF   call    00435C9C                         ; \MP3_Cutt.00435C9C
    复制代码
    算法比较简单,其中在004B21AA的call里面也是一堆算法,但是没什么用,略过,总结如下:
    1、软件自定义21个用户名
    2、用户输入的用户名必须是这21个中的一个,否则出错
    3、注册码必须是数字,否则出错
    4、用户名十六进制和经过简单运算后的结果作为注册码和假码比较

    其中21个用户名如下:
    VS88T6-Vs86 TV66P6-TV66 S1R6P6-SV66 TDR6p6-SV66 TDR6p6-EVS TDR6p6-ST1 sf6p6-VB1 B8sf6p6-VB1 B8TDf6p6-VB1 BS45f6p6-VB1
    Osrf6p6-VB1 Ofrg6p6-VB1 ESrg6p6-VB1 IUrg6p6-VB1 IUDT6-BX1  DUIT6-tV1  S1IT6-DV1 SNMS6-DV1   SNWS6-TN1    SNWS6-MN3
    TDVS6-MN3

    注册机关键源码公布如下(用一个combobox组件把21个items用户名放入):
    1. procedure TForm1.cbb1Change(Sender: TObject);
    2. var
    3.   temp:Integer;
    4.   name:string;
    5. begin
    6.   name:=Form1.cbb1.Text;
    7.   asm
    8.     push    ebx
    9.     xor     esi,esi                          {这一句至关重要,开始时我没有清零ESI,则生成的注册码全是错的}
    10.     mov     ebx, 1
    11.    @004B2187:
    12.     mov     edx, name                        {用户名放入EDX,用户名十六进制求和设为sum}
    13.     movzx   edx, byte ptr [edx+ebx-1]
    14.     add     esi, edx
    15.     inc     ebx
    16.     dec     eax
    17.     jnz     @004B2187
    18.    @004B2195:
    19.     imul    eax, esi, $07F39F                { 把Sum*0x7F39F的值放入EAX}
    20.     add     eax, $020                        { 上一步求出的值加上0x20}
    21.     sar     eax, 1                           { 对EAX的值算数右移1位,值依旧放入EAX}
    22.     jns     @004B21A5                        { 非负跳转}
    23.     adc     eax, 0
    24.     jmp     @004B21A5
    25.    @004B21A5:
    26.     mov     temp,eax
    27.     pop     ebx
    28.   end;
    29.   Form1.Edit2.Text:=IntToStr(temp);
    30. end;

    31. end.
    复制代码
    有什么问题大家尽管提,我这是自学并第一次使用嵌入汇编,可能有点不太精简呵呵,奥运快乐!!

    注册机及其源码公布如下:

    [ 本帖最后由 playboysen 于 2008-8-8 19:25 编辑 ]

    MP3 Cutter Joiner注册机.rar

    226.75 KB, 下载次数: 36, 下载积分: 飘云币 -2 枚

    注册机源码.rar

    82.26 KB, 下载次数: 21, 下载积分: 飘云币 -2 枚

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-11-19 17:03
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2008-8-15 21:08:46 | 显示全部楼层
    /:L 我菜鸟看不懂哦,看下学习下!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-11-26 22:00
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-8-15 22:09:35 | 显示全部楼层
    强人。。。。多谢分享。。。。/:good /:good /:good
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-16 00:12:00 | 显示全部楼层
    牛人,先看看学习一下算法分析
    PYG19周年生日快乐!

    该用户从未签到

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

    该用户从未签到

    发表于 2008-11-1 21:06:18 | 显示全部楼层
    学习下/:014
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-2-7 19:52
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2008-11-2 09:50:41 | 显示全部楼层
    写的很精辟 谢谢分享学习下
    PYG19周年生日快乐!
  • TA的每日心情

    2021-7-30 09:06
  • 签到天数: 131 天

    [LV.7]常住居民III

    发表于 2008-11-2 13:36:08 | 显示全部楼层
    强人啊,学习。..
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-1-23 22:24:59 | 显示全部楼层
    很好 有具体实例 我也去试试。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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