一个不输入正确注册码,注册按钮就是灰色的软件的简单分析
一个不输入正确注册码,注册按钮就是灰色的软件的简单分析【破文标题】一个不输入正确注册码,注册按钮就是灰色的软件的简单分析
【破文作者】水平太菜,就不写了名字了*^_^*
【作者邮箱】
【作者主页】
【破解工具】PEID+DEDE+OD
【破解平台】Windows XP
【软件名称】
【软件大小】
【原版下载】
【保护方式】注册码
【软件简介】
【破解声明】只为讨论、学习与分享破解技术,勿用于非法用途,请多多支持软件开发者!
------------------------------------------------------------------------
【破解过程】首先先说明一下,上面的软件名称和原版下载我没有写,原因是我们学破解的目的是研究和学习,并不是为了破解而破解,我发破文的目的是把我的一些思路心得和大家分享一下,共同学习、共同进步。如果想要这个软件调试的话请PM我,我会把软件下载地址告诉你,请不要看了我的破文之后没有任何收获就只会发布一个破解成果(破解成果留着自己用,请不要发布,作者写个软件也不容易)
我的破解总结中还附带了几个问题,希望大侠能指点一下。
好了,开始我们的破解之旅了,就像我标题说的“一个不输入正确注册码,注册按钮就是灰色的软件”,给大家一个直观的感受什么是灰色按钮吧,如图1
http://i.namipan.com/files/f465ee3a7bb95fdb71d8f877e144153354d85186b81300002a10/0/1.jpg
这个软件有“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:
0048CCDB |. 64:8920 mov dword ptr fs:,esp
0048CCDE |. 8D45 FC lea eax,
0048CCE1 |. 50 push eax
0048CCE2 |. 8D55 F8 lea edx,
0048CCE5 |. 8B83 14030000 mov eax,dword ptr ds:
0048CCEB |. E8 F8B1FBFF call ztks30.00447EE8 ; 取第一段注册码
0048CCF0 |. 8B45 F8 mov eax, ; 第一段注册码放到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,
0048CD05 |. 50 push eax
0048CD06 |. 8D45 F4 lea eax,
0048CD09 |. 50 push eax
0048CD0A |. 8D55 F0 lea edx,
0048CD0D |. 8B83 18030000 mov eax,dword ptr ds:
0048CD13 |. E8 D0B1FBFF call ztks30.00447EE8 ; 取第二段注册码
0048CD18 |. 8B45 F0 mov eax, ; 第二段注册码放到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,
0048CD2D |. 58 pop eax
0048CD2E |. E8 817CF7FF call ztks30.004049B4 ; 合并上面截取的注册码,顺序为第一段第1-2位第2段最后一位
0048CD33 |. 8B45 FC mov eax, ; 合并后的字符串放到EAX中
0048CD36 |. 50 push eax
0048CD37 |. 8D45 EC lea eax,
0048CD3A |. 50 push eax
0048CD3B |. 8D55 E8 lea edx,
0048CD3E |. 8B83 20030000 mov eax,dword ptr ds:
0048CD44 |. E8 9FB1FBFF call ztks30.00447EE8 ; 取第四段注册码
0048CD49 |. 8B45 E8 mov eax, ; 第四段注册码放到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, ; 截取后的字符串放到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,
0048CD69 |. 8B83 14030000 mov eax,dword ptr ds:
0048CD6F |. E8 74B1FBFF call ztks30.00447EE8
0048CD74 |. 837D E4 00 cmp ,0
0048CD78 |. 74 30 je short ztks30.0048CDAA
0048CD7A |. 8D55 E0 lea edx,
0048CD7D |. 8B83 20030000 mov eax,dword ptr ds:
0048CD83 |. E8 60B1FBFF call ztks30.00447EE8
0048CD88 |. 837D E0 00 cmp ,0
0048CD8C |. 74 1C je short ztks30.0048CDAA
0048CD8E |. B2 01 mov dl,1
0048CD90 |. 8B83 24030000 mov eax,dword ptr ds:
0048CD96 |. E8 6DB0FBFF call ztks30.00447E08
0048CD9B |. B2 01 mov dl,1
0048CD9D |. 8B83 2C030000 mov eax,dword ptr ds:
0048CDA3 |. 8B08 mov ecx,dword ptr ds:
0048CDA5 |. FF51 64 call dword ptr ds:
0048CDA8 |. EB 1A jmp short ztks30.0048CDC4
0048CDAA |> 33D2 xor edx,edx
0048CDAC |. 8B83 2C030000 mov eax,dword ptr ds:
0048CDB2 |. 8B08 mov ecx,dword ptr ds:
0048CDB4 |. FF51 64 call dword ptr ds:
0048CDB7 |. 33D2 xor edx,edx
0048CDB9 |. 8B83 24030000 mov eax,dword ptr ds:
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:,edx
0048CDCC |. 68 E6CD4800 push ztks30.0048CDE6
0048CDD1 |> 8D45 E0 lea eax,
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:
0048CC57 |. 64:8920 mov dword ptr fs:,esp
0048CC5A |. 8D55 FC lea edx,
0048CC5D |. 8B83 1C030000 mov eax,dword ptr ds:
0048CC63 |. E8 80B2FBFF call ztks30.00447EE8 ;取第三段注册码
0048CC68 |. 8B45 FC mov eax, ;第三段注册码放到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:
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:
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:,edx
0048CC9B |. 68 B0CC4800 push ztks30.0048CCB0
0048CCA0 |> 8D45 FC lea eax,
0048CCA3 |. E8 447AF7FF call ztks30.004046EC
0048CCA8 \. C3 retn
再稍微说明一下:这段就是说第三段的注册码就是6CX了,为什么是6CX呢?呵呵,拿到软件你就明白了
-------------------------------------------------------------------------------------------------------
我上面说卖个关子,现在我们来开启这个关子吧,如图2
http://i.namipan.com/files/ec1842eddd68d2e2739e25a9c07fa51f4eb86b81e71a00000912/0/1.jpg
大家看到了吧,注册按钮现在已经激活了,同时冒出了第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:
0048CE0A |. 64:8920 mov dword ptr fs:,esp
0048CE0D |. 8D45 F8 lea eax,
0048CE10 |. 50 push eax
0048CE11 |. 8D55 F4 lea edx,
0048CE14 |. 8B83 14030000 mov eax,dword ptr ds:
0048CE1A |. E8 C9B0FBFF call ztks30.00447EE8 ; 取第一段注册码
0048CE1F |. 8B45 F4 mov eax, ; 第一段注册码放到EAX中
0048CE22 |. B9 01000000 mov ecx,1
0048CE27 |. BA 03000000 mov edx,3
0048CE2C |. E8 DB7DF7FF call ztks30.00404C0C
0048CE31 |. FF75 F8 push
0048CE34 |. 8D45 F0 lea eax,
0048CE37 |. 50 push eax
0048CE38 |. 8D55 EC lea edx,
0048CE3B |. 8B83 18030000 mov eax,dword ptr ds:
0048CE41 |. E8 A2B0FBFF call ztks30.00447EE8 ; 取第二段注册码
0048CE46 |. 8B45 EC mov eax, ; 第二段注册码放到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
0048CE5B |. 8D45 E8 lea eax,
0048CE5E |. 50 push eax
0048CE5F |. 8D55 E4 lea edx,
0048CE62 |. 8B83 20030000 mov eax,dword ptr ds:
0048CE68 |. E8 7BB0FBFF call ztks30.00447EE8 ; 取第4段注册码
0048CE6D |. 8B45 E4 mov eax, ; 第四段注册码放到EAX中
0048CE70 |. B9 03000000 mov ecx,3
0048CE75 |. BA 01000000 mov edx,1
0048CE7A |. E8 8D7DF7FF call ztks30.00404C0C ; 判断注册码格式,并截取这段注册码前3位
0048CE7F |. FF75 E8 push
0048CE82 |. 8D45 FC lea eax,
0048CE85 |. BA 03000000 mov edx,3
0048CE8A |. E8 DD7BF7FF call ztks30.00404A6C ; 合并截取的注册码,顺序为第一段注册码的第一位、第二段的第2-3位、第四段的第1-3位
0048CE8F |. 8B45 FC mov eax,
0048CE92 |. 50 push eax
0048CE93 |. 8D45 E0 lea eax,
0048CE96 |. 50 push eax
0048CE97 |. 8D55 DC lea edx,
0048CE9A |. 8B83 24030000 mov eax,dword ptr ds:
0048CEA0 |. E8 43B0FBFF call ztks30.00447EE8 ; 取第五段注册码
0048CEA5 |. 8B45 DC mov eax, ; 第五段注册码放到EAX中
0048CEA8 |. B9 03000000 mov ecx,3
0048CEAD |. BA 01000000 mov edx,1
0048CEB2 |. E8 557DF7FF call ztks30.00404C0C
0048CEB7 |. 8D45 E0 lea eax,
0048CEBA |. 50 push eax
0048CEBB |. 8D45 D8 lea eax,
0048CEBE |. 50 push eax
0048CEBF |. 8D55 D4 lea edx,
0048CEC2 |. 8B83 24030000 mov eax,dword ptr ds:
0048CEC8 |. E8 1BB0FBFF call ztks30.00447EE8 ; 取第五段注册码
0048CECD |. 8B45 D4 mov eax, ; 第五段注册码放到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,
0048CEE2 |. 58 pop eax
0048CEE3 |. E8 CC7AF7FF call ztks30.004049B4 ; 再截取第五段注册码前3位,并合并第五段注册码最后三位
0048CEE8 |. 8B55 E0 mov edx, ; 第五段截取合并后放到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:
0048CEF9 |. 8078 40 00 cmp byte ptr ds:,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:
0048CF15 |. E8 EEAEFBFF call ztks30.00447E08
0048CF1A |. 33D2 xor edx,edx
0048CF1C |. 8B83 18030000 mov eax,dword ptr ds:
0048CF22 |. E8 E1AEFBFF call ztks30.00447E08
0048CF27 |. 33D2 xor edx,edx
0048CF29 |. 8B83 1C030000 mov eax,dword ptr ds:
0048CF2F |. E8 D4AEFBFF call ztks30.00447E08
0048CF34 |. 33D2 xor edx,edx
0048CF36 |. 8B83 20030000 mov eax,dword ptr ds:
0048CF3C |. E8 C7AEFBFF call ztks30.00447E08
0048CF41 |. 33D2 xor edx,edx
0048CF43 |. 8B83 24030000 mov eax,dword ptr ds:
0048CF49 |. E8 BAAEFBFF call ztks30.00447E08
0048CF4E |. 33D2 xor edx,edx
0048CF50 |. 8B83 30030000 mov eax,dword ptr ds:
0048CF56 |. E8 352DFAFF call ztks30.0042FC90
0048CF5B |. 33D2 xor edx,edx
0048CF5D |. 8B83 34030000 mov eax,dword ptr ds:
0048CF63 |. E8 282DFAFF call ztks30.0042FC90
0048CF68 |. B2 01 mov dl,1
0048CF6A |. 8B83 54030000 mov eax,dword ptr ds:
0048CF70 |. E8 93AEFBFF call ztks30.00447E08
0048CF75 |. B2 01 mov dl,1
0048CF77 |. 8B83 28030000 mov eax,dword ptr ds:
0048CF7D |. E8 86AEFBFF call ztks30.00447E08
0048CF82 |. 33D2 xor edx,edx
0048CF84 |. 8B83 2C030000 mov eax,dword ptr ds:
0048CF8A |. E8 79AEFBFF call ztks30.00447E08
0048CF8F |. B2 01 mov dl,1
0048CF91 |. 8B83 60030000 mov eax,dword ptr ds:
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:,edx
0048CFB5 |. 68 CFCF4800 push ztks30.0048CFCF
0048CFBA |> 8D45 D4 lea eax,
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:
http://i.namipan.com/files/eb9036ce197174ce84e310e3671069bad52f3626d8210000953d/0/1.jpg
还要验证用户名啊,不过成功就在眼前,绝不能放弃,何况最困难的时期已经度过了,千万不能在这里退却!
还是继续祭出法宝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:
0048D6C3 |. 64:8920 mov dword ptr fs:,esp
0048D6C6 |. 8B83 30030000 mov eax,dword ptr ds:
0048D6CC |. 8078 40 00 cmp byte ptr ds:,0
0048D6D0 |. 0F85 95000000 jnz ztks30.0048D76B
0048D6D6 |. 8D45 FC lea eax,
0048D6D9 |. 50 push eax
0048D6DA |. 8D55 F8 lea edx,
0048D6DD |. 8B83 28030000 mov eax,dword ptr ds:
0048D6E3 |. E8 00A8FBFF call ztks30.00447EE8 ; 取用户名
0048D6E8 |. 8B45 F8 mov eax, ; 用户名放到EAX中
0048D6EB |. E8 BC72F7FF call ztks30.004049AC
0048D6F0 |. 48 dec eax
0048D6F1 |. 50 push eax
0048D6F2 |. 8D55 F4 lea edx,
0048D6F5 |. 8B83 28030000 mov eax,dword ptr ds:
0048D6FB |. E8 E8A7FBFF call ztks30.00447EE8 ; 取用户名
0048D700 |. 8B45 F4 mov eax, ; 用户名放到EAX中
0048D703 |. B9 02000000 mov ecx,2
0048D708 |. 5A pop edx
0048D709 |. E8 FE74F7FF call ztks30.00404C0C ; 判断用户名格式,并截取这用户名最后2位
0048D70E |. 8B45 FC mov eax, ; 最后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:
0048D728 |. 9B wait
0048D729 |. 8B83 58030000 mov eax,dword ptr ds:
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: ; |Arg1 (8-byte)
0048D744 |. 9B wait ; |
0048D745 |. 8B83 5C030000 mov eax,dword ptr ds: ; |
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:,edx
0048D782 |. 68 9CD74800 push ztks30.0048D79C
0048D787 |> 8D45 F4 lea eax,
0048D78A |. BA 03000000 mov edx,3
0048D78F |. E8 7C6FF7FF call ztks30.00404710
0048D794 \. C3 retn
其实就是验证用户名最后两位和字符70是否一样,一样就注册成功了。
------------------------------------------------------------------------
【破解总结】今天这个软件也是一个比较有代表型的软件,“不输入正确注册码,注册按钮就是灰色”,我的破解思路就是通过对Timer事件的分析来达到关键部分,这是我破解这个软件所总结的一点心得,不敢私藏,愿与像我这样的菜鸟分享。
同时我要向大侠再请教一下,这个软件刚好是DELPHI的,刚好用DEDE看到一些事件,哪天要是碰上个不是DELPHI的,或者是反DEDE的类似的程序,那应该如何下手解决呢?这个希望大侠能稍微指点一下,不胜感激!
感谢PYG的无私培养
------------------------------------------------------------------------
【版权声明】破文版权归我,转载版权归你。欢迎转载,盗版不究。如果能帮我改正和补充一下的话我
会更高兴的*^_^* 看起来是个很不错的东西哦``` 牛人,支持一下,以后多向你学学,哈哈
牛人,支持一下,以后多向你学学,哈哈 什么是脱壳?我不懂~~~ 这个好像是个以前的CrackMe啊~~~~~~~~不知道是转载还是楼主自己完全破解的~~~~~~~~~~~~~
不管怎样还是顶你一下~~~~~~~~~~~~~~~~~ 看不明白啊
哎 太菜了 这个软件好久没更新了,公布一下也没关系。需要的朋友直接到云枫工作室下载就可以了 很不错~~~~~~~~~~~~~~