飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2389|回复: 0

申请:AVI Splitter V1.0.86注册破解算法分析

[复制链接]
  • TA的每日心情
    郁闷
    2016-1-23 16:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2006-3-14 01:00:31 | 显示全部楼层 |阅读模式
    【破文标题】AVI Splitter V1.0.86破解分析
    【破文作者】gg1211[CZG][PYG][PCG]
    【破解平台】WinXp
    【作者邮箱】[email protected]
    【破解工具】PEiD 、OD
    【保护方式】用户名+序列号
    【破解目的】学习简单算法破解
    【破解声明】我乃小菜鸟一只,偶得一点心得,愿与大家分享:)
    【软件名称】AVI Splitter V1.0.86
    【下载地址】http://www3.skycn.com/soft/19877.html
    【软件简介】AVI 影片分割工具AVI Splitter,能够将2GB以下的单一AVI影片档分割成多个AVI影片档,不用重新压缩就可以直接产生分割文件,程序还可以用来压缩/解压缩内建的VFW编码(如:MPEG-4 或 DivX)。
    【破解步骤】先用PEiD 侦测,发现为Microsoft Visual C++ 7.0,无壳
    试着运行软件,实验码gg1211
                        12345678
    有错误提示,“registration failed",od载入根据提示信息来到这里下断
    00407010 /. 55         push   ebp             \\下断
    00407011 |. 8BEC       mov   ebp, esp
    00407013 |. 83EC 20     sub   esp, 20
    00407016 |. 894D E0     mov   [ebp-20], ecx
    00407019 |. 6A 01       push   1
    0040701B |. 8B4D E0     mov   ecx, [ebp-20]
    0040701E |. E8 869C0100   call   00420CA9
    00407023 |. 8B4D E0     mov   ecx, [ebp-20]
    00407026 |. 83C1 70     add   ecx, 70
    00407029 |. E8 02F5FFFF   call   00406530     \\这里计算用户名位数
    0040702E |. 83F8 02     cmp   eax, 2           \\是超过两位
    00407031 |. 7D 13       jge   short 00407046   \\不跳则死
    00407033 |. 6A 00       push   0
    00407035 |. 6A 00       push   0
    00407037 |. 68 5CE24200   push   0042E25C                 ; please input correct user name!
    0040703C |. E8 B7F70100   call   004267F8
    00407041 |. E9 A9020000   jmp   004072EF
    00407046 |> 8B4D E0     mov   ecx, [ebp-20]
    00407049 |. 83C1 74     add   ecx, 74
    0040704C |. E8 DFF4FFFF   call   00406530       \\计算注册码位数(都是调用406530)
    00407051 |. 83F8 08     cmp   eax, 8           \\小于8为
    00407054 |. 7D 13       jge   short 00407069     \不\跳则死
    00407056 |. 6A 00       push   0
    00407058 |. 6A 00       push   0
    0040705A |. 68 7CE24200   push   0042E27C                 ; please input correct registration code!
    0040705F |. E8 94F70100   call   004267F8
    00407064 |. E9 86020000   jmp   004072EF
    00407069 |> 6A 00       push   0                     \\从这里开始,逐个取
    0040706B |. 8B4D E0     mov   ecx, [ebp-20]         \\ 注册码两位两次我的名字较
    0040706E |. 83C1 70     add   ecx, 70               \\特殊就是gggg,正常格式应该是
    00407071 |. E8 BAEBFFFF   call   00405C30           \\abab这个样
    00407076 |. 8845 EF     mov   [ebp-11], al
    00407079 |. 6A 01       push   1                     ; /Arg1 = 00000001
    0040707B |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    0040707E |. 83C1 70     add   ecx, 70                 ; |
    00407081 |. E8 AAEBFFFF   call   00405C30                 ; \AVISplit.00405C30
    00407086 |. 8845 F8     mov   [ebp-8], al
    00407089 |. 6A 00       push   0                     ; /Arg1 = 00000000
    0040708B |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    0040708E |. 83C1 70     add   ecx, 70                 ; |
    00407091 |. E8 9AEBFFFF   call   00405C30                 ; \AVISplit.00405C30
    00407096 |. 8845 FF     mov   [ebp-1], al
    00407099 |. 6A 01       push   1                     ; /Arg1 = 00000001
    0040709B |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    0040709E |. 83C1 70     add   ecx, 70                 ; |
    004070A1 |. E8 8AEBFFFF   call   00405C30               \\到这里取字符就借宿了
    004070A6 |. 8845 FA     mov   [ebp-6], al           \\这里开始就用所取的字符开始计算
    004070A9 |. 0FB645 EF   movzx   eax, byte ptr [ebp-11]
    004070AD |. 83C8 53     or     eax, 53                       \\ 67 or 53 ->77
    004070B0 |. 8845 EF     mov   [ebp-11], al
    004070B3 |. 0FB64D F8   movzx   ecx, byte ptr [ebp-8]
    004070B7 |. 83C9 41     or     ecx, 41                       \\67 or 41->67
    004070BA |. 884D F8     mov   [ebp-8], cl
    004070BD |. 0FB655 FF   movzx   edx, byte ptr [ebp-1]
    004070C1 |. 83CA 56     or     edx, 56                       \\67 or 56->77
    004070C4 |. 8855 FF     mov   [ebp-1], dl
    004070C7 |. 0FB645 FA   movzx   eax, byte ptr [ebp-6]
    004070CB |. 83C8 49     or     eax, 49                     \\67 or 49->6f
    004070CE |. 8845 FA     mov   [ebp-6], al
    004070D1 |. 0FB645 EF   movzx   eax, byte ptr [ebp-11]   \\这里开始用上面得到
    004070D5 |. 99         cdq                           \\的数据进行带符号数除法除oa
    004070D6 |. B9 0A000000   mov   ecx, 0A             \\我们需要的是他的余数并记录004070DB |. F7F9       idiv   ecx
    004070DD |. 8855 EF     mov   [ebp-11], dl                 \\dl=09
    004070E0 |. 0FB645 F8   movzx   eax, byte ptr [ebp-8]
    004070E4 |. 99         cdq
    004070E5 |. B9 0A000000   mov   ecx, 0A
    004070EA |. F7F9       idiv   ecx
    004070EC |. 8855 F8     mov   [ebp-8], dl                     \\dl =01
    004070EF |. 0FB645 FF   movzx   eax, byte ptr [ebp-1]
    004070F3 |. 99         cdq
    004070F4 |. B9 0A000000   mov   ecx, 0A
    004070F9 |. F7F9       idiv   ecx
    004070FB |. 8855 FF     mov   [ebp-1], dl                     \\dl=03
    004070FE |. 0FB645 FA   movzx   eax, byte ptr [ebp-6]
    00407102 |. 99         cdq
    00407103 |. B9 0A000000   mov   ecx, 0A
    00407108 |. F7F9       idiv   ecx
    0040710A |. 8855 FA     mov   [ebp-6], dl                       \\dl=09
    0040710D |. C745 F0 00000>mov   dword ptr [ebp-10], 0
    00407114 |. C745 E8 00000>mov   dword ptr [ebp-18], 0
    0040711B |. EB 09       jmp   short 00407126
    0040711D |> 8B55 E8     /mov   edx, [ebp-18]           \\ 用户名asc累加
    00407120 |. 83C2 01     |add   edx, 1
    00407123 |. 8955 E8     |mov   [ebp-18], edx
    00407126 |> 8B4D E0     mov   ecx, [ebp-20]
    00407129 |. 83C1 70     |add   ecx, 70
    0040712C |. E8 FFF3FFFF   |call   00406530
    00407131 |. 3945 E8     |cmp   [ebp-18], eax
    00407134 |. 7D 1E       |jge   short 00407154
    00407136 |. 8B45 E8     |mov   eax, [ebp-18]
    00407139 |. 50         |push   eax                   ; /Arg1
    0040713A |. 8B4D E0     |mov   ecx, [ebp-20]             ; |
    0040713D |. 83C1 70     |add   ecx, 70                 ; |
    00407140 |. E8 EBEAFFFF   |call   00405C30                 ; \AVISplit.00405C30
    00407145 |. 8845 E7     |mov   [ebp-19], al
    00407148 |. 0FB64D E7   |movzx   ecx, byte ptr [ebp-19]
    0040714C |. 034D F0     |add   ecx, [ebp-10]
    0040714F |. 894D F0     |mov   [ebp-10], ecx
    00407152 |.^ EB C9       \jmp   short 0040711D           \\累加结果193
    00407154 |> 8B45 F0     mov   eax, [ebp-10]             \\带符号数除法除oa
    00407157 |. 99         cdq
    00407158 |. B9 0A000000   mov   ecx, 0A
    0040715D |. F7F9       idiv   ecx
    0040715F |. 8855 F4     mov   [ebp-C], dl                     \\dl=03
    00407162 |. 6A 00       push   0                     \\就下来就是读取假码
    00407164 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    00407167 |. 83C1 74     add   ecx, 74                 ; |
    0040716A |. E8 C1EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    0040716F |. 8845 FC     mov   [ebp-4], al
    00407172 |. 6A 01       push   1                     ; /Arg1 = 00000001
    00407174 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    00407177 |. 83C1 74     add   ecx, 74                 ; |
    0040717A |. E8 B1EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    0040717F |. 8845 FD     mov   [ebp-3], al
    00407182 |. 6A 02       push   2                     ; /Arg1 = 00000002
    00407184 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    00407187 |. 83C1 74     add   ecx, 74                 ; |
    0040718A |. E8 A1EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    0040718F |. 8845 F6     mov   [ebp-A], al
    00407192 |. 6A 03       push   3                     ; /Arg1 = 00000003
    00407194 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    00407197 |. 83C1 74     add   ecx, 74                 ; |
    0040719A |. E8 91EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    0040719F |. 8845 F5     mov   [ebp-B], al
    004071A2 |. 6A 04       push   4                     ; /Arg1 = 00000004
    004071A4 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    004071A7 |. 83C1 74     add   ecx, 74                 ; |
    004071AA |. E8 81EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    004071AF |. 8845 F9     mov   [ebp-7], al
    004071B2 |. 6A 05       push   5                     ; /Arg1 = 00000005
    004071B4 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    004071B7 |. 83C1 74     add   ecx, 74                 ; |
    004071BA |. E8 71EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    004071BF |. 8845 F7     mov   [ebp-9], al
    004071C2 |. 6A 06       push   6                     ; /Arg1 = 00000006
    004071C4 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    004071C7 |. 83C1 74     add   ecx, 74                 ; |
    004071CA |. E8 61EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    004071CF |. 8845 FE     mov   [ebp-2], al
    004071D2 |. 6A 07       push   7                     ; /Arg1 = 00000007
    004071D4 |. 8B4D E0     mov   ecx, [ebp-20]             ; |
    004071D7 |. 83C1 74     add   ecx, 74                 ; |
    004071DA |. E8 51EAFFFF   call   00405C30                 ; \AVISplit.00405C30
    004071DF |. 8845 FB     mov   [ebp-5], al
    004071E2 |. 0FB655 EF   movzx   edx, byte ptr [ebp-11]
    004071E6 |. 0FB645 FC   movzx   eax, byte ptr [ebp-4]
    004071EA |. 83E8 30     sub   eax, 30                 ; \\判断第一位注册码
    004071ED |. 3BD0       cmp   edx, eax
    004071EF |. 75 3C       jnz   short 0040722D             \\跳则死
    004071F1 |. 0FB64D F8   movzx   ecx, byte ptr [ebp-8]     \\后面的判断是一样的,   
    004071F5 |. 0FB655 FD   movzx   edx, byte ptr [ebp-3]     \\他只检查前五位
    004071F9 |. 83EA 30     sub   edx, 30                     
    004071FC |. 3BCA       cmp   ecx, edx
    004071FE |. 75 2D       jnz   short 0040722D
    00407200 |. 0FB645 FF   movzx   eax, byte ptr [ebp-1]
    00407204 |. 0FB64D F6   movzx   ecx, byte ptr [ebp-A]
    00407208 |. 83E9 30     sub   ecx, 30
    0040720B |. 3BC1       cmp   eax, ecx
    0040720D |. 75 1E       jnz   short 0040722D
    0040720F |. 0FB655 FA   movzx   edx, byte ptr [ebp-6]
    00407213 |. 0FB645 F5   movzx   eax, byte ptr [ebp-B]
    00407217 |. 83E8 30     sub   eax, 30
    0040721A |. 3BD0       cmp   edx, eax
    0040721C |. 75 0F       jnz   short 0040722D                 \\到这里前5位检查结束
    0040721E |. 0FB64D F4   movzx   ecx, byte ptr [ebp-C]   
    00407222 |. 0FB655 F9   movzx   edx, byte ptr [ebp-7]
    00407226 |. 83EA 30     sub   edx, 30
    00407229 |. 3BCA       cmp   ecx, edx
    0040722B |. 74 58       je     short 00407285
    0040722D |> 0FB645 FC   movzx   eax, byte ptr [ebp-4]
    00407231 |. 83F8 39     cmp   eax, 39
    00407234 |. 0F85 A7000000 jnz   004072E1
    0040723A |. 0FB64D FD   movzx   ecx, byte ptr [ebp-3]
    0040723E |. 83F9 33     cmp   ecx, 33
    00407241 |. 0F85 9A000000 jnz   004072E1
    00407247 |. 0FB655 F6   movzx   edx, byte ptr [ebp-A]
    0040724B |. 83FA 38     cmp   edx, 38
    0040724E |. 0F85 8D000000 jnz   004072E1
    00407254 |. 0FB645 F5   movzx   eax, byte ptr [ebp-B]
    00407258 |. 83F8 38     cmp   eax, 38
    0040725B |. 0F85 80000000 jnz   004072E1
    00407261 |. 0FB64D F9   movzx   ecx, byte ptr [ebp-7]
    00407265 |. 83F9 33     cmp   ecx, 33
    00407268 |. 75 77       jnz   short 004072E1
    0040726A |. 0FB655 F7   movzx   edx, byte ptr [ebp-9]
    0040726E |. 83FA 31     cmp   edx, 31
    00407271 |. 75 6E       jnz   short 004072E1
    00407273 |. 0FB645 FE   movzx   eax, byte ptr [ebp-2]
    00407277 |. 83F8 34     cmp   eax, 34
    0040727A |. 75 65       jnz   short 004072E1
    0040727C |. 0FB64D FB   movzx   ecx, byte ptr [ebp-5]
    00407280 |. 83F9 36     cmp   ecx, 36
    00407283 |. 75 5C       jnz   short 004072E1
    00407285 |> 6A 00       push   0
    00407287 |. 6A 00       push   0
    00407289 |. 68 A4E24200   push   0042E2A4                 ; registration has succeeded!
    0040728E |. E8 65F50100   call   004267F8
    00407293 |. 8B4D E0     mov   ecx, [ebp-20]
    00407296 |. 83C1 70     add   ecx, 70
    00407299 |. E8 62F2FFFF   call   00406500
    0040729E |. 50         push   eax
    0040729F |. 68 C0E24200   push   0042E2C0                 ; username
    004072A4 |. 68 CCE24200   push   0042E2CC                 ; option
    004072A9 |. E8 A2ECFFFF   call   00405F50
    004072AE |. 8BC8       mov   ecx, eax                 ; |
    004072B0 |. E8 7FF60100   call   00426934                 ; \AVISplit.00426934
    004072B5 |. 8B4D E0     mov   ecx, [ebp-20]
    004072B8 |. 83C1 74     add   ecx, 74
    004072BB |. E8 40F2FFFF   call   00406500
    004072C0 |. 50         push   eax
    004072C1 |. 68 D4E24200   push   0042E2D4                 ; registration_code
    004072C6 |. 68 E8E24200   push   0042E2E8                 ; option
    004072CB |. E8 80ECFFFF   call   00405F50
    004072D0 |. 8BC8       mov   ecx, eax                 ; |
    004072D2 |. E8 5DF60100   call   00426934                 ; \AVISplit.00426934
    004072D7 |. 8B4D E0     mov   ecx, [ebp-20]
    004072DA |. E8 7E830100   call   0041F65D
    004072DF |. EB 0E       jmp   short 004072EF
    004072E1 |> 6A 00       push   0
    004072E3 |. 6A 00       push   0
    004072E5 |. 68 F0E24200   push   0042E2F0                 ; registration failed!

    从上分析可以看出
    这个算法很简单,基本上没有什么难度
    只是要求用户名2位以上,注册码8位以上,然后
    1.取前两位注册码以abab形式排序,分别于53,41,56,49 or运算
    2.将计算所得带符号数除法除oa,的到余数序列,假设位a
    3.用户名asc累加带符号数除法除oa,的到余数序列,假设位b
    4.注册码就是a+b+三位以上任意注册码
    最后得到我的注册码是
    gg1211
    93913888

    [ 本帖最后由 gg1211 于 2006-3-14 05:56 编辑 ]
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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