中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 看雪学院专区 > CrackMe
CrackMe.happytown.VC.0018 简单算法分析
作者:佚名 时间:2006-12-15 11:06 出处:pediy.com 责编:月夜寒箫
              摘要:CrackMe.happytown.VC.0018 简单算法分析
【破解日期】 2006年11月19日
【破解作者】 冷血书生
【作者邮箱】 meiyou
【作者主页】 hxxp://www.126sohu.com/
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 CrackMe.happytown.VC.0018 
【下载地址】 http://bbs.pediy.com/showthread.php?s=&threadid=35157
【软件大小】 56k
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
------------------------------------------------------------------------

--------
【破解内容】

 
代码:
00401073   call dword ptr ds:[<&USER32.GetDlgIte>; USER32.GetDlgItem 00401079   push eax 0040107A   call dword ptr ds:[<&USER32.SetFocus>>; USER32.SetFocus 00401080   push esi 00401081   call CrackMe_.00401130                ; 算法Call 00401086   add esp,4 00401089   test eax,eax 0040108B   pop esi 0040108C   je CrackMe_.0040111F                  ; 爆破点 00401092   push 40 00401094   push CrackMe_.004060C4                ; Congratulations 00401099   push CrackMe_.004060B4                ; Good job, man! 0040109E   push 0 004010A0   call dword ptr ds:[<&USER32.MessageBo>; USER32.MessageBoxA 004010A6   xor eax,eax 004010A8   retn 10 ///////////////////////////////////////////////////////////////////////// 跟进算法Call ///////////////////////////////////////////////////////////////////////// 0040118C   mov esi,eax 0040118E   cmp esi,4                             ; 与4比较 00401191   jl CrackMe_.00401261                  ; 小于就跳 00401197   mov ecx,esi 00401199   and ecx,80000001 0040119F   jns short CrackMe_.004011A6 004011A1   dec ecx 004011A2   or ecx,FFFFFFFE 004011A5   inc ecx 004011A6   jnz CrackMe_.00401261                 ; 不相等就跳 004011AC   lea edx,dword ptr ss:[esp+D8] 004011B3   push esi 004011B4   push edx 004011B5   call CrackMe_.00401270                ; 将用户名和注册码小写转大写 004011BA   add esp,8 004011BD   test eax,eax 004011BF   je CrackMe_.00401261 004011C5   lea eax,dword ptr ss:[esp+10] 004011C9   push 0C9 004011CE   push eax 004011CF   push 3E9 004011D4   push edi 004011D5   call ebp 004011D7   cmp eax,esi                           ; 用户名长度要与注册码长度相等 004011D9   jnz CrackMe_.00401261                 ; 否则OVER 004011DF   lea ecx,dword ptr ss:[esp+10] 004011E3   push eax 004011E4   push ecx 004011E5   call CrackMe_.00401270 004011EA   add esp,8 004011ED   test eax,eax 004011EF   je short CrackMe_.00401261 004011F1   mov eax,esi 004011F3   xor edi,edi 004011F5   cdq 004011F6   sub eax,edx 004011F8   mov ebp,eax 004011FA   sar ebp,1 004011FC   cmp ebp,ebx 004011FE   jle short CrackMe_.00401251 00401200   mov cl,byte ptr ss:[esp+edi*2+11]     ;  取注册码第二位,取注册码第四位 00401204   mov al,byte ptr ss:[esp+edi*2+10]     ; 取注册码第一位,取注册码第三位 00401208   sub cl,41                             ; 注册码第二位 - 41 0040120B   sub al,41                             ; 注册码第一位 - 41 0040120D   movsx esi,cl                          ; 保存结果 00401210   movsx ecx,al                          ; 保存结果 00401213   mov ebx,1A                            ; EBX=1A 00401218   lea edx,dword ptr ds:[ecx+ecx*8]      ; ecx+ecx*8 0040121B   lea eax,dword ptr ds:[edx+esi*2]      ; edx+esi*2 0040121E   cdq 0040121F   idiv ebx                              ; /1A 00401221   movsx eax,byte ptr ss:[esp+edi*2+D8]  ; 取用户名第一位 ,取用户名第三位 00401229   sub eax,41                            ; eax - 41 0040122C   cmp edx,eax                           ; 比较 0040122E   jnz short CrackMe_.00401261           ; 不相等就OVER 00401230   lea eax,dword ptr ds:[esi+esi*2]      ; esi+esi*2 00401233   lea ecx,dword ptr ds:[ecx+eax*4]      ; ecx+eax*4 00401236   add eax,ecx                           ; eax+ecx 00401238   mov ecx,ebx 0040123A   cdq 0040123B   idiv ecx                              ; /1A 0040123D   movsx eax,byte ptr ss:[esp+edi*2+D9]  ; 取用户名第二位,取用户名第四位 00401245   sub eax,41                            ; eax-41 00401248   cmp edx,eax                           ; 比较 0040124A   jnz short CrackMe_.00401261           ; 不相等就OVER 0040124C   inc edi 0040124D   cmp edi,ebp                           ; 比较是否计算完? 0040124F   jl short CrackMe_.00401200            ; 计算下一次 00401251   pop edi 00401252   pop esi 00401253   pop ebp 00401254   mov eax,1 00401259   pop ebx 0040125A   add esp,190 00401260   retn 00401261   pop edi 00401262   pop esi 00401263   pop ebp 00401264   xor eax,eax 00401266   pop ebx 00401267   add esp,190 0040126D   retn ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// 算法总结: 1) 用户名和注册码必须为4位,注册码应该不能为数字吧? 2) (注册码第一位-41)*8+(注册码第一位-41),记为A    (注册码第二位 - 41)*2+A ,记为B    B%1A = 用户名第一位 - 41 ==> 成功25%了  (注册码第二位 - 41)*2 +  (注册码第二位 - 41) ,记为C   A*4 + (注册码第一位 - 41), 记为D  (C+D)%1A  = 用户名第二位 - 41    ===> 成功50%啦 接下来的不写了,累死啦`~自己看上面分析吧 不会编程,无法做出注册信息,其实我太菜了,不足之处,还请多多指点 ------------------------------------------------------------------------ -------- 【破解总结】 分析不太难,但就是一个字,累 ------------------------------------------------------------------------ -------- 

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
所上传文件
crackme_0018.rar (上传时间2006-11-19,17:34,15.3 KB,19 次点击)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有