Bannershop 4.5破解手記

看雪資料發表於2015-11-15

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,彎路走不少,可是感覺棒極了。(@_@)

相關文章