首页
社区
课程
招聘
CRACKME算法分析(逐位比较型)
发表于: 2006-3-11 19:41 6966

CRACKME算法分析(逐位比较型)

2006-3-11 19:41
6966

【破文标题】crackme算法分析
【破文作者】逍遥风
【破解工具】OD PEID
【破解平台】WINXP
【破解声明】此CRACKME注册方式是逐位比较。就是计算出一位就比较一位。
----------------------------------------------------------------------
1)PEID检查:Microsoft Visual C++ 6.0
2)试运行发现没有错误提示,还是先用OD,发现了注册成功的提示。以此为突破口,很容易来到以下代码处:
00401580   .  6A FF         PUSH -1
00401582   .  68 B81B4000   PUSH Rith_Cra.00401BB8                   ;  SE 处理程序安装
00401587   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0040158D   .  50            PUSH EAX
0040158E   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
00401595   .  83EC 0C       SUB ESP,0C
00401598   .  53            PUSH EBX
00401599   .  55            PUSH EBP
0040159A   .  56            PUSH ESI
0040159B   .  8BF1          MOV ESI,ECX
0040159D   .  57            PUSH EDI
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_??0CString@@QAE@PB>
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_?UpdateData@CWnd@>;  取注册名位数
004015C1   .  8B7E 60       MOV EDI,DWORD PTR DS:[ESI+60]
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
004015D3   .  3958 F8       CMP DWORD PTR DS:[EAX-8],EBX             ;  比较注册名位数与注册码位数
004015D6   .  75 72         JNZ SHORT Rith_Cra.0040164A              ;  位数不相等就跳向失败
004015D8   .  83FB 14       CMP EBX,14                               ;  注册名位数与20(十进制)比较
004015DB   .  7F 6D         JG SHORT Rith_Cra.0040164A               ;  大于20位就跳向失败
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]             ;  取注册名的每一位
004015EA   .  0FBE2C31      MOVSX EBP,BYTE PTR DS:[ECX+ESI]          ;  取表中相应位置的数字的HEX值,设为A
004015EE   .  0FBEC0        MOVSX EAX,AL                             ;  取注册名每一位的HEX值,设为B
004015F1   .  99            CDQ
004015F2   .  F7FD          IDIV EBP                                 ;  B除以A,商进EAX,余数进EDX
004015F4   .  8BC2          MOV EAX,EDX                              ;  余数给EAX
004015F6   .  D1E0          SHL EAX,1                                ;  余数乘以2的一次方,设为C
004015F8   .  83F8 7B       CMP EAX,7B                               ;  与7B比较
004015FB   .  7E 03         JLE SHORT Rith_Cra.00401600              ;  小于就与41比较
004015FD   .  83E8 1A       SUB EAX,1A
00401600   >  83F8 41       CMP EAX,41                               ;  与41比较
00401603   .  7D 09         JGE SHORT Rith_Cra.0040160E              ;  大于就跳走
00401605   .  BA 82000000   MOV EDX,82
0040160A   .  2BD0          SUB EDX,EAX                              ;  EDX=82-C
0040160C   .  8BC2          MOV EAX,EDX
0040160E   >  83F8 5B       CMP EAX,5B                               ;  结果与5B相比较
00401611   .  7E 12         JLE SHORT Rith_Cra.00401625              ;  小于就与61比较
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             ;  结果的ASCII值与假码第一位的HEX值相比较
0040162C   .  75 1C         JNZ SHORT Rith_Cra.0040164A              ;  不相等就跳向失败
0040162E   .  41            INC ECX                                  ;  每计算一次ECX+1
0040162F   .  3BCB          CMP 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!

------------------------------------------------------------------------
算法总结:
需要一张表: 31415926535897932384(呵呵。圆周率?)
1)注册名与注册码都必须大于5位且位数必须相等。
2)按次在取注册名每一位的HEX值B,以及表中相对应位置数字的HEX值A
3)A除以B所得余数乘以2。
4)在对得到的结果进行分情况处理(比较麻烦偷下懒。。。不叙述了)。
5)每一位计算的最终结果与输入的注册码相应位数进行比较。
得到一组注册信息:
注册名:lovetc
注册码:vhf|nT


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个不错
很好哦!
2006-3-12 10:22
0
雪    币: 390
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
00401582   .  68 B81B4000   PUSH Rith_Cra.00401BB8                   ;  SE 处理程序安装

楼主啊,这里"SE 处理程序安装"是什么意思啊?
2006-3-12 16:47
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
4
需要关心的是算法。。。。。。
2006-3-12 17:01
0
雪    币: 183
活跃值: (563)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
5
2006-4-15 11:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哎,为什么很容易到那里呢,不懂
2006-4-23 22:55
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个CrackMe有一个BUG是有的用户名会对应无法显示的字符,应该在对应的serial生成后进行一下ASCII值得控制
2016-3-28 15:56
0
游客
登录 | 注册 方可回帖
返回
//