|
![]() | 作者: newmyth21 [newmyth21]
![]() |
登录 |
转载***** 使用一个单词文件,本程序只考虑单个单词的大小写变形和两个变形单词的组合,由此生成一个字典, 例如对于hello和unix两个单词的单词文件,本程序可生成: hello Hello HELLO unix Unix UNIX hellounix helloUnix helloUNIX Hellounix HelloUnix HelloUNIX HELLOunix HELLOUnix HELLOUNIX UNIXHELLO UNIXhello UNIXHello unixHELLO unixhello unixHello UnixHELLO Unixhello UnixHello 由此可见,我这种简单的方法能生成的口令字典也是很大的。如果你的口令能在这种字典中找到,那么 被别人破解也是几秒钟的事情! 单词文件 PWDICT.PWS 举例如下: root 2000 server sco unix hello 运行程序命令是: PWDICT.EXE < PWDICT.PWS > PWDICT.DIC 本程序使用了递归和输入、输出重定向。 PWDICT.C 源程序如下:(单词文件最多支持300个单词,每个单词最长20个字符) /* pwdict.c --- Generate passwd dict M.L.Y 2001.2 */ #include <stdio.h> #include <string.h> #include <ctype.h> #define MAX_STRING_LEN 20 #define MAX_PWS 300 char *upperstr(char *str) { int i, n; n = strlen((char *)str); for(i = 0; i < n; i++) str[i] = toupper(str[i]); return str; } char *lowerstr(char *str) { int i, n; n = strlen((char *)str); for(i = 0; i < n; i++) str[i] = tolower(str[i]); return str; } char *capstr(char *str) { str[0] = toupper(str[0]); return str; } int disp_pd(char *s1, char *s2) { int n1, n2; n1 = strlen(s1); n2 = strlen(s2); if(n1 == 0 && n2 == 0) return 0; if(n1 == 0 || n2 == 0) return printf("%s%s\n", s1, s2); printf("%s%s\n", s1, s2); printf("%s%s\n", s2, s1); return 1; } int gen_pd2s(char *s1, char *s2, int mode) { char ts1[MAX_STRING_LEN+1], ts2[MAX_STRING_LEN+1]; int k1 = 0, k2 = 0, n1, n2; n1 = strlen(s1); n2 = strlen(s2); if(n1 == 0 || n2 == 0) return 0; if(n1 > MAX_STRING_LEN || n2 > MAX_STRING_LEN) return 0; strcpy(ts1, s1); if(strcmp(s1, capstr(strcpy(ts1, s1))) == 0) k1 = 3; else if(strcmp(s1, upperstr(ts1)) == 0) k1 = 2; else if(strcmp(s1, lowerstr(ts1)) == 0) k1 = 1; strcpy(ts2, s2); if(strcmp(s2, capstr(strcpy(ts2, s2))) == 0) k2 = 3; else if(strcmp(s2, upperstr(ts2)) == 0) k2 = 2; else if(strcmp(s2, lowerstr(ts2)) == 0) k2 = 1; if(mode == 1) { printf("%s\n", s1); if(isalpha(ts1[0])) { if(k1 != 3) printf("%s\n", capstr(strcpy(ts1,s1))); if(k1 != 2) printf("%s\n", upperstr(ts1)); if(k1 != 1) printf("%s\n", lowerstr(ts1)); } printf("%s\n", s2); if(isalpha(ts2[0])) { if(k2 != 3) printf("%s\n", capstr(strcpy(ts2,s2))); if(k2 != 2) printf("%s\n", upperstr(ts2)); if(k2 != 1) printf("%s\n", lowerstr(ts2)); } if(!isalpha(ts1[0])) return gen_pd2s(s1, s2, 2); gen_pd2s(upperstr(ts1), s2, 2); gen_pd2s(lowerstr(ts1), s2, 2); if(k1 == 0 || k1 == 3) gen_pd2s(s1, s2, 2); if(k1 != 3) gen_pd2s(capstr(strcpy(ts1,s1)), s2, 2); } if(mode == 2) { if(!isalpha(ts2[0])) return disp_pd(s1, s2); disp_pd(s1, upperstr(ts2)); disp_pd(s1, lowerstr(ts2)); if(k2 == 0 || k2 == 3) disp_pd(s1, s2); if(k2 != 3) disp_pd(s1, capstr(strcpy(ts2, s2))); } return 0; } int main() { char ps[MAX_PWS][MAX_STRING_LEN+1]; int i, j, n; for(n = 0; n < MAX_PWS; n++) { ps[n][0] = '\0'; gets(ps[n]); if(strlen(ps[n]) == 0) break; } for(i = 0; i < n-1; i++) for(j = i+1; j < n; j++) gen_pd2s(ps[i], ps[j], 1); return 0; } /* End of file. */ |
地主 发表时间: 04-01-24 17:15 |
![]() | 回复: newmyth21 [newmyth21] ![]() |
登录 |
我只是转出来看看的,是不是好老,怎么没人啊![]() 可是好像是新的啊 ![]() |
B1层 发表时间: 04-01-24 17:57 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号