一个不输入正确注册码,注册按钮就是灰色的软件的简单分析
【破文标题】一个不输入正确注册码,注册按钮就是灰色的软件的简单分析【破文作者】水平太菜,就不写了名字了*^_^*
【作者邮箱】
【作者主页】
【破解工具】PEID+DEDE+OD
【破解平台】Windows XP
【软件名称】
【软件大小】
【原版下载】
【保护方式】注册码
【软件简介】
【破解声明】只为讨论、学习与分享破解技术,勿用于非法用途,请多多支持软件开发者!
------------------------------------------------------------------------
【破解过程】 首先先说明一下,上面的软件名称和原版下载我没有写,原因是我们学破解的目的是研究和学习,并不是为了破解而破解,我发破文的目的是把我的一些思路心得和大家分享一下,共同学习、共同进步。如果想要这个软件调试的话请PM我,我会把软件下载地址告诉你,请不要看了我的破文之后没有任何收获就只会发布一个破解成果(破解成果留着自己用,请不要发布,作者写个软件也不容易)
我的破解总结中还附带了几个问题,希望大侠能指点一下。
好了,开始我们的破解之旅了,就像我标题说的“一个不输入正确注册码,注册按钮就是灰色的软件”,给大家一个直观的感受什么是灰色按钮吧,如图1
http://i.namipan.com/files/f465ee3a7bb95fdb71d8f877e144153354d85186b81300002a10/0/1.jpg
这个软件有“4”个序列号输入框,注册按钮是灰色的,如果你输入的序列号是错误的话,这个灰色按钮是不被激活的,那我们如何下手呢?其实一开始我也是不知道的,直到我看到疑难交流区有一篇关于按钮激活的求助,链接地址:https://www.chinapyg.com/viewthread.php?tid=26173&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的无私培养
------------------------------------------------------------------------
【版权声明】破文版权归我,转载版权归你。欢迎转载,盗版不究。如果能帮我改正和补充一下的话我
会更高兴的*^_^*
[ 本帖最后由 傻人有傻福 于 2008-3-28 22:44 编辑 ] /:001 再次顶楼主...
支持把原程序发出来 /:018 /:018 原帖由 magic659117852 于 2008-3-28 23:03 发表 https://www.chinapyg.com/images/common/back.gif
/:001 再次顶楼主...
支持把原程序发出来 /:018 /:018
想调试的话 PM我为什么不发软件地址的原因我也已经说明了 我要啊发给我啊
谢谢啊 谢谢楼主分享,内容已经收藏! 不错啊 很经典哦 好喜欢 收藏了 非常好的破文!支持!!可以发我一份源程序么?
[email protected]谢谢! DEDE?没用过。/:L 分析的很详细,学习了,谢谢楼主!发一份来练习一下!
[email protected] 谢谢楼主分享,对我等菜鸟很有帮助的!
页:
[1]
2