飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6775|回复: 17

[原创] 一个不输入正确注册码,注册按钮就是灰色的软件的简单分析

[复制链接]

该用户从未签到

发表于 2008-3-28 22:41:22 | 显示全部楼层 |阅读模式
【破文标题】一个不输入正确注册码,注册按钮就是灰色的软件的简单分析
【破文作者】水平太菜,就不写了名字了*^_^*
【作者邮箱】
【作者主页】
破解工具】PEID+DEDE+OD
【破解平台】Windows XP
【软件名称】
【软件大小】
【原版下载】
【保护方式】注册码
【软件简介】
【破解声明】只为讨论、学习与分享破解技术,勿用于非法用途,请多多支持软件开发者!
------------------------------------------------------------------------
【破解过程】    首先先说明一下,上面的软件名称和原版下载我没有写,原因是我们学破解的目的是研究和学习,并不是为了破解而破解,我发破文的目的是把我的一些思路心得和大家分享一下,共同学习、共同进步。如果想要这个软件调试的话请PM我,我会把软件下载地址告诉你,请不要看了我的破文之后没有任何收获就只会发布一个破解成果(破解成果留着自己用,请不要发布,作者写个软件也不容易)
    我的破解总结中还附带了几个问题,希望大侠能指点一下。
    好了,开始我们的破解之旅了,就像我标题说的“一个不输入正确注册码,注册按钮就是灰色的软件”,给大家一个直观的感受什么是灰色按钮吧,如图1

这个软件有“4”个序列号输入框,注册按钮是灰色的,如果你输入的序列号是错误的话,这个灰色按钮是不被激活的,那我们如何下手呢?其实一开始我也是不知道的,直到我看到疑难交流区有一篇关于按钮激活的求助,链接地址:https://www.chinapyg.com/viewthr ... &extra=page%3D5,我看了一下回答的几位大侠的回答(特别是 小邪 大侠的回答),当时只是稍微记了一下。后来刚好就碰上了,呵呵!
    这个软件无壳,DELPHI程序,注册按钮是灰色的,按照我的习惯,DEDE载入看看,查看一下注册窗口的事件,这时灵感就来了,根据上面的小邪大侠的思路:“每隔一断时间就会检查是否正确”,我把关注的焦点放到了Timer事件上,为什么是Timer事件呢?相信接触过编程的都知道有个Timer,它的作用刚好满足“每隔一断时间”的要求,Timer事件一共有4个,其中比较关键的有2个,我们现在来看一下:
