首页
社区
课程
招聘
简单CRACKME算法分析(很适合新手)[原创]
发表于: 2006-2-14 14:15 18035

简单CRACKME算法分析(很适合新手)[原创]

2006-2-14 14:15
18035

1)PEID检查,Borland Delphi 6.0 - 7.0。无壳
2)试运行程序,任意输入注册信息后,有错误提示。
3)用OD的超字符串查找错误提示,
超级字串参考+        , 条目 47
地址=0040867F
反汇编=MOV EDX,CrackMe.004087DC
文本字串=继续努力!                       双击来到0040867F处,向上找到计算过程开始的地方,下断
4)OD重新载入程序,任意输入注册信息后程序中断
0040860E  |.  50            PUSH EAX
0040860F  |.  8D55 E0       LEA EDX,DWORD PTR SS:[EBP-20]
00408612  |.  A1 98A74000   MOV EAX,DWORD PTR DS:[40A798]
00408617  |.  E8 6CFDFFFF   CALL CrackMe.00408388                    ;  算法CALL,跟进。
0040861C  |.  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]            ; |
0040861F  |.  0FB600        MOVZX EAX,BYTE PTR DS:[EAX]              ; |
00408622  |.  8945 E4       MOV DWORD PTR SS:[EBP-1C],EAX            ; |
00408625  |.  C645 E8 00    MOV BYTE PTR SS:[EBP-18],0               ; |
00408629  |.  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]            ; |
0040862C  |.  33C9          XOR ECX,ECX                              ; |
0040862E  |.  B8 B4874000   MOV EAX,CrackMe.004087B4                 ; |%d
00408633  |.  E8 A0DAFFFF   CALL CrackMe.004060D8                    ; \CrackMe.004060D8
00408638  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
0040863B  |.  A1 9CA74000   MOV EAX,DWORD PTR DS:[40A79C]
00408640  |.  E8 47B9FFFF   CALL CrackMe.00403F8C
00408645  |.  75 36         JNZ SHORT CrackMe.0040867D
00408647  |.  8BC3          MOV EAX,EBX
00408649  |.  BA C0874000   MOV EDX,CrackMe.004087C0                 ;  恭喜您,注册成功!
0040864E  |.  E8 9DBAFFFF   CALL CrackMe.004040F0
00408653  |.  E8 9CA7FFFF   CALL CrackMe.00402DF4
00408658  |.  E8 CF9FFFFF   CALL CrackMe.0040262C
0040865D  |.  BA A0A74000   MOV EDX,CrackMe.0040A7A0
00408662  |.  A1 70934000   MOV EAX,DWORD PTR DS:[409370]
00408667  |.  E8 04A5FFFF   CALL CrackMe.00402B70
0040866C  |.  A1 70934000   MOV EAX,DWORD PTR DS:[409370]
00408671  |.  E8 66A5FFFF   CALL CrackMe.00402BDC
00408676  |.  E8 B19FFFFF   CALL CrackMe.0040262C
0040867B  |.  EB 34         JMP SHORT CrackMe.004086B1
0040867D  |>  8BC3          MOV EAX,EBX
0040867F  |.  BA DC874000   MOV EDX,CrackMe.004087DC                 ;  继续努力!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
来到算法CALL。。。
00408388  /$  55            PUSH EBP
00408389  |.  8BEC          MOV EBP,ESP
0040838B  |.  83C4 F4       ADD ESP,-0C
0040838E  |.  53            PUSH EBX
0040838F  |.  56            PUSH ESI
00408390  |.  57            PUSH EDI
00408391  |.  33C9          XOR ECX,ECX
00408393  |.  894D F4       MOV DWORD PTR SS:[EBP-C],ECX
00408396  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
00408399  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0040839C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0040839F  |.  E8 8CBCFFFF   CALL CrackMe.00404030
004083A4  |.  33C0          XOR EAX,EAX
004083A6  |.  55            PUSH EBP
004083A7  |.  68 41844000   PUSH CrackMe.00408441
004083AC  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004083AF  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004083B2  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004083B5  |.  E8 86BCFFFF   CALL CrackMe.00404040
004083BA  |.  E8 25D8FFFF   CALL CrackMe.00405BE4                    ;  取注册名位数
004083BF  |.  8BD8          MOV EBX,EAX
004083C1  |.  D1EB          SHR EBX,1                                ;  注册名位数除以2
004083C3  |.  4B            DEC EBX                                  ;  EBX-1
004083C4  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
004083C7  |.  E8 68B8FFFF   CALL CrackMe.00403C34
004083CC  |.  8BFB          MOV EDI,EBX
004083CE  |.  85FF          TEST EDI,EDI
004083D0  |.  7C 51         JL SHORT CrackMe.00408423
004083D2  |.  47            INC EDI                                  ;  EDI+1
004083D3  |.  33F6          XOR ESI,ESI                              ;  ESI清零
004083D5  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]
004083D8  |.  E8 63BCFFFF   |CALL CrackMe.00404040
004083DD  |.  8BD6          |MOV EDX,ESI
004083DF  |.  83F2 02       |XOR EDX,2                               ;  使EDX=2
004083E2  |.  8A1C10        |MOV BL,BYTE PTR DS:[EAX+EDX]            ;  取注册名第n+1位的HEX值
004083E5  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004083E8  |.  E8 53BCFFFF   |CALL CrackMe.00404040
004083ED  |.  8BD6          |MOV EDX,ESI                             ;  EDX清零
004083EF  |.  83F2 02       |XOR EDX,2                               ;  使EDX=2
004083F2  |.  8A4410 FF     |MOV AL,BYTE PTR DS:[EAX+EDX-1]          ;  取注册名第n位的HEX值
004083F6  |.  0AD8          |OR BL,AL
004083F8  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
004083FB  |.  E8 40BCFFFF   |CALL CrackMe.00404040
00408400  |.  E8 DFD7FFFF   |CALL CrackMe.00405BE4                   ;  取注册名位数
00408405  |.  02D8          |ADD BL,AL                               ;  注册名位数与第n+1位的HEX值相加
00408407  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
0040840A  |.  8BD3          |MOV EDX,EBX
0040840C  |.  E8 EFB9FFFF   |CALL CrackMe.00403E00
00408411  |.  8B55 F4       |MOV EDX,DWORD PTR SS:[EBP-C]
00408414  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]
00408417  |.  E8 A0BAFFFF   |CALL CrackMe.00403EBC
0040841C  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]
0040841F  |.  46            |INC ESI                                    每计算一次ESI+1
00408420  |.  4F            |DEC EDI                                    每计算一次EDI-1
00408421  |.^ 75 B2         \JNZ SHORT CrackMe.004083D5
00408423  |>  33C0          XOR EAX,EAX
00408425  |.  5A            POP EDX
00408426  |.  59            POP ECX
00408427  |.  59            POP ECX
00408428  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
0040842B  |.  68 48844000   PUSH CrackMe.00408448
00408430  |>  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
00408433  |.  E8 FCB7FFFF   CALL CrackMe.00403C34
00408438  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
0040843B  |.  E8 F4B7FFFF   CALL CrackMe.00403C34
00408440  \.  C3            RETN
00408441   .^ E9 16B2FFFF   JMP CrackMe.0040365C
00408446   .^ EB E8         JMP SHORT CrackMe.00408430
00408448   .  5F            POP EDI
00408449   .  5E            POP ESI
0040844A   .  5B            POP EBX
0040844B   .  8BE5          MOV ESP,EBP
0040844D   .  5D            POP EBP
0040844E   .  C3            RETN
------------------------------------------------------------------------BY  逍遥风
算法总结:
经过跟踪代码,了解到作者的算法本意是:
1)取注册名的位数除以2的商A作为循环计算的次数。
2)以A-1和当前循环计算次数减1,做XOR运算,结果设为n.
3)取注册名第n+1位和第n位的HEX值做OR运算。运算结果加上注册名位数。并循环计算。最终结果设为B
4)B再转换成相应的十进制数,就为注册码。
但实际算法输出的结果是。
1)取注册名第3位和第2位的HEX值。
2)将两个值做OR运算。将这个运算结果与注册名位数相加(16进制)。
3)相加后的和再转换成相应的十进制数就为注册码。
也就是说只要注册名位数一定,第2和第3位相同注册码就一样。不清楚是程序问题还是作者有意而为。。。

