【破文标题】 五子棋3.21 - 算法分析
【破文作者】 creamboy
【作者邮箱】 syqzml@163.com
【软件名称】 五子棋3.21
【软件大小】 680KB
【软件类别】 国产软件/游戏娱乐
【运行环境】 Win9x/Me/NT/2000/XP
【加入时间】 2008-1-31
【下载地址】 下载页面
【保护方式】 注册码/明码比较
【编译语言】 Borland Delphi
【调试环境】 winXP PEID Ollydbg
【破解日期】 2008-1-31
【破解目的】 研究算法分析
【作者声明】 初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【破解内容】
用PEID查没有加壳,Borland Delphi编写的,启动软件后点击注册,填入用户名和注册码,点注册,有(名字和注册号不匹配)错误提示。
好,用OD载入,用插件Ultar String Reference-->Find ASCII查找:名字和注册号不匹配。会发现两个比较有用的地方。
双击这两处地方,向上看会找到关键跳:
为什么说上面的是关键跳,因为他跳向成功!!关键跳上面的就是关键比较了。再向上是两上call.可能是关键call.
向上走不远的地方下断: 00475B77 处下断。
F9运行,出现
点帮助-->关于,出现注册界面。
填入abcde,注册号码:123456,点注册。被断下。
向下走。第一个call,本人没看出有什么用??
跟进第二个call看到:
0047585C /$ 55 push ebp
0047585D |. 8BEC mov ebp,esp
0047585F |. 81C4 C8FDFFF>add esp,-238
00475865 |. 53 push ebx
00475866 |. 56 push esi
00475867 |. 57 push edi
00475868 |. 33C0 xor eax,eax
0047586A |. 8985 C8FDFFF>mov dword ptr ss:[ebp-238>
00475870 |. 8985 CCFDFFF>mov dword ptr ss:[ebp-234>
00475876 |. 33C0 xor eax,eax
00475878 |. 55 push ebp
00475879 |. 68 395A4700 push Five.00475A39
0047587E |. 64:FF30 push dword ptr fs:[eax]
00475881 |. 64:8920 mov dword ptr fs:[eax],es>
00475884 |. 6A 00 push 0
00475886 |. 8D85 CCFDFFF>lea eax,dword ptr ss:[ebp>
0047588C |. 50 push eax
0047588D |. B9 505A4700 mov ecx,Five.00475A50 ; ASCII "Name"
00475892 |. BA 605A4700 mov edx,Five.00475A60 ; ASCII "register"
00475897 |. A1 4CD34700 mov eax,dword ptr ds:[47D>
0047589C |. 8B18 mov ebx,dword ptr ds:[eax>
0047589E |. FF13 call dword ptr ds:[ebx]
004758A0 |. 8B95 CCFDFFF>mov edx,dword ptr ss:[ebp>
004758A6 |. 8D85 D0FDFFF>lea eax,dword ptr ss:[ebp>
004758AC |. B9 FF000000 mov ecx,0FF
004758B1 |. E8 E2E4F8FF call Five.00403D98
004758B6 |. 8D95 D0FDFFF>lea edx,dword ptr ss:[ebp>
004758BC |. 8D45 9B lea eax,dword ptr ss:[ebp>
004758BF |. B1 64 mov cl,64
004758C1 |. E8 46D1F8FF call Five.00402A0C
004758C6 |. 6A 00 push 0
004758C8 |. 8D85 C8FDFFF>lea eax,dword ptr ss:[ebp>
004758CE |. 50 push eax
004758CF |. B9 745A4700 mov ecx,Five.00475A74 ; ASCII "RegNo"
004758D4 |. BA 605A4700 mov edx,Five.00475A60 ; ASCII "register"
004758D9 |. A1 4CD34700 mov eax,dword ptr ds:[47D>
004758DE |. 8B18 mov ebx,dword ptr ds:[eax>
004758E0 |. FF13 call dword ptr ds:[ebx]
004758E2 |. 8B95 C8FDFFF>mov edx,dword ptr ss:[ebp>
004758E8 |. 8D85 D0FDFFF>lea eax,dword ptr ss:[ebp>
004758EE |. B9 FF000000 mov ecx,0FF
004758F3 |. E8 A0E4F8FF call Five.00403D98
004758F8 |. 8D95 D0FDFFF>lea edx,dword ptr ss:[ebp>
004758FE |. 8D85 36FFFFF>lea eax,dword ptr ss:[ebp>
00475904 |. B1 64 mov cl,64
00475906 |. E8 01D1F8FF call Five.00402A0C
0047590B |. 8A45 9B mov al,byte ptr ss:[ebp-6>
0047590E |. 84C0 test al,al
00475910 |. 74 09 je short Five.0047591B
00475912 |. 80BD 36FFFFF>cmp byte ptr ss:[ebp-CA],>
00475919 |. 74 0C je short Five.00475927
0047591B |> C605 48D3470>mov byte ptr ds:[47D348],>; ???
00475922 |. E9 F4000000 jmp Five.00475A1B
00475927 |> 8BF0 mov esi,eax
00475929 |. 81E6 FF00000>and esi,0FF
0047592F |. 85F6 test esi,esi
00475931 |. 7C 22 jl short Five.00475955
00475933 |. 46 inc esi
00475934 |. 8D4D 9B lea ecx,dword ptr ss:[ebp>; 用户名前加位数:05,"abcde"送ecx
00475937 |. 8D9D D1FEFFF>lea ebx,dword ptr ss:[ebp>
0047593D |> 33C0 /xor eax,eax ; eax清零
0047593F |. 8A01 |mov al,byte ptr ds:[ecx] ; 05送入al,然后依次是 a b c d e
00475941 |. BF 0A000000 |mov edi,0A ; 0A入edi
00475946 |. 33D2 |xor edx,edx ; 清零
00475948 |. F7F7 |div edi ; 做除法,余数送edx
0047594A |. 80C2 30 |add dl,30 ; 余数加30
0047594D |. 42 |inc edx ; 再加1.以上就是:每一位除以0A,余数+30+1
0047594E |. 8813 |mov byte ptr ds:[ebx],dl ; 在此产生处理后的6位用户名:689:12
00475950 |. 43 |inc ebx
00475951 |. 41 |inc ecx
00475952 |. 4E |dec esi
00475953 |.^ 75 E8 \jnz short Five.0047593D
00475955 |> 33C9 xor ecx,ecx
00475957 |. 8A4D 9B mov cl,byte ptr ss:[ebp-6>; 用户名位数05送cl
0047595A |. 83F9 01 cmp ecx,1
0047595D |. 7C 1A jl short Five.00475979
0047595F |. 8D840D D1FEF>lea eax,dword ptr ss:[ebp>
00475966 |> 8A55 9B /mov dl,byte ptr ss:[ebp->; 用户名位数05送cl
00475969 |. 2AD1 |sub dl,cl ; 位数5-5,然后依次是5-4 5-3 5-2
0047596B |. 03D2 |add edx,edx ; 乘2
0047596D |. 8A18 |mov bl,byte ptr ds:[eax] ; 取689:12, 从2开始向前取。每次取一位
0047596F |. 02D3 |add dl,bl ; 加到dl上。也就是:(5-所在的位数)*2+原数。得到一系列数.
00475971 |. 8810 |mov byte ptr ds:[eax],dl
00475973 |. 49 |dec ecx
00475974 |. 48 |dec eax
00475975 |. 85C9 |test ecx,ecx ; 只处理后5位
00475977 |.^ 75 ED \jnz short Five.00475966 ; 该跳没实现:用户名变成:6@?>32
00475979 |> 8A45 9B mov al,byte ptr ss:[ebp-6>
0047597C |. 3C 06 cmp al,6
0047597E |. 73 30 jnb short Five.004759B0
00475980 |. 33C9 xor ecx,ecx
00475982 |. 8AC8 mov cl,al
00475984 |. 41 inc ecx
00475985 |. 83F9 06 cmp ecx,6
00475988 |. 7F 26 jg short Five.004759B0
0047598A |. 8D9C0D D0FEF>lea ebx,dword ptr ss:[ebp>
00475991 |> 33C0 /xor eax,eax
00475993 |. 8A03 |mov al,byte ptr ds:[ebx]
00475995 |. 83C0 02 |add eax,2
00475998 |. 83E8 30 |sub eax,30
0047599B |. BE 0A000000 |mov esi,0A
004759A0 |. 99 |cdq ; 不知道这个循环是干什么的??
004759A1 |. F7FE |idiv esi
004759A3 |. 80C2 30 |add dl,30
004759A6 |. 8853 01 |mov byte ptr ds:[ebx+1],>
004759A9 |. 41 |inc ecx
004759AA |. 43 |inc ebx
004759AB |. 83F9 07 |cmp ecx,7
004759AE |.^ 75 E1 \jnz short Five.00475991
004759B0 |> B9 06000000 mov ecx,6
004759B5 |. 8D85 D7FEFFF>lea eax,dword ptr ss:[ebp>
004759BB |> B2 06 /mov dl,6
004759BD |. 2AD1 |sub dl,cl
004759BF |. 03D2 |add edx,edx
004759C1 |. 8D1452 |lea edx,dword ptr ds:[ed>
004759C4 |. 8A18 |mov bl,byte ptr ds:[eax]
004759C6 |. 02D3 |add dl,bl
004759C8 |. 8810 |mov byte ptr ds:[eax],dl
004759CA |. 8A10 |mov dl,byte ptr ds:[eax]
004759CC |. 80FA 7E |cmp dl,7E ; 这个也没看出是怎么变出来的。
004759CF |. 76 05 |jbe short Five.004759D6
004759D1 |. 80EA 78 |sub dl,78
004759D4 |. 8810 |mov byte ptr ds:[eax],dl
004759D6 |> 8A10 |mov dl,byte ptr ds:[eax]
004759D8 |. 80FA 21 |cmp dl,21
004759DB |. 73 05 |jnb short Five.004759E2
004759DD |. 80C2 21 |add dl,21
004759E0 |. 8810 |mov byte ptr ds:[eax],dl
004759E2 |> 49 |dec ecx
004759E3 |. 48 |dec eax
004759E4 |. 85C9 |test ecx,ecx
004759E6 |.^ 75 D3 \jnz short Five.004759BB ; 没实现:出现6^WP?84
004759E8 |. C685 D8FEFFF>mov byte ptr ss:[ebp-128]>
004759EF |. C605 48D3470>mov byte ptr ds:[47D348],>; ??
004759F6 |. B9 06000000 mov ecx,6
004759FB |. 8D85 D2FEFFF>lea eax,dword ptr ss:[ebp>; 在此出现明码^WP?84
00475A01 |. 8D95 37FFFFF>lea edx,dword ptr ss:[ebp>; 假码123456
00475A07 |> 8A18 /mov bl,byte ptr ds:[eax]
00475A09 |. 3A1A |cmp bl,byte ptr ds:[edx]
00475A0B |. 74 09 |je short Five.00475A16
00475A0D |. C605 48D3470>|mov byte ptr ds:[47D348]>; ??
00475A14 |. EB 05 |jmp short Five.00475A1B
00475A16 |> 42 |inc edx
00475A17 |. 40 |inc eax
00475A18 |. 49 |dec ecx
00475A19 |.^ 75 EC \jnz short Five.00475A07
00475A1B |> 33C0 xor eax,eax
00475A1D |. 5A pop edx
00475A1E |. 59 pop ecx
00475A1F |. 59 pop ecx
00475A20 |. 64:8910 mov dword ptr fs:[eax],ed>
00475A23 |. 68 405A4700 push Five.00475A40
00475A28 |> 8D85 C8FDFFF>lea eax,dword ptr ss:[ebp>
00475A2E |. BA 02000000 mov edx,2
00475A33 |. E8 28E1F8FF call Five.00403B60
00475A38 \. C3 retn
到此,已得到正确注册吗?? abcde ^WP?84
由于是初学,所以有好多地方不明白,也不知该如何写。
上面不懂的地方,希望有兴趣的同志帮忙分析下。
努力学习中!!
图片发不上去!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)