Timer2:
00048CCC0  /.  55                 push ebp
0048CCC1  |.  8BEC               mov ebp,esp
0048CCC3  |.  33C9               xor ecx,ecx
0048CCC5  |.  51                 push ecx
0048CCC6  |.  51                 push ecx
0048CCC7  |.  51                 push ecx
0048CCC8  |.  51                 push ecx
0048CCC9  |.  51                 push ecx
0048CCCA  |.  51                 push ecx
0048CCCB  |.  51                 push ecx
0048CCCC  |.  51                 push ecx
0048CCCD  |.  53                 push ebx
0048CCCE  |.  8BD8               mov ebx,eax
0048CCD0  |.  33C0               xor eax,eax
0048CCD2  |.  55                 push ebp
0048CCD3  |.  68 DFCD4800        push ztks30.0048CDDF
0048CCD8  |.  64:FF30            push dword ptr fs:[eax]
0048CCDB  |.  64:8920            mov dword ptr fs:[eax],esp
0048CCDE  |.  8D45 FC            lea eax,[local.1]
0048CCE1  |.  50                 push eax
0048CCE2  |.  8D55 F8            lea edx,[local.2]
0048CCE5  |.  8B83 14030000      mov eax,dword ptr ds:[ebx+314]
0048CCEB  |.  E8 F8B1FBFF        call ztks30.00447EE8                 ;  取第一段注册码
0048CCF0  |.  8B45 F8            mov eax,[local.2]                    ;  第一段注册码放到EAX中
0048CCF3  |.  B9 02000000        mov ecx,2                            ;  ECX置2
0048CCF8  |.  BA 01000000        mov edx,1                            ;  EDX置1
0048CCFD  |.  E8 0A7FF7FF        call ztks30.00404C0C                 ;  判断注册码格式,并截取这段注册码第1-2位
0048CD02  |.  8D45 FC            lea eax,[local.1]
0048CD05  |.  50                 push eax
0048CD06  |.  8D45 F4            lea eax,[local.3]
0048CD09  |.  50                 push eax
0048CD0A  |.  8D55 F0            lea edx,[local.4]
0048CD0D  |.  8B83 18030000      mov eax,dword ptr ds:[ebx+318]
0048CD13  |.  E8 D0B1FBFF        call ztks30.00447EE8                 ;  取第二段注册码
0048CD18  |.  8B45 F0            mov eax,[local.4]                    ;  第二段注册码放到EAX中
0048CD1B  |.  B9 01000000        mov ecx,1                            ;  ECX置1
0048CD20  |.  BA 05000000        mov edx,5                            ;  EDX置5
0048CD25  |.  E8 E27EF7FF        call ztks30.00404C0C                 ;  判断注册码格式,并截取这段注册码最后一位
0048CD2A  |.  8B55 F4            mov edx,[local.3]
0048CD2D  |.  58                 pop eax
0048CD2E  |.  E8 817CF7FF        call ztks30.004049B4                 ;  合并上面截取的注册码,顺序为第一段第1-2位第2段最后一位
0048CD33  |.  8B45 FC            mov eax,[local.1]                    ;  合并后的字符串放到EAX中
0048CD36  |.  50                 push eax
0048CD37  |.  8D45 EC            lea eax,[local.5]
0048CD3A  |.  50                 push eax
0048CD3B  |.  8D55 E8            lea edx,[local.6]
0048CD3E  |.  8B83 20030000      mov eax,dword ptr ds:[ebx+320]
0048CD44  |.  E8 9FB1FBFF        call ztks30.00447EE8                 ;  取第四段注册码
0048CD49  |.  8B45 E8            mov eax,[local.6]                    ;  第四段注册码放到EAX中
0048CD4C  |.  B9 03000000        mov ecx,3                            ;  ECX置3
0048CD51  |.  BA 04000000        mov edx,4                            ;  EDX置4
0048CD56  |.  E8 B17EF7FF        call ztks30.00404C0C                 ;  判断注册码格式,并截取这段注册码最后3位
0048CD5B  |.  8B55 EC            mov edx,[local.5]                    ;  截取后的字符串放到EDX中
0048CD5E  |.  58                 pop eax                              ;  弹出上面第1、2段合并的字符串
0048CD5F  |.  E8 947DF7FF        call ztks30.00404AF8                 ;  最重要的比较CALL,比较的就是上面第1、2段的合并码和第4段的最后3位
0048CD64  |.  75 44              jnz short ztks30.0048CDAA            ;  关键跳
0048CD66  |.  8D55 E4            lea edx,[local.7]
0048CD69  |.  8B83 14030000      mov eax,dword ptr ds:[ebx+314]
0048CD6F  |.  E8 74B1FBFF        call ztks30.00447EE8
0048CD74  |.  837D E4 00         cmp [local.7],0
0048CD78  |.  74 30              je short ztks30.0048CDAA
0048CD7A  |.  8D55 E0            lea edx,[local.8]
0048CD7D  |.  8B83 20030000      mov eax,dword ptr ds:[ebx+320]
0048CD83  |.  E8 60B1FBFF        call ztks30.00447EE8
0048CD88  |.  837D E0 00         cmp [local.8],0
0048CD8C  |.  74 1C              je short ztks30.0048CDAA
0048CD8E  |.  B2 01              mov dl,1
0048CD90  |.  8B83 24030000      mov eax,dword ptr ds:[ebx+324]
0048CD96  |.  E8 6DB0FBFF        call ztks30.00447E08
0048CD9B  |.  B2 01              mov dl,1
0048CD9D  |.  8B83 2C030000      mov eax,dword ptr ds:[ebx+32C]
0048CDA3  |.  8B08               mov ecx,dword ptr ds:[eax]
0048CDA5  |.  FF51 64            call dword ptr ds:[ecx+64]
0048CDA8  |.  EB 1A              jmp short ztks30.0048CDC4
0048CDAA  |>  33D2               xor edx,edx
0048CDAC  |.  8B83 2C030000      mov eax,dword ptr ds:[ebx+32C]
0048CDB2  |.  8B08               mov ecx,dword ptr ds:[eax]
0048CDB4  |.  FF51 64            call dword ptr ds:[ecx+64]
0048CDB7  |.  33D2               xor edx,edx
0048CDB9  |.  8B83 24030000      mov eax,dword ptr ds:[ebx+324]
0048CDBF  |.  E8 44B0FBFF        call ztks30.00447E08
0048CDC4  |>  33C0               xor eax,eax
0048CDC6  |.  5A                 pop edx
0048CDC7  |.  59                 pop ecx
0048CDC8  |.  59                 pop ecx
0048CDC9  |.  64:8910            mov dword ptr fs:[eax],edx
0048CDCC  |.  68 E6CD4800        push ztks30.0048CDE6
0048CDD1  |>  8D45 E0            lea eax,[local.8]
0048CDD4  |.  BA 08000000        mov edx,8
0048CDD9  |.  E8 3279F7FF        call ztks30.00404710
0048CDDE  \.  C3                 retn
稍微说明一下:上面的图1已经显示了这个软件有“4”个注册码输入框,我从左到右把它称为第1-4段。比较的就是第一段前2位合并上第2段最后一位这样组成了一个字符串1,另一个字符串是第4段的最后三位,这两部分要相等。同时对注册码的格式有要求,分别是第一段:4位,第2段:5位,第三段:3位,第四段:6位,反正就是每个框填满就是了。这几个要求符合之后,还会有个小惊喜哦,暂时卖个关子,我们这4个框的问题还没有解决呢。
如果你试着往框里面输东东的话你会发现第3个注册框输完之后第四个框就输不了了,这时Timer1事件登场了,噔噔噔噔。。。。。。。
-------------------------------------------------------------------------------------------------------
Timer1:
0048CC44  /.  55                 push ebp
0048CC45  |.  8BEC               mov ebp,esp
0048CC47  |.  6A 00              push 0
0048CC49  |.  53                 push ebx
0048CC4A  |.  8BD8               mov ebx,eax
0048CC4C  |.  33C0               xor eax,eax
0048CC4E  |.  55                 push ebp
0048CC4F  |.  68 A9CC4800        push ztks30.0048CCA9
0048CC54  |.  64:FF30            push dword ptr fs:[eax]
0048CC57  |.  64:8920            mov dword ptr fs:[eax],esp
0048CC5A  |.  8D55 FC            lea edx,[local.1]
0048CC5D  |.  8B83 1C030000      mov eax,dword ptr ds:[ebx+31C]
0048CC63  |.  E8 80B2FBFF        call ztks30.00447EE8                 ;取第三段注册码
0048CC68  |.  8B45 FC            mov eax,[local.1]                    ;第三段注册码放到EAX
0048CC6B  |.  BA BCCC4800        mov edx,ztks30.0048CCBC              ;  ASCII "6CX"
0048CC70  |.  E8 837EF7FF        call ztks30.00404AF8                 ;比较第三段注册码和6CX是否相等,也就是说第三段注册码就是6CX
0048CC75  |.  75 0F              jnz short ztks30.0048CC86            ;关键跳
0048CC77  |.  33D2               xor edx,edx
0048CC79  |.  8B83 20030000      mov eax,dword ptr ds:[ebx+320]
0048CC7F  |.  E8 E0FAFAFF        call ztks30.0043C764
0048CC84  |.  EB 0D              jmp short ztks30.0048CC93
0048CC86  |>  B2 01              mov dl,1
0048CC88  |.  8B83 20030000      mov eax,dword ptr ds:[ebx+320]
0048CC8E  |.  E8 D1FAFAFF        call ztks30.0043C764
0048CC93  |>  33C0               xor eax,eax
0048CC95  |.  5A                 pop edx
0048CC96  |.  59                 pop ecx
0048CC97  |.  59                 pop ecx
0048CC98  |.  64:8910            mov dword ptr fs:[eax],edx
0048CC9B  |.  68 B0CC4800        push ztks30.0048CCB0
0048CCA0  |>  8D45 FC            lea eax,[local.1]
0048CCA3  |.  E8 447AF7FF        call ztks30.004046EC
0048CCA8  \.  C3                 retn
再稍微说明一下:这段就是说第三段的注册码就是6CX了,为什么是6CX呢?呵呵,拿到软件你就明白了
-------------------------------------------------------------------------------------------------------
我上面说卖个关子,现在我们来开启这个关子吧,如图2

