首页
社区
课程
招聘
[原创]超小KeyGen !
发表于: 2010-4-9 14:15 7682

[原创]超小KeyGen !

2010-4-9 14:15
7682
好久没写CM了,发个简单的KeyGen,如果用来爆破的话就实在太浪费我的心血了,C语言SDK写程序不容易

啊!随便妻死妻无就把我这两天来努力给白费了。这个KeyGen没设置任何Anti,算法又是N简单了。希望大

家能够好好的练手,多谢合作!

crackme.rar

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 695
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
占个座,回家看看…
2010-4-9 15:40
0
雪    币: 435
活跃值: (1312)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
3
先占座,再看看
2010-4-9 16:11
0
雪    币: 13242
活跃值: (4232)
能力值: ( LV15,RANK:1673 )
在线值:
发帖
回帖
粉丝
4
晕...这边也有呀...早知道在这边下了...那边点一下扣了偶2U...:(
2010-4-9 16:47
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
哈哈!这就做派通街吗!
2010-4-9 17:32
0
雪    币: 218
活跃值: (11)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
name:hdcba
code:AAABACADAE
2010-4-9 17:54
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
楼上的还真有你的,反过来算。我都没想过可以这样的了!
2010-4-9 18:23
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
8
int a=3;
for (i=0;i<6;++i)
{
b=i+i;
sn=name[i]-(30+29/a);
sn[b+1]=sn+a-2;
a+=2;
}
附加条件:用户名长度必须为5位小写字母,sn长度必须为10位大写字母
2010-4-9 18:55
0
雪    币: 151
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
程序很精致,算法也很适合初学者
2010-4-9 21:26
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=无聊的菜鸟;788690]int a=3;
for (i=0;i<6;++i)
{
b=i+i;
sn=name[i]-(30+29/a);
sn[b+1]=sn+a-2;
a+=2;
}
附加条件:用户名长度必须为5位小写字母,sn长度必须为10位大写字母[/QUOTE]

理论是这样了,不过有些位还是有限制了!
2010-4-9 21:52
0
雪    币: 435
活跃值: (1312)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
11
hefjh
AABCDFILHL
咋一看好麻烦,思路清晰了就好多了
2010-4-10 10:30
0
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=无聊的菜鸟;788690]int a=3;
for (i=0;i<6;++i)
{
b=i+i;
sn=name[i]-(30+29/a);
sn[b+1]=sn+a-2;
a+=2;
}
附加条件:用户名长度必须为5位小写字母,sn长度必须为10位大写字母[/QUOTE]

