首页
社区
课程
招聘
再弄一个CRACKME
2006-5-2 15:18 5014

再弄一个CRACKME

2006-5-2 15:18
5014
【文章标题】: 再来一个CRACK
【作者邮箱】: pyw800923@yahoo.com.cn
【软件名称】: Rith CrackMe 1
【软件大小】: 20.0KB
【编写语言】: vc++ 6.0
【使用工具】: OD PEID
【操作平台】: win XP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  输入练码,程序没有任何反应,故推测只有正确的用户名与注册码,才会有反应。
  先用PEID检测,无壳。
  OD载入,进行“超级字串查找”,发现 Well done cracker!双击进入
  0040159D   .  57            push    edi                ;F2下断
  0040159E   .  68 48304000   push    Rith_Cra.00403048                ;  31415926535897932384
  004015A3   .  8D4C24 14     lea     ecx, dword ptr ss:[esp+14]
  004015A7   .  897424 1C     mov     dword ptr ss:[esp+1C], esi
  004015AB   .  E8 FA020000   call    <jmp.&MFC42.#537>
  004015B0   .  6A 01         push    1
  004015B2   .  8BCE          mov     ecx, esi
  004015B4   .  C74424 28 000>mov     dword ptr ss:[esp+28], 0
  004015BC   .  E8 E3020000   call    <jmp.&MFC42.#6334>
  004015C1   .  8B7E 60       mov     edi, dword ptr ds:[esi+60]       ;  用户输入的用户名到edi
  004015C4   .  8B5F F8       mov     ebx, dword ptr ds:[edi-8]        ;  用户名长度
  004015C7   .  83FB 05       cmp     ebx, 5                           ;  比较用户名位数是否小于5位
  004015CA   .  7C 7E         jl      short Rith_Cra.0040164A          ;  用户名小于5位,退出
  004015CC   .  8B46 64       mov     eax, dword ptr ds:[esi+64]       ;  用户输入的密码
  004015CF   .  894424 14     mov     dword ptr ss:[esp+14], eax       ;  密码转存到esp+14处
  004015D3   .  3958 F8       cmp     dword ptr ds:[eax-8], ebx        ;  用户名长度与密码长度对比
  004015D6   .  75 72         jnz     short Rith_Cra.0040164A          ;  用户名长度与密码长度不同退出
  004015D8   .  83FB 14       cmp     ebx, 14
  004015DB   .  7F 6D         jg      short Rith_Cra.0040164A          ;  用户名长度大于14退出
  004015DD   .  33C9          xor     ecx, ecx
  004015DF   .  85DB          test    ebx, ebx
  004015E1   .  7E 54         jle     short Rith_Cra.00401637
  004015E3   .  8B7424 10     mov     esi, dword ptr ss:[esp+10]       ;  取圆周率
  004015E7   >  8A040F        mov     al, byte ptr ds:[edi+ecx]        ;  ecx=0.取用户名中的第edi+ecx位
  004015EA   .  0FBE2C31      movsx   ebp, byte ptr ds:[ecx+esi]       ;  取圆周率的第esi+ecx位,并扩充为32位,用符号位填充
  004015EE   .  0FBEC0        movsx   eax, al                          ;  将取出的用户名,扩充为32位
  004015F1   .  99            cdq                                      ;  用EAX的符号位填充EDX,然后edx:eax作被除数
  004015F2   .  F7FD          idiv    ebp                              ;  edx:eax/ebp,商在eax中,余数在edx中
  004015F4   .  8BC2          mov     eax, edx                         ;  将余数放入eax
  004015F6   .  D1E0          shl     eax, 1                           ;  将余数放在eax中,再逻辑左移1位,
  004015F8   .  83F8 7B       cmp     eax, 7B                          ;  结果与7b比较
  004015FB   .  7E 03         jle     short Rith_Cra.00401600
  004015FD   .  83E8 1A       sub     eax, 1A
  00401600   >  83F8 41       cmp     eax, 41
  00401603   .  7D 09         jge     short Rith_Cra.0040160E
  00401605   .  BA 82000000   mov     edx, 82                          ;  82为十六进制数
  0040160A   .  2BD0          sub     edx, eax                         ;  82减去第一位计算出的注册码,再存到eax中
  0040160C   .  8BC2          mov     eax, edx
  0040160E   >  83F8 5B       cmp     eax, 5B
  00401611   .  7E 12         jle     short Rith_Cra.00401625          ;  小于等于跳转
  00401613   .  83F8 61       cmp     eax, 61
  00401616   .  7D 0D         jge     short Rith_Cra.00401625          ;  大于等于跳转
  00401618   .  99            cdq
  00401619   .  BD 0A000000   mov     ebp, 0A
  0040161E   .  F7FD          idiv    ebp
  00401620   .  83C2 30       add     edx, 30
  00401623   .  8BC2          mov     eax, edx
  00401625   >  8B5424 14     mov     edx, dword ptr ss:[esp+14]
  00401629   .  38040A        cmp     byte ptr ds:[edx+ecx], al        ;  计算出的注册码的第一位放入al,与输入的第一位比较
  0040162C   .  75 1C         jnz     short Rith_Cra.0040164A          ;  如果有一位不一样则跳出,退出比较
  0040162E   .  41            inc     ecx                              ;  ECX加1
  0040162F   .  3BCB          cmp     ecx, ebx                         ;  ECX与EBX(即用户名长度)比较,小于,计算下一位,否则显示成功
  00401631   .^ 7C B4         jl      short Rith_Cra.004015E7
  00401633   .  8B7424 18     mov     esi, dword ptr ss:[esp+18]
  00401637   >  6A 00         push    0
  00401639   .  68 34304000   push    Rith_Cra.00403034                ;  congratulations!
  0040163E   .  68 20304000   push    Rith_Cra.00403020                ;  well done cracker!
  ――――――――――――――――――――――――――――――――――――――――――――――――――――――
  算法总结:
  第一位注册码为00beH=n
  用户名中的第EDI+ECX位,放入EAX中,扩充到EDX:EAX,然后去除圆周率中的第ESI+ECX位,将余数由EDX放入EAX中,然后再将EAX左移一位,结果与7B比较(小于等于7B则EAX与41比较),如果大于等于7B,则EAX减去1A,  跟41比较,如果EAX小于41,则使EDX=82,82-EAX=EDX,再将EDX送到EAX中,(如果大于等于41,则EAX直接与5B比较),EAX再与5B比较,小于等于转移到00401625,
                                与5B比较, 大于,则EAX与61比较,大于等于61则转移到00401625                                                        否则,与61比较,小于61,则将EAX中的值扩充到EDX:EAX,                                                               使EBP=0A,用EDX:EAX去除EBP,将余数
                                                                           放EDX,再加30,送到EAX中
                                                                                   转移到00401625,
  00401625,取出用户输入的第EDX+ECX位注册码,与计算出来的EAX中的最低位AL,比较,相等,则重复计算下一位EAX与用户输入的第二位注册码比较,
    不相等,则直接退出。
  
  用户名:pywsxq
  注册码:nTd6fp
  
  x=78h
  00000000:00000078/35h=2.....0Eh(EDX);78H=120d,35H=53d,则120/53=2余14即0EH=EDX=EAX
  EAX=0EH左移一位为
  EAX=0000 0000 0000 1110
   EAX=0000 0000 0001 1100=0000001CH<41h,则EDX=82H-EAX=66H=EAX,EAX=66H>5BH则EAX与61H比较,EAX>61H
  EAX中的AL为66H=字符f
  
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年05月02日 15:16:50

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (3)
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
逍遥风 55 2006-5-2 18:50
2
0
http://bbs.pediy.com/showthread.php?s=&threadid=22450
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AV仔 2006-5-3 11:11
3
0
004015D6   .  75 72         jnz     short Rith_Cra.0040164A         

改为 004015D6   .  74 72         je     short Rith_Cra.0040164A   

0040162C   .  75 1C         jnz     short Rith_Cra.0040164A

改为  0040162C   .  74 1C         je     short Rith_Cra.0040164A
雪    币: 214
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
我从零KS 2 2006-5-3 11:20
4
0
学破解,要理解精神,才能举一反三,但即破之不计其法,皆为能人也!
游客
登录 | 注册 方可回帖
返回