首页
社区
课程
招聘
[原创]CrackMe.happytown.VC.0018 简单算法分析
2006-11-19 17:33 5807

[原创]CrackMe.happytown.VC.0018 简单算法分析

2006-11-19 17:33
5807
【破解日期】 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%啦

接下来的不写了,累死啦`~自己看上面分析吧

不会编程,无法做出注册信息,其实我太菜了,不足之处,还请多多指点
------------------------------------------------------------------------

--------
【破解总结】


分析不太难,但就是一个字,累
------------------------------------------------------------------------

-------- 

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 7
打赏
分享
最新回复 (5)
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
血草 1 2006-11-19 19:06
2
0
呵呵。我又可以顶兄弟一次。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
张大善人 2006-11-19 19:33
3
0
不错,再学习一下

雪    币: 191
活跃值: (205)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
warshon 6 2006-11-20 09:53
4
0
学习,
雪    币: 235
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
iamcrackin 3 2006-11-20 11:51
5
0
最详尽的分析请参看我的分析:http://bbs.pediy.com/showthread.php?s=&threadid=35176
极其纳闷,为什么你这个帖子可以得精,我那个帖子比你这个分析得更详细,却得不了精呢?莫非评精华帖也要看名气?
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
happytown 31 2006-12-1 15:44
6
0
最初由 iamcrackin 发布
最详尽的分析请参看我的分析:http://bbs.pediy.com/showthread.php?s=&threadid=35176
极其纳闷,为什么你这个帖子可以得精,我那个帖子比你这个分析得更详细,却得不了精呢?莫非评精华帖也要看名气?

凭心而论,没有写出注册机的任何人都不应该得到精华的。因为里面的readme说明了必须写出注册机。
这个CrackMe(KeyGenME)其实难点在于写出注册机,而不是看懂算法,算法太简单了,不是吗?但有人写出了注册机吗?目前还没有看到。所以 ...
游客
登录 | 注册 方可回帖
返回