也跟踪了一下,详细分析请见 http://bbs.pediy.com/showthread.php?t=110606
2010-4-10 16:12
0
雪    币: 180
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
00401430   >  837D F4 06    CMP     DWORD PTR SS:[EBP-C], 6;SS:[EBP-C]初始值是0,与6比较
00401434   .  7E 0A         JLE     SHORT crackme.00401440        ;小于等于6跳转后继续循环
00401436   .  E9 C5000000   JMP     crackme.00401500         ;否则跳到 00401500,既跳出循环       
0040143B      90            NOP
0040143C      8D7426 00     LEA     ESI, DWORD PTR DS:[ESI]
00401440   >  8B45 0C       MOV     EAX, DWORD PTR SS:[EBP+C]   ;name中输入的字符串地址       
00401443   .  8B55 F4       MOV     EDX, DWORD PTR SS:[EBP-C]   ;EDX=>(循环次数-1)
00401446   .  01D0          ADD     EAX, EDX             ;name中输入的字符串地址加上(循环次数-1)
00401448   .  8038 7A       CMP     BYTE PTR DS:[EAX], 7A        ;取出一个字符与小写字母'z'进行判断
0040144B   .  0F8F 9F000000 JG      crackme.004014F0                 ;大于跳走       
00401451   .  8B45 0C       MOV     EAX, DWORD PTR SS:[EBP+C]        ;如上
00401454   .  8B55 F4       MOV     EDX, DWORD PTR SS:[EBP-C]
00401457   .  01D0          ADD     EAX, EDX
00401459   .  8038 60       CMP     BYTE PTR DS:[EAX], 60        ;取出一个字符与"`"进行比较,'a'是61
0040145C   .  0F8E 8E000000 JLE     crackme.004014F0                ;小于等于跳走
00401462   .  8B45 10       MOV     EAX, DWORD PTR SS:[EBP+10]        ;code中输入的字符串地址
00401465   .  8B55 F4       MOV     EDX, DWORD PTR SS:[EBP-C]        ;EDX=>(循环次数-1)
00401468   .  01D0          ADD     EAX, EDX                        ;地址加上(循环次数-1)
0040146A   .  8038 5A       CMP     BYTE PTR DS:[EAX], 5A        ;取出一个字符与小写字母'Z'进行判断
0040146D   .  0F8F 7D000000 JG      crackme.004014F0                ;大于跳走
00401473   .  8B45 10       MOV     EAX, DWORD PTR SS:[EBP+10]       
00401476   .  8B55 F4       MOV     EDX, DWORD PTR SS:[EBP-C]
00401479   .  01D0          ADD     EAX, EDX
0040147B   .  8038 40       CMP     BYTE PTR DS:[EAX], 40        ;取出一个字符与'@ '进行判断,'A'是41
0040147E   .  7E 70         JLE     SHORT crackme.004014F0        ;小于等于跳走
00401480   .  8B45 10       MOV     EAX, DWORD PTR SS:[EBP+10]  ;code中输入的字符串地址
00401483   .  8B4D F0       MOV     ECX, DWORD PTR SS:[EBP-10]   ;SS:[EBP-10]初始值是1,在下面每次循环加2
00401486   .  8D1401        LEA     EDX, DWORD PTR DS:[ECX+EAX]  ;code中输入的字符串地址+(1,3,5,7.....)
00401489   .  0FBE02        MOVSX   EAX, BYTE PTR DS:[EDX]        ;取出1个字母保存到EAX
0040148C   .  8B55 F0       MOV     EDX, DWORD PTR SS:[EBP-10]  ;EDX存放(循环次数+2).0040148F   .  8B4D 10       MOV     ECX, DWORD PTR SS:[EBP+10]  ;code中输入的字符串地址
00401492   .  01CA          ADD     EDX, ECX                    ;code中输入的字符串地址+(1,3,5,7.....)
00401494   .  8D4A FF       LEA     ECX, DWORD PTR DS:[EDX-1]   ;上面得到的地址-1
00401497   .  0FBE11        MOVSX   EDX, BYTE PTR DS:[ECX]         ;取出一个字母保存到EDX
0040149A   .  29D0          SUB     EAX, EDX                 ;得到的字母ASCII码之前相减0040149C   .  3B45 F4       CMP     EAX, DWORD PTR SS:[EBP-C] ;得到的结果与(循环次数-1)比较
0040149F   .  75 4F         JNZ     SHORT crackme.004014F0         ;不相等跳到004014F0,相等继续       
004014A1   .  8B45 0C       MOV     EAX, DWORD PTR SS:[EBP+C] ;EAX指向name中字符串地址
004014A4   .  8B4D F4       MOV     ECX, DWORD PTR SS:[EBP-C]   ;ECX是(循环次数-1)
004014A7   .  8D1401        LEA     EDX, DWORD PTR DS:[ECX+EAX] ;name中输入的字符串地址+循环次数-1)
004014AA   .  0FBE02        MOVSX   EAX, BYTE PTR DS:[EDX]        ;第一次循环取第一个字母,第二次循环取第二个字母.....
004014AD   .  8B55 F0       MOV     EDX, DWORD PTR SS:[EBP-10]  ;EDX=>(1,3,5,7...)
004014B0   .  8B4D 10       MOV     ECX, DWORD PTR SS:[EBP+10] ;Code中输入的字符串地址
004014B3   .  01CA          ADD     EDX, ECX                    ;code里的字符串地址+(1,3,5,7...)
004014B5   .  8D4A FF       LEA     ECX, DWORD PTR DS:[EDX-1];字符串地址+(1,3,5,7...)-1
004014B8   .  0FBE11        MOVSX   EDX, BYTE PTR DS:[ECX]        ;取出一个字母放到EDX中
004014BB   .  89C1          MOV     ECX, EAX                        ;name中得到的字母赋给ECX
004014BD   .  29D1          SUB     ECX, EDX       ;name中输入的字母ASCII - code中输入的字母ASCII
004014BF   .  894D CC       MOV     DWORD PTR SS:[EBP-34], ECX      ;SS:[EBP-34]里存储相减结果
004014C2   .  8B55 F0       MOV     EDX, DWORD PTR SS:[EBP-10]        ;EDX=>(1,3,5,7...)
004014C5   .  83C2 02       ADD     EDX, 2                        ;EDX+2               
004014C8   .  BB 1D000000   MOV     EBX, 1D                        ;1D保存到EBX
004014CD   .  89D8          MOV     EAX, EBX                        ;EAX=1D ,十进制是29
004014CF   .  89D6          MOV     ESI, EDX                          ;上面得到的EDX值保存到ESI
004014D1   .  99            CDQ
004014D2   .  F7FE          IDIV    ESI                                ;EAX/ESI ,既 1D/ESI
004014D4   .  89C1          MOV     ECX, EAX                        ;除后的商放入ECX
004014D6   .  8D59 1E       LEA     EBX, DWORD PTR DS:[ECX+1E] ;商+1E保存到EBX,1E十进制是30
004014D9   .  395D CC       CMP     DWORD PTR SS:[EBP-34], EBX        ;比较是否相等
004014DC   .  75 0F         JNZ     SHORT crackme.004014ED                        ;不相等跳转       
004014DE   .  8345 F0 02    ADD     DWORD PTR SS:[EBP-10], 2        ;SS:[EBP-10]+2
004014E2   .  8B45 FC       MOV     EAX, DWORD PTR SS:[EBP-4]
004014E5   .  89C2          MOV     EDX, EAX
004014E7   .  8D0412        LEA     EAX, DWORD PTR DS:[EDX+EDX]
004014EA   .  8945 FC       MOV     DWORD PTR SS:[EBP-4], EAX
004014ED   >  EB 05         JMP     SHORT crackme.004014F4
004014EF      90            NOP
004014F0   >  8345 FC E7    ADD     DWORD PTR SS:[EBP-4], -19
004014F4   >  FF45 F4       INC     DWORD PTR SS:[EBP-C]
004014F7   .^ E9 34FFFFFF   JMP     crackme.00401430