大家看到了吧,注册按钮现在已经激活了,同时冒出了第5个输入框,这也是我为什么上面4个输入框中的4打了个引号的原因了,这个软件其实一共有5个输入框,同时注册按钮可以用了,我还是用DEDE来“定位”注册按钮事件。
注册按钮事件:
0048CDEC  /.  55                 push ebp
0048CDED  |.  8BEC               mov ebp,esp
0048CDEF  |.  B9 05000000        mov ecx,5
0048CDF4  |>  6A 00              /push 0
0048CDF6  |.  6A 00              |push 0
0048CDF8  |.  49                 |dec ecx
0048CDF9  |.^ 75 F9              \jnz short ztks30.0048CDF4
0048CDFB  |.  51                 push ecx
0048CDFC  |.  53                 push ebx
0048CDFD  |.  8BD8               mov ebx,eax
0048CDFF  |.  33C0               xor eax,eax
0048CE01  |.  55                 push ebp
0048CE02  |.  68 C8CF4800        push ztks30.0048CFC8
0048CE07  |.  64:FF30            push dword ptr fs:[eax]
0048CE0A  |.  64:8920            mov dword ptr fs:[eax],esp
0048CE0D  |.  8D45 F8            lea eax,[local.2]
0048CE10  |.  50                 push eax
0048CE11  |.  8D55 F4            lea edx,[local.3]
0048CE14  |.  8B83 14030000      mov eax,dword ptr ds:[ebx+314]
0048CE1A  |.  E8 C9B0FBFF        call ztks30.00447EE8                 ;  取第一段注册码
0048CE1F  |.  8B45 F4            mov eax,[local.3]                    ;  第一段注册码放到EAX中
0048CE22  |.  B9 01000000        mov ecx,1
0048CE27  |.  BA 03000000        mov edx,3
0048CE2C  |.  E8 DB7DF7FF        call ztks30.00404C0C
0048CE31  |.  FF75 F8            push [local.2]
0048CE34  |.  8D45 F0            lea eax,[local.4]
0048CE37  |.  50                 push eax
0048CE38  |.  8D55 EC            lea edx,[local.5]
0048CE3B  |.  8B83 18030000      mov eax,dword ptr ds:[ebx+318]
0048CE41  |.  E8 A2B0FBFF        call ztks30.00447EE8                 ;  取第二段注册码
0048CE46  |.  8B45 EC            mov eax,[local.5]                    ;  第二段注册码放到EAX中
0048CE49  |.  B9 02000000        mov ecx,2
0048CE4E  |.  BA 02000000        mov edx,2
0048CE53  |.  E8 B47DF7FF        call ztks30.00404C0C                 ;  判断注册码格式,并截取这段注册码第2、3位
0048CE58  |.  FF75 F0            push [local.4]
0048CE5B  |.  8D45 E8            lea eax,[local.6]
0048CE5E  |.  50                 push eax
0048CE5F  |.  8D55 E4            lea edx,[local.7]
0048CE62  |.  8B83 20030000      mov eax,dword ptr ds:[ebx+320]
0048CE68  |.  E8 7BB0FBFF        call ztks30.00447EE8                 ;  取第4段注册码
0048CE6D  |.  8B45 E4            mov eax,[local.7]                    ;  第四段注册码放到EAX中
0048CE70  |.  B9 03000000        mov ecx,3
0048CE75  |.  BA 01000000        mov edx,1
0048CE7A  |.  E8 8D7DF7FF        call ztks30.00404C0C                 ;  判断注册码格式,并截取这段注册码前3位
0048CE7F  |.  FF75 E8            push [local.6]
0048CE82  |.  8D45 FC            lea eax,[local.1]
0048CE85  |.  BA 03000000        mov edx,3
0048CE8A  |.  E8 DD7BF7FF        call ztks30.00404A6C                 ;  合并截取的注册码,顺序为第一段注册码的第一位、第二段的第2-3位、第四段的第1-3位
0048CE8F  |.  8B45 FC            mov eax,[local.1]
0048CE92  |.  50                 push eax
0048CE93  |.  8D45 E0            lea eax,[local.8]
0048CE96  |.  50                 push eax
0048CE97  |.  8D55 DC            lea edx,[local.9]
0048CE9A  |.  8B83 24030000      mov eax,dword ptr ds:[ebx+324]
0048CEA0  |.  E8 43B0FBFF        call ztks30.00447EE8                 ;  取第五段注册码
0048CEA5  |.  8B45 DC            mov eax,[local.9]                    ;  第五段注册码放到EAX中
0048CEA8  |.  B9 03000000        mov ecx,3
0048CEAD  |.  BA 01000000        mov edx,1
0048CEB2  |.  E8 557DF7FF        call ztks30.00404C0C
0048CEB7  |.  8D45 E0            lea eax,[local.8]
0048CEBA  |.  50                 push eax
0048CEBB  |.  8D45 D8            lea eax,[local.10]
0048CEBE  |.  50                 push eax
0048CEBF  |.  8D55 D4            lea edx,[local.11]
0048CEC2  |.  8B83 24030000      mov eax,dword ptr ds:[ebx+324]
0048CEC8  |.  E8 1BB0FBFF        call ztks30.00447EE8                 ;  取第五段注册码
0048CECD  |.  8B45 D4            mov eax,[local.11]                   ;  第五段注册码放到EAX中
0048CED0  |.  B9 03000000        mov ecx,3
0048CED5  |.  BA 05000000        mov edx,5
0048CEDA  |.  E8 2D7DF7FF        call ztks30.00404C0C                 ;  判断注册码格式,并截取这段注册码最后3位
0048CEDF  |.  8B55 D8            mov edx,[local.10]
0048CEE2  |.  58                 pop eax
0048CEE3  |.  E8 CC7AF7FF        call ztks30.004049B4                 ;  再截取第五段注册码前3位,并合并第五段注册码最后三位
0048CEE8  |.  8B55 E0            mov edx,[local.8]                    ;  第五段截取合并后放到EDX中
0048CEEB  |.  58                 pop eax                              ;  弹出上面第1、2、4段注册码分割合并后的值放到EAX中
0048CEEC  |.  E8 077CF7FF        call ztks30.00404AF8                 ;  上面的那2个比较,又是那个比较CALL
0048CEF1  |.  75 0C              jnz short ztks30.0048CEFF            ;  关键跳
0048CEF3  |.  8B83 30030000      mov eax,dword ptr ds:[ebx+330]
0048CEF9  |.  8078 40 00         cmp byte ptr ds:[eax+40],0
0048CEFD  |.  75 04              jnz short ztks30.0048CF03
0048CEFF  |>  33C0               xor eax,eax
0048CF01  |.  EB 02              jmp short ztks30.0048CF05
0048CF03  |>  B0 01              mov al,1
0048CF05  |>  3C 01              cmp al,1
0048CF07  |.  0F85 91000000      jnz ztks30.0048CF9E
0048CF0D  |.  33D2               xor edx,edx
0048CF0F  |.  8B83 14030000      mov eax,dword ptr ds:[ebx+314]
0048CF15  |.  E8 EEAEFBFF        call ztks30.00447E08
0048CF1A  |.  33D2               xor edx,edx
0048CF1C  |.  8B83 18030000      mov eax,dword ptr ds:[ebx+318]
0048CF22  |.  E8 E1AEFBFF        call ztks30.00447E08
0048CF27  |.  33D2               xor edx,edx
0048CF29  |.  8B83 1C030000      mov eax,dword ptr ds:[ebx+31C]
0048CF2F  |.  E8 D4AEFBFF        call ztks30.00447E08
0048CF34  |.  33D2               xor edx,edx
0048CF36  |.  8B83 20030000      mov eax,dword ptr ds:[ebx+320]
0048CF3C  |.  E8 C7AEFBFF        call ztks30.00447E08
0048CF41  |.  33D2               xor edx,edx
0048CF43  |.  8B83 24030000      mov eax,dword ptr ds:[ebx+324]
0048CF49  |.  E8 BAAEFBFF        call ztks30.00447E08
0048CF4E  |.  33D2               xor edx,edx
0048CF50  |.  8B83 30030000      mov eax,dword ptr ds:[ebx+330]
0048CF56  |.  E8 352DFAFF        call ztks30.0042FC90
0048CF5B  |.  33D2               xor edx,edx
0048CF5D  |.  8B83 34030000      mov eax,dword ptr ds:[ebx+334]
0048CF63  |.  E8 282DFAFF        call ztks30.0042FC90
0048CF68  |.  B2 01              mov dl,1
0048CF6A  |.  8B83 54030000      mov eax,dword ptr ds:[ebx+354]
0048CF70  |.  E8 93AEFBFF        call ztks30.00447E08
0048CF75  |.  B2 01              mov dl,1
0048CF77  |.  8B83 28030000      mov eax,dword ptr ds:[ebx+328]
0048CF7D  |.  E8 86AEFBFF        call ztks30.00447E08
0048CF82  |.  33D2               xor edx,edx
0048CF84  |.  8B83 2C030000      mov eax,dword ptr ds:[ebx+32C]
0048CF8A  |.  E8 79AEFBFF        call ztks30.00447E08
0048CF8F  |.  B2 01              mov dl,1
0048CF91  |.  8B83 60030000      mov eax,dword ptr ds:[ebx+360]
0048CF97  |.  E8 6CAEFBFF        call ztks30.00447E08
0048CF9C  |.  EB 0F              jmp short ztks30.0048CFAD
0048CF9E  |>  B8 DCCF4800        mov eax,ztks30.0048CFDC
0048CFA3  |.  E8 300AFAFF        call ztks30.0042D9D8
0048CFA8  |.  E8 CB75F7FF        call ztks30.00404578
0048CFAD  |>  33C0               xor eax,eax
0048CFAF  |.  5A                 pop edx
0048CFB0  |.  59                 pop ecx
0048CFB1  |.  59                 pop ecx
0048CFB2  |.  64:8910            mov dword ptr fs:[eax],edx
0048CFB5  |.  68 CFCF4800        push ztks30.0048CFCF
0048CFBA  |>  8D45 D4            lea eax,[local.11]
0048CFBD  |.  BA 0B000000        mov edx,0B
0048CFC2  |.  E8 4977F7FF        call ztks30.00404710
0048CFC7  \.  C3                 retn
我还是再啰嗦一下:这段代码和Timer2事件挺相似的,主要不同的地方在于取某段注册码的位置,怎么取的我上面已经说明了。我想有些朋友可能会问,你怎么知道在某一段注册码中是取哪些位置的注册码呢?我稍微说下:
call ztks30.00404C0C  这个CALL我在上面的解释是:判断注册码格式,并截取这段注册码的xxx位,我这么说可能不太准确,如果有错误的地方还请大侠多多指点一下。我们注意看下,这个CALL上面基本都有这样2行代码:
mov ecx,x
mov edx,x ;x代表某个数值。为什么在CALL之前要做这么一件事呢?应该是为CALL传递参数吧,那么传递什么参数呢?如果我们进CALL里面稍微看下,再返回来整体的看一下就会想到,ECX传递的是取“几”位注册码,EDX传递的是从“哪”一位开始截取注册码(我的理解是这样的,如果有误的话还请大侠多指点一下)。
-------------------------------------------------------------------------------------------------------
经过了上面的分析,看来大功应该要告成了,可是作者又和我们开了一个玩笑,如图3:

