吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19277|回复: 37
收起左侧

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

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

这个软件有“4”个序列号输入框,注册按钮是灰色的,如果你输入的序列号是错误的话,这个灰色按钮是不被激活的,那我们如何下手呢?其实一开始我也是不知道的,直到我看到疑难交流区有一篇关于按钮激活的求助,链接地址:http://bbs.chinapyg.com/viewthre ... &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的无私培养
------------------------------------------------------------------------
【版权声明】破文版权归我,转载版权归你。欢迎转载,盗版不究。如果能帮我改正和补充一下的话我
会更高兴的*^_^*

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

头像被屏蔽
xxdxxc 发表于 2008-4-3 20:26
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
xxdxxc 发表于 2008-4-3 20:27
xcxcxcxc 发表于 2008-4-3 21:01
lv122 发表于 2008-4-7 11:43
牛人,支持一下,以后多向你学学,哈哈
牛人,支持一下,以后多向你学学,哈哈
liu306 发表于 2008-5-9 15:26
什么是脱壳?我不懂~~~
heihu 发表于 2008-5-9 16:43
这个好像是个以前的CrackMe啊~~~~~~~~不知道是转载还是楼主自己完全破解的~~~~~~~~~~~~~
不管怎样还是顶你一下~~~~~~~~~~~~~~~~~ [s:40] [s:40] [s:40] [s:40]
345770 发表于 2008-5-16 13:04
看不明白啊
哎 太菜了
yunfeng 发表于 2008-5-18 10:05
这个软件好久没更新了,公布一下也没关系。需要的朋友直接到云枫工作室下载就可以了
dongqianox 发表于 2008-6-22 00:44
很不错~~~~~~~~~~~~~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 07:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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