注册名 tcxb
1)  x对应78 ,c对应63.
2)  78or63=7B,7B+4=7F
3)7F转换成相应的十进制数就是127
所以   注册名tcxb
       注册码127
注册名 lovewxt                 
1) v对应76,o对应6F
2)76or6F=7F,7F+7=86
3)86转换成相应的十进制数就是134
所以  注册名lovewxt lovezyz   love123
       注册码都是134


[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (60)
雪    币: 246
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
最初由 逍遥风 发布
1)PEID检查,Borland Delphi 6.0 - 7.0。无壳
2)试运行程序,任意输入注册信息后,有错误提示。
3)用OD的超字符串查找错误提示,
超级字串参考+ , 条目 47
地址=0040867F
........


楼主,有没有专门介绍反汇编语言的书呀
2006-2-14 15:48
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
3
没注意过~不好意思
2006-2-14 17:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好帖啊.........
2006-2-14 18:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
讲的很明白,象我这样的菜菜虫也能对这书看明白,很详细
2006-2-15 09:03
0
雪    币: 266
活跃值: (60)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
楼主,问个问题,
如何从这里
004083BA |. E8 25D8FFFF CALL CrackMe.00405BE4 ; 取注册名位数
看出  取注册名位数  ??
004083E2 |. 8A1C10 |MOV BL,BYTE PTR DS:[EAX+EDX] ;
取注册名第n+1位的HEX值(通过那里看出来??)