还要验证用户名啊,不过成功就在眼前,绝不能放弃,何况最困难的时期已经度过了,千万不能在这里退却!
还是继续祭出法宝DEDE 找一下验证用户名的注册按钮事件:
0048D6AC  /.  55                 push ebp
0048D6AD  |.  8BEC               mov ebp,esp
0048D6AF  |.  6A 00              push 0
0048D6B1  |.  6A 00              push 0
0048D6B3  |.  6A 00              push 0
0048D6B5  |.  53                 push ebx
0048D6B6  |.  8BD8               mov ebx,eax
0048D6B8  |.  33C0               xor eax,eax
0048D6BA  |.  55                 push ebp
0048D6BB  |.  68 95D74800        push ztks30.0048D795
0048D6C0  |.  64:FF30            push dword ptr fs:[eax]
0048D6C3  |.  64:8920            mov dword ptr fs:[eax],esp
0048D6C6  |.  8B83 30030000      mov eax,dword ptr ds:[ebx+330]
0048D6CC  |.  8078 40 00         cmp byte ptr ds:[eax+40],0
0048D6D0  |.  0F85 95000000      jnz ztks30.0048D76B
0048D6D6  |.  8D45 FC            lea eax,[local.1]
0048D6D9  |.  50                 push eax
0048D6DA  |.  8D55 F8            lea edx,[local.2]
0048D6DD  |.  8B83 28030000      mov eax,dword ptr ds:[ebx+328]
0048D6E3  |.  E8 00A8FBFF        call ztks30.00447EE8                 ;  取用户名
0048D6E8  |.  8B45 F8            mov eax,[local.2]                    ;  用户名放到EAX中
0048D6EB  |.  E8 BC72F7FF        call ztks30.004049AC
0048D6F0  |.  48                 dec eax
0048D6F1  |.  50                 push eax
0048D6F2  |.  8D55 F4            lea edx,[local.3]
0048D6F5  |.  8B83 28030000      mov eax,dword ptr ds:[ebx+328]
0048D6FB  |.  E8 E8A7FBFF        call ztks30.00447EE8                 ;  取用户名
0048D700  |.  8B45 F4            mov eax,[local.3]                    ;  用户名放到EAX中
0048D703  |.  B9 02000000        mov ecx,2
0048D708  |.  5A                 pop edx
0048D709  |.  E8 FE74F7FF        call ztks30.00404C0C                 ;  判断用户名格式,并截取这用户名最后2位
0048D70E  |.  8B45 FC            mov eax,[local.1]                    ;  最后2位用户名放到EAX中
0048D711  |.  BA ACD74800        mov edx,ztks30.0048D7AC              ;  ASCII "70"
0048D716  |.  E8 DD73F7FF        call ztks30.00404AF8                 ;  还是那个比较CALL,比较用户名最后两位是否和70相等
0048D71B  |.  75 4E              jnz short ztks30.0048D76B            ;  关键跳
0048D71D  |.  E8 46CFF7FF        call ztks30.0040A668
0048D722  |.  83C4 F8            add esp,-8
0048D725  |.  DD1C24             fstp qword ptr ss:[esp]
0048D728  |.  9B                 wait
0048D729  |.  8B83 58030000      mov eax,dword ptr ds:[ebx+358]
0048D72F  |.  E8 3072FAFF        call ztks30.00434964
0048D734  |.  B8 B8D74800        mov eax,ztks30.0048D7B8              ;  ASCII "08:20:02"
0048D739  |.  E8 56E4F7FF        call ztks30.0040BB94
0048D73E  |.  83C4 F8            add esp,-8                           ; /
0048D741  |.  DD1C24             fstp qword ptr ss:[esp]              ; |Arg1 (8-byte)
0048D744  |.  9B                 wait                                 ; |
0048D745  |.  8B83 5C030000      mov eax,dword ptr ds:[ebx+35C]       ; |
0048D74B  |.  E8 F07FFAFF        call ztks30.00435740                 ; \ztks30.00435740
0048D750  |.  B8 CCD74800        mov eax,ztks30.0048D7CC              ;  ASCII "c:\windows\winksre"
0048D755  |.  E8 EAF1FFFF        call ztks30.0048C944
0048D75A  |.  B8 E8D74800        mov eax,ztks30.0048D7E8
0048D75F  |.  E8 7402FAFF        call ztks30.0042D9D8
0048D764  |.  E8 0F6EF7FF        call ztks30.00404578
0048D769  |.  EB 0F              jmp short ztks30.0048D77A
0048D76B  |>  B8 30D84800        mov eax,ztks30.0048D830
0048D770  |.  E8 6302FAFF        call ztks30.0042D9D8
0048D775  |.  E8 FE6DF7FF        call ztks30.00404578
0048D77A  |>  33C0               xor eax,eax
0048D77C  |.  5A                 pop edx
0048D77D  |.  59                 pop ecx
0048D77E  |.  59                 pop ecx
0048D77F  |.  64:8910            mov dword ptr fs:[eax],edx
0048D782  |.  68 9CD74800        push ztks30.0048D79C
0048D787  |>  8D45 F4            lea eax,[local.3]
0048D78A  |.  BA 03000000        mov edx,3
0048D78F  |.  E8 7C6FF7FF        call ztks30.00404710
0048D794  \.  C3                 retn
其实就是验证用户名最后两位和字符70是否一样,一样就注册成功了。
------------------------------------------------------------------------
【破解总结】今天这个软件也是一个比较有代表型的软件,“不输入正确注册码,注册按钮就是灰色”,我的破解思路就是通过对Timer事件的分析来达到关键部分,这是我破解这个软件所总结的一点心得,不敢私藏,愿与像我这样的菜鸟分享。
同时我要向大侠再请教一下,这个软件刚好是DELPHI的,刚好用DEDE看到一些事件,哪天要是碰上个不是DELPHI的,或者是反DEDE的类似的程序,那应该如何下手解决呢?这个希望大侠能稍微指点一下,不胜感激!
                                            感谢PYG的无私培养