1.name中必须为5位小写字母
2.code中必须为10位大写字母
3.name中取出的i位字母ASCII - code中取出的(2*i-1)字母的ASCII = 1D/(2*x+1) + 1E
整理后为
code(2*i-1)=name(i)-1D/(2*i+1)-1E    i =(1,2,3,4,5)

举例:

假如kimdh对应的16进制ASCII为 6B 69 6D 64 68 ,i每次加1

1D/(2*i+1)=1D/3=>27         6B-27=44(D) 下一个 +0=D
1D/(2*i+1)=1D/5=>23         69-23=46(F) 下一个 +1=G
1D/(2*i+1)=1D/7=>22         6D-22=4B(K) 下一个 +2=M
1D/(2*i+1)=1D/9=>21         64-21=43(C) 下一个 +3=F
1D/(2*i+1)=1D/11=>20         68-20=48(H) 下一个 +4=L

name:kimdh
code:DDFGKMCFHL

本人菜鸟,所以当做练习做了一遍。有误的地方请高手们指正。
2010-4-10 22:16
0
雪    币: 28
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
我想知道错误和正确这两个字符串是怎么来的?正确大概是根据FormatMessageA返回的中文字符里截取出来的。错误就一点不知道了
2010-4-14 12:41
0
游客
登录 | 注册 方可回帖
返回
//