吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5424|回复: 7
收起左侧

[分享] Zapline第十天算法分析

[复制链接]
samisgod 发表于 2009-2-6 11:12
【文章标题】: Zapline第十天算法分析
【文章作者】: samisgod
【作者邮箱】: 21gh@163.com
【下载地址】: http://bbs.52pojie.cn/thread-18642-1-1.html
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

关键点查找很简单,这里只简单贴下算法
00401127   > /0FBE8E FE204000    movsx   ecx,byte ptr ds:[esi+4020FE] ;  4020FE是一张表,下面会给出
0040112E   . |83F9 4D            cmp     ecx,4D                       ;  0x4D是最后一个数值
00401131   . |74 2F              je      short 00401162               ;  流程结束?
00401133   . |890D 5E214000      mov     dword ptr ds:[40215E],ecx       存入[40215E]
00401139   . |51                 push    ecx                          ; /ButtonID=表中对应值
0040113A   . |FF75 08            push    dword ptr ss:[ebp+8]         ; |hWnd = 000402E8 ('Duelist's Crackme #3',class='#32770')
0040113D   . |E8 D0010000        call    00401312                     ; \IsDlgButtonChecked
00401142   . |46                 inc     esi                          ; esi+=1
00401143   . |83F8 00            cmp     eax,0
00401146    ^ 74 DF              je      short 00401127               ;  对应框勾上则往下走
00401148     |A1 5E214000        mov     eax,dword ptr ds:[40215E]    ;  取得该次表值
0040114D     |0FBE8E FE204000    movsx   ecx,byte ptr ds:[esi+4020FE] ;  取得下一位表值
00401154     |0FAFC1             imul    eax,ecx                  
00401157   . |0FAFC6             imul    eax,esi                      ;  两表值相加再乘以循环次数
0040115A   . |0105 62214000      add     dword ptr ds:[402162],eax    ;  累加放入[402162]
00401160   .^\EB C5              jmp     short 00401127               ;  继续循环
00401162   >  A1 62214000        mov     eax,dword ptr ds:[402162]    ;  
00401167   .  6BC0 4D            imul    eax,eax,4D                   ;  /[402162]*4与0x0F35466比较
0040116A   .  3D 6654F300        cmp     eax,0F35466                  ;  \也就是上面流程得到值应为0x328FE
0040116F   .  75 20              jnz     short 00401191               ;  DueList_.00401191
00401171   .  68 00200000        push    2000                         ; /Style = MB_OK|MB_TASKMODAL
00401176   .  68 01204000        push    402001                       ; |duelist's crackme #3
0040117B   .  68 17204000        push    402017                       ; |congratulations! please send a screenshot of your solution to duelist@beer.com!
00401180   .  6A 00              push    0                            ; |hOwner = NULL
00401182   .  E8 55010000        call    004012DC                     ; \MessageBoxA
00401187   .  B8 01000000        mov     eax,1
0040118C   .^ E9 69FFFFFF        jmp     004010FA                     ;  DueList_.004010FA
00401191   >  68 00200000        push    2000                         ; /Style = MB_OK|MB_TASKMODAL
00401196   .  68 01204000        push    402001                       ; |duelist's crackme #3
0040119B   .  68 68204000        push    402068                       ; |your registration info is invalid... please support shareware authors by buying software!
004011A0   .  6A 00              push    0                            ; |hOwner = NULL
004011A2   .  E8 35010000        call    004012DC                     ; \MessageBoxA
004011A7   .  B8 00000000        mov     eax,0
4020FE的表值如下
004020FE  16 49 5E 15 27 26 21 25  I^'&!%
00402106  1D 59 53 37 31 48 5D 0C  YS71H].
0040210E  61 52 4D 00 00 00 00 00  aRM.....
整理一下得到
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19
16 49 5E 15 27 26 21 25 1D 59 53 37 31 48 5D 0C 61 52 4D

这里我们猥琐一下,把401146处的je给NOP掉,然后在40115A处下断(用完后记得恢复)
让程序帮我们计算出每次的值,之后得到下表

1.646  
2.359C
3.1722
4.CCC  
5.1CF2
6.1D64
7.2163
8.2188
9.5ABD
10.1208E
11.C427
12.7E54
13.B328
14.16E30
15.4164  
16.48C0  
17.21032
18.1BBF4

于是问题变成从这里面取出不定项的值相加等于0x328FE的问题..
我没写程序,直接将前面较小的几项相加,然后根据与后面值相加拼凑结果进行增减....
于是算了N长时间...

最后得出结果为
0x328FE=0x359C+0x1722+0xCCC+0x1CF2+0x1D64+0x2163+0xC427+0x16E30+0x4164

分别为2 3 4 5 6 7 11 14 15项

下面要计算到底要按哪个按钮
上面计算出了分别为2 3 4 5 6 7 11 14 15项
整理下可得对应按钮ID如下表所示
49 5E 15 27 26 21 53 48 5D

这时候可以随便掏出个工具查看下CM的每个框的ID了
我用了个Spy4Win
得到对应ID如下
61 49 5E 16 25 26 21 59 53
15 37 31 48 5D 0C 52 27 1D

最后即可计算出要打勾的框为
#1-2 #1-3 #2-1 #2-8 #1-6 #1-7 #1-9 #2-4 #2-5
注册成功

[ 本帖最后由 samisgod 于 2009-2-6 16:28 编辑 ]

免费评分

参与人数 1威望 +1 收起 理由
wgz001 + 1 感谢发布原创作品,[吾爱破解]因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| samisgod 发表于 2009-2-6 11:13
晕.贴出来才发现有人发过了...
早知不那样算了....ORZ
:Q
yangjt 发表于 2009-2-6 11:21
creantan 发表于 2009-2-6 11:28
膜拜下。。。。刚起床就看到了。。。呵呵。。[s:215]
zapline 发表于 2009-2-6 13:43
[s:7] 又学了方法啊 -- 哈哈
iawen 发表于 2009-2-6 14:22
太强大了!

膜拜一下,学习了!
下雪天 发表于 2009-2-6 14:25
很好很强大,学习中。。。。看来我要加快进度了
a2213572 发表于 2009-2-8 01:32
實在看不懂.
先下載收藏!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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