------------------------------------------------------------------------
【版权声明】破文版权归我,转载版权归你。欢迎转载,盗版不究。如果能帮我改正和补充一下的话我
会更高兴的*^_^*

[ 本帖最后由 傻人有傻福 于 2008-3-28 22:44 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2008-3-28 23:03:42 | 显示全部楼层
/:001 再次顶楼主...

支持把原程序发出来 /:018   /:018
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2008-3-28 23:32:37 | 显示全部楼层
原帖由 magic659117852 于 2008-3-28 23:03 发表
/:001 再次顶楼主...

支持把原程序发出来 /:018   /:018

想调试的话 PM我  为什么不发软件地址的原因我也已经说明了
PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2024-12-18 14:23
  • 签到天数: 124 天

    [LV.7]常住居民III

    发表于 2008-3-28 23:42:22 | 显示全部楼层
    我要啊发给我啊
    谢谢啊
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-7-15 02:13
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2008-3-28 23:57:13 | 显示全部楼层
    谢谢楼主分享,内容已经收藏!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-29 00:21:03 | 显示全部楼层
    不错啊 很经典哦 好喜欢 收藏了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-29 00:34:44 | 显示全部楼层
    非常好的破文!  支持!!  可以发我一份源程序么?
    [email protected]  谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-29 01:14:57 | 显示全部楼层
    DEDE?没用过。/:L
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-29 07:05:52 | 显示全部楼层
    分析的很详细,学习了,谢谢楼主!发一份来练习一下!
    [email protected]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2008-3-31 16:56:08 | 显示全部楼层
    谢谢楼主分享,对我等菜鸟很有帮助的!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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