我刚学,但看破文的时候,有很多这样的地方看不明白,老是卡住,您能给我指点一下吗???

非常感谢!!!!
2006-2-15 21:21
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
7
注意看寄存器的值,一般在EAX中。
1)记住你输入了几位注册名
2)经过一个CALL时~如果发现EAX中的值变成了注册名的位数
那么~一般情况下
这个CALL的作用就是取注册名位数
2006-2-16 13:14
0
雪    币: 266
活跃值: (60)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
8
哦,原来如此,我还以为能这样看出来呢!
真苯
谢谢拉
2006-2-16 21:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢了
这是我第3个暴力破解的Crackme
我还不懂算法。
不过看了解释基本明白。
2006-2-17 20:06
0
雪    币: 200
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 逍遥风 发布
注意看寄存器的值,一般在EAX中。
1)记住你输入了几位注册名
2)经过一个CALL时~如果发现EAX中的值变成了注册名的位数
那么~一般情况下
这个CALL的作用就是取注册名位数

谢谢了,我终于知道为什么了!十分感谢!
2006-2-18 10:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
想下载还要先发帖,第一次听说
2006-2-19 21:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习中,谢谢分享!!
2006-2-22 19:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习中,谢谢
2006-2-23 11:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习中,这样的东西真好 好好学习。。
2006-2-23 16:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习中,谢谢学习中,谢谢
2006-2-23 21:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
荡下来,学习学习
2006-2-24 08:03
0
雪    币: 200
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
怎么人这么少呀?没有什么新文章呀!
2006-2-24 16:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢楼主提供,仔细研究下
2006-2-26 15:01
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习中。。。。谢谢
2006-2-28 02:17
0
雪    币: 221
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
very good!
2006-2-28 11:22
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
请问楼主,关键call为什么不是最靠近"注册成功!"上面第一个call?
2006-3-2 14:05
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
22
一般来说最靠近"注册成功!"的那个CALL,是真假注册码比较的地方
2006-3-2 14:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lcw
23
断下来就能看到真假注册码滴。
2006-3-2 15:47
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
最初由 逍遥风 发布
一般来说最靠近"注册成功!"的那个CALL,是真假注册码比较的地方


逍遥兄的意思是算法call和比较call可能不一样?我以前看的破文好像大多直接跟进最靠近类似“注册成功!”这样字串的Call。。所以我看到兄的文章没有跟进最接近的Call觉得有点奇怪,那我要怎么分别呢?
2006-3-2 16:00
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
25
这个要具体问题具体对待,千万不要拘泥.
呵呵,多练练
2006-3-2 17:36
0
游客
登录 | 注册 方可回帖
返回
//