首页
社区
课程
招聘
[原创]给新手练手,同时也是请教!!五字棋3.21算法(蒋祥刚)
发表于: 2008-1-31 19:45 4203

[原创]给新手练手,同时也是请教!!五字棋3.21算法(蒋祥刚)

2008-1-31 19:45
4203
【破文标题】 五子棋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
由于是初学,所以有好多地方不明白,也不知该如何写。
上面不懂的地方,希望有兴趣的同志帮忙分析下。

努力学习中!!

图片发不上去!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己先顶一下.同时问下,怎么样才能把图片发上去???
2008-1-31 19:46
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
权限不够。
10帖就有上传附件的权限。
2008-2-1 09:24
0
游客
登录 | 注册 方可回帖
返回
//