• 标 题:Bannershop 4.5破解手记
  • 作 者:rock
  • 时 间:2002/11/16 01:47pm 
  • 链 接:http://bbs.pediy.com

Bannershop 4.5破解手记,大侠止步^_^

作者:石头   QQ:4477522

2002-10-23

一位网友让我给做一个logo,应充之下我下载了Bannershop 4.5

(下载地址:http://www.selteco.com/download/sbsga.exe)开始工作,

花了数小时努力,总算是完成任务了,马上save,不幸的事情发生了“非注册用户不能存盘”

一怒之下,菜菜的我下决心一定要把它搞定。

打开文件,输入"123456-123456789", 一共是15位。出现"Invalid Seviral number"

用w32dasm调入该文件,用数据参考,找"Invalid serial number."

:00402396 6A10                    push 00000010
:00402398 688CF34700              push 0047F38C  
:0040239D 6868F14700              push 0047F168   ->"Invalid serial number."
:004023A2 6A00                    push 00000000
:004023A4 FF15F8B54600            Call dword ptr [0046B5F8]
:004023AA 8D4C2440                lea ecx, dword ptr [esp+40]
:004023AE C7842410040000FFFFFFFF  mov dword ptr [esp+00000410], FFFFFFFF
:004023B9 E874630400              call 00448732

运行TRW2000(我的硬盘太小只能用它^_^)下中断402396,再逆向上往上查找,看看是谁在调用“00402396”

:004022A8 E8730A0000              call 00402D20
:004022AD 85C0                    test eax, eax
:004022AF 0F84E1000000            je 00402396    ->原来在这里,如果不跳转的话,就可以过关了。
:004022B5 8B8424A4000000          mov eax, dword ptr [esp+000000A4]

一时兴起,想看看这"seviral number"长什么样,继速下去。

原来是根椐"call 00402d20"的结果判断是否宣布"Invalid seviral number"

进入 call 00402d20

:00402D20 83EC3C                  sub esp, 0000003C
:00402D23 8B4C2440                mov ecx, dword ptr [esp+40]      =>123456在这里出现了
:00402D27 B88F588B4F              mov eax, 4F8B588F
:00402D2C F7E1                    mul ecx
:00402D2E 8BC1                    mov eax, ecx
:00402D30 53                      push ebx            push ebx
:00402D31 2BC2                    sub eax, edx
:00402D33 55                      push ebp
:00402D34 D1E8                    shr eax, 1
:00402D36 03C2                    add eax, edx
:00402D38 56                      push esi             push edx
:00402D39 C1E810                  shr eax, 10
:00402D3C 33D2                    xor edx, edx
:00402D3E BE0A000000              mov esi, 0000000A
:00402D43 F7F6                    div esi
:00402D45 B85917B7D1              mov eax, D1B71759
:00402D4A 57                      push edi
:00402D4B BF0A000000              mov edi, 0000000A
:00402D50 BB0A000000              mov ebx, 0000000A
:00402D55 BD0A000000              mov ebp, 0000000A
:00402D5A 8BF2                    mov esi, edx
:00402D5C F7E1                    mul ecx
:00402D5E 8BC2                    mov eax, edx
:00402D60 33D2                    xor edx, edx
:00402D62 C1E80D                  shr eax, 0D
:00402D65 F7F7                    div edi
:00402D67 B8D34D6210              mov eax, 10624DD3
:00402D6C 89542414                mov dword ptr [esp+14], edx   ???
:00402D70 F7E1                    mul ecx
:00402D72 8BC2                    mov eax, edx
:00402D74 33D2                    xor edx, edx
:00402D76 C1E806                  shr eax, 06
:00402D79 F7F7                    div edi
:00402D7B B81F85EB51              mov eax, 51EB851F
:00402D80 89542418                mov dword ptr [esp+18], edx    ???
………………

原来是把我输入的错误serial number 依次一位一位分别放进:

ESI,[ESP+14],[ESP+18],EDI,EBX,[ESP+24],[ESP+28],[ESP+2C],[ESP+30],[ESP+34],[ESP+38],
[ESP+3C],[ESP+40],EDX,EAX

一共是15位,如是我按顺序以"x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6,y7,y8,y9"来表示它们

…………
:00402E65 8B44243C                mov eax, dword ptr [esp+3C]
:00402E69 8D0C02                  lea ecx, dword ptr [edx+eax]
:00402E6C 8B442434                mov eax, dword ptr [esp+34]
:00402E70 8B542430                mov edx, dword ptr [esp+30]
:00402E74 03C8                    add ecx, eax
:00402E76 8B442428                mov eax, dword ptr [esp+28]
:00402E7A 03CA                    add ecx, edx
:00402E7C 8B542424                mov edx, dword ptr [esp+24]
:00402E80 03C8                    add ecx, eax
:00402E82 03CA                    add ecx, edx
:00402E84 03CF                    add ecx, edi
:00402E86 03CE                    add ecx, esi

到这里就把 "x1,x4,x6,y1,y3,y4,y6,y9" 的总和放进了 "ecx" 就称为"sum"吧

:00402E88 BE0A000000              mov esi, 0000000A
:00402E8D 8D4102                  lea eax, dword ptr [ecx+02]
:00402E90 99                      cdq
:00402E91 F7FE                    idiv esi
:00402E93 3BD3                    cmp edx, ebx
:00402E95 740C                    je 00402EA3
:00402E97 5F                      pop edi
:00402E98 5E                      pop esi
:00402E99 5D                      pop ebp
:00402E9A 33C0                    xor eax, eax
:00402E9C 5B                      pop ebx
:00402E9D 83C43C                  add esp, 0000003C
:00402EA0 C20800                  ret 0008

将(sum+2)/10的余数与"x5"作比,相等则继速,不等则宣布"Invalid seviral number"

(均为十进制数)换句话说就是: (sum+2)/10的余数=x5

:00402EA3 03CA                    add ecx, edx
:00402EA5 BE0A000000              mov esi, 0000000A
:00402EAA 8D4107                  lea eax, dword ptr [ecx+07]
:00402EAD 99                      cdq
:00402EAE F7FE                    idiv esi
:00402EB0 3B542418                cmp edx, dword ptr [esp+18]
:00402EB4 740C                    je 00402EC2
:00402EB6 5F                      pop edi
:00402EB7 5E                      pop esi
:00402EB8 5D                      pop ebp
:00402EB9 33C0                    xor eax, eax
:00402EBB 5B                      pop ebx
:00402EBC 83C43C                  add esp, 0000003C
:00402EBF C20800                  ret 0008

    (sum+x5+7)/10余数=x3

…………
:00402F51 5B                      pop ebx
:00402F52 3BD1                    cmp edx, ecx
:00402F54 0F94C0                  sete al
:00402F57 83C43C                  add esp, 0000003C
:00402F5A C20800                  ret 0008

依次类推得出全部结果:  

    (sum+2)/10的余数=x5
            (sum+x5+7)/10的余数=x3          
            (sum+x5+x3+3)/10的余数=y2
            (sum+x5+x3+y2+5)/10的余数=y7
            (sum+x5+x3+y2+y7+1)/10的余数=y8
            (sum+x5+x3+y2+y7+y8+9)/10的余数=y5
            (sum+x5+x3+y2+y7+y8+y5+4)/10的余数=a2

我将sum假设为"0" 依次算出 x5=2, x3=9, y2=4, y7=0, y8=6, y5=0, a2=5

x1,x4,x6,y1,y3,y4,y6,y9自然是全部为“0”啦。    
             
排列顺序得到   059020-040000060

嘿,相信你可以算出更多的注册码。  

第一次crack,弯路走不少,可是感觉棒极了。(@_@)