├── img1.png
├── .idea
├── vcs.xml
├── .gitignore
├── modules.xml
└── super-password-dict.iml
├── go.mod
├── go.sum
├── README.md
└── main.go
/img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/z-bool/super-password-dict/HEAD/img1.png
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
这里我们来看一下参数,这里我们看看图:
18 |

113 |
114 |
115 |
116 | 微信群有过期时间限制,如果有技术交流、BUG解决、环境安装问题都可以于公众号/QQ群获取微信群信息(本来上新机器人管理推送解密这些功能的,但是用的Golang的SDK被微信监控了要封号就没上,加群公众号询问看到我就回复)。
117 |
118 |
119 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "github.com/AlecAivazis/survey/v2"
6 | "os"
7 | "strings"
8 | )
9 |
10 | var WeakNum = []string{
11 | "1",
12 | "2",
13 | "12",
14 | "11",
15 | "22",
16 | "000",
17 | "0000",
18 | "000000",
19 | "123",
20 | "1234",
21 | "123456",
22 | "123123",
23 | "111",
24 | "1111",
25 | "111111",
26 | "888",
27 | "8888",
28 | "888888",
29 | "520",
30 | "1314",
31 | "1999",
32 | "2000",
33 | "2016",
34 | "2018",
35 | "2019",
36 | "2020",
37 | "2021",
38 | "2022",
39 | "2023",
40 | }
41 |
42 | var WeakString = []string{
43 | "abc",
44 | "Abc",
45 | "ABC",
46 | "Aa",
47 | "abcd",
48 | "Abcd",
49 | "admin",
50 | "Admin",
51 | "pass",
52 | "Pass",
53 | "passwd",
54 | "Passwd",
55 | "password",
56 | "Password",
57 | "admin",
58 | "Admin",
59 | "user",
60 | "test",
61 | "guest",
62 | "love",
63 | "super",
64 | }
65 |
66 | var weakPasswordWithoutChar = []string{}
67 | var weakPassword = []string{}
68 |
69 | type Answers struct {
70 | ChineseName string // 中文名
71 | HuaMing string // 花名小写
72 | Xing string // 姓全拼(首字母大写)
73 | TuoFenTailMing string // 名全拼(末尾字小写)
74 | TuoFenMing string // 名(驼峰)
75 | XingShouZiMu string // 姓首字母(代码获取)
76 | MingShouZiMu string //名首字母
77 | GongSiQuanChen string // 公司小写全称
78 | GongSiJianChen string // 公司中文简称
79 | GongSiDomain string // 公司域名
80 | }
81 |
82 | // the questions to ask
83 | var qs = []*survey.Question{
84 | {
85 | Name: "ChineseName",
86 | Prompt: &survey.Input{Message: "职员姓名中文全称,如:王小明(比较少见)"},
87 | },
88 | {
89 | Name: "HuaMing",
90 | Prompt: &survey.Input{Message: "公司花名,如:adai"},
91 | },
92 | {
93 | Name: "Xing",
94 | Prompt: &survey.Input{Message: "职员姓(首字母大写),如:Wang"},
95 | },
96 | {
97 | Name: "TuoFenMing",
98 | Prompt: &survey.Input{Message: "驼峰命名法的名,如:XiaoMing"},
99 | },
100 | {
101 | Name: "TuoFenTailMing",
102 | Prompt: &survey.Input{Message: "名首字母大写,如:Xiaoming"},
103 | },
104 | {
105 | Name: "MingShouZiMu",
106 | Prompt: &survey.Input{Message: "名首字母,如:xm"},
107 | },
108 | {
109 | Name: "GongSiQuanChen",
110 | Prompt: &survey.Input{Message: "公司名拼音,如qiangshengkeji/qiangshen(强盛科技)"},
111 | },
112 | {
113 | Name: "GongSiJianChen",
114 | Prompt: &survey.Input{Message: "公司名简拼,如qs(强盛科技)"},
115 | },
116 | {
117 | Name: "GongSiDomain",
118 | Prompt: &survey.Input{Message: "公司主域名,如baidu.com"},
119 | },
120 | }
121 |
122 | var result = []string{
123 | "user",
124 | "admin",
125 | "test",
126 | "guest",
127 | "AaBbCc",
128 | "Abc123!@#",
129 | "@bcd1234",
130 | "abc123!@#",
131 | "Abc123!@#",
132 | "#EDC4rfv",
133 | "abcABC123",
134 | "ABCabc123",
135 | "1qaz!@#$",
136 | "QAZwsx123",
137 | "Pa$$w0rd",
138 | "P@ssw0rd",
139 | "P@$$word",
140 | "P@$$word123",
141 | "!QAZ2wsx",
142 | "!QAZ3edc",
143 | "2wsx#EDC",
144 | "1!qaz2@wsx",
145 | "1q2w3e4r",
146 | "1234abcd",
147 | "1234qwer",
148 | "1qaz!QAZ",
149 | "1qaz2wsx",
150 | "1qaz@WSX",
151 | "1qaz@WSX#EDC",
152 | "!q2w3e4r",
153 | "1234QWER",
154 | "QWER!@#$",
155 | "P@ssw0rd",
156 | "1qaz@WSX#EDC",
157 | "p@ssw0rd",
158 | }
159 |
160 | // 写入文件
161 | func WriteWeakPassword(weakPassword string) {
162 | f, err := os.OpenFile("weakPassword.txt", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
163 | if err != nil {
164 | panic(err)
165 | }
166 | defer f.Close()
167 | data := []byte(weakPassword)
168 | _, err = f.Write(data)
169 | if err != nil {
170 | panic(err)
171 | }
172 | }
173 |
174 | // 拼接原始弱口令拼接
175 | func CompareWeakPassword() {
176 | // 1. 第1步把原数据传进去
177 | for _, num := range WeakNum {
178 | weakPasswordWithoutChar = append(weakPasswordWithoutChar, num)
179 | if len(num) >= 6 {
180 | result = append(result, num)
181 | }
182 | }
183 | for _, str := range WeakString {
184 | weakPasswordWithoutChar = append(weakPasswordWithoutChar, str)
185 | if len(str) >= 6 {
186 | result = append(result, str)
187 | }
188 | }
189 | // 2. 第2步拼接str+num
190 | for _, num := range WeakNum {
191 | for _, str := range WeakString {
192 | sumStr := str + num
193 | weakPasswordWithoutChar = append(weakPasswordWithoutChar, sumStr)
194 | result = append(result, str+"@"+num)
195 | result = append(result, str+"#"+num)
196 | }
197 | }
198 | // 3. 第3步将拼接完的不带字符的带上字符作为一个总的弱口令
199 | for _, str := range weakPasswordWithoutChar {
200 | weakPassword = append(weakPassword, str)
201 | }
202 | for _, str := range weakPasswordWithoutChar {
203 | weakPassword = append(weakPassword, str+"!")
204 | weakPassword = append(weakPassword, str+".")
205 | weakPassword = append(weakPassword, str+"#")
206 | }
207 | // 4. 第4步将弱口令结果导入到result
208 | for _, str := range weakPassword {
209 | if len(str) >= 6 {
210 | result = append(result, str)
211 | }
212 | }
213 | }
214 |
215 | // 姓名与域名/公司名/公司简拼的处理
216 | func usernameCompare(username string, domain string, gongSiMing string, gongSiJianPin string) {
217 | if username != "" {
218 | if domain != "" {
219 | if len(domain) >= 6 {
220 | result = append(result, domain)
221 | }
222 | // 1. 先加入用户名与域名的拼接
223 | result = append(result, domain+"@"+username)
224 | result = append(result, domain+"#"+username)
225 | result = append(result, domain+"#"+username+"!")
226 | result = append(result, domain+"@"+username+"!")
227 | result = append(result, domain+"@"+username+"#")
228 | result = append(result, username+"@"+domain)
229 | result = append(result, username+"#"+domain)
230 | result = append(result, username+"@"+domain+"!")
231 | result = append(result, username+"@"+domain+"#")
232 | result = append(result, username+"#"+domain+"!")
233 | // 2. 域名去掉后缀.com诸如此类的拼接结果
234 | domainStr := strings.Split(domain, ".")[0]
235 | result = append(result, domainStr+"@"+username)
236 | result = append(result, domainStr+"@"+username+"!")
237 | result = append(result, domainStr+"@"+username+".")
238 | result = append(result, domainStr+"@"+username+"#")
239 | result = append(result, domainStr+"#"+username)
240 | result = append(result, domainStr+"#"+username+"!")
241 | result = append(result, domainStr+"#"+username+".")
242 | result = append(result, username+"#"+domainStr)
243 | result = append(result, username+"#"+domainStr+"!")
244 | result = append(result, username+"#"+domainStr+".")
245 | result = append(result, username+"@"+domainStr)
246 | result = append(result, username+"@"+domainStr+"!")
247 | result = append(result, username+"@"+domainStr+".")
248 | result = append(result, username+"@"+domainStr+"#")
249 | for _, str := range WeakNum {
250 | result = append(result, domainStr+"@"+username+str)
251 | result = append(result, domainStr+"@"+username+str+"!")
252 | result = append(result, domainStr+"@"+username+str+".")
253 | result = append(result, domainStr+"@"+username+str+"#")
254 | result = append(result, domainStr+"#"+username+str)
255 | result = append(result, domainStr+"#"+username+str+"!")
256 | result = append(result, domainStr+"#"+username+str+".")
257 | result = append(result, username+"@"+domainStr+str)
258 | result = append(result, username+"@"+domainStr+str+"!")
259 | result = append(result, username+"@"+domainStr+str+".")
260 | result = append(result, username+"@"+domainStr+str+"#")
261 | result = append(result, username+"#"+domainStr+str)
262 | result = append(result, username+"#"+domainStr+str+"!")
263 | result = append(result, username+"#"+domainStr+str+".")
264 | }
265 | }
266 | // 公司名拼音
267 | if gongSiMing != "" {
268 | if len(gongSiMing) >= 6 {
269 | result = append(result, gongSiMing)
270 | }
271 | // 名字和公司名的拼接
272 | result = append(result, gongSiMing+"@"+username)
273 | result = append(result, gongSiMing+"#"+username)
274 | result = append(result, gongSiMing+"#"+username+"!")
275 | result = append(result, gongSiMing+"@"+username+"!")
276 | result = append(result, gongSiMing+"@"+username+"#")
277 | result = append(result, username+"@"+gongSiMing)
278 | result = append(result, username+"#"+gongSiMing)
279 | result = append(result, username+"@"+gongSiMing+"!")
280 | result = append(result, username+"@"+gongSiMing+"#")
281 | result = append(result, username+"#"+gongSiMing+"!")
282 | for _, str := range WeakNum {
283 | result = append(result, gongSiMing+"@"+username+str)
284 | result = append(result, gongSiMing+"@"+username+str+"!")
285 | result = append(result, gongSiMing+"@"+username+str+".")
286 | result = append(result, gongSiMing+"@"+username+str+"#")
287 | result = append(result, gongSiMing+"#"+username+str)
288 | result = append(result, gongSiMing+"#"+username+str+"!")
289 | result = append(result, gongSiMing+"#"+username+str+".")
290 | result = append(result, username+"@"+gongSiMing+str)
291 | result = append(result, username+"@"+gongSiMing+str+"!")
292 | result = append(result, username+"@"+gongSiMing+str+".")
293 | result = append(result, username+"@"+gongSiMing+str+"#")
294 | result = append(result, username+"#"+gongSiMing+str)
295 | result = append(result, username+"#"+gongSiMing+str+"!")
296 | result = append(result, username+"#"+gongSiMing+str+".")
297 | }
298 | }
299 | // 公司简称
300 | if gongSiJianPin != "" {
301 | if len(gongSiJianPin) >= 6 {
302 | result = append(result, gongSiJianPin)
303 | }
304 | // 名字和公司简拼的拼接
305 | result = append(result, gongSiJianPin+"@"+username)
306 | result = append(result, gongSiJianPin+"#"+username)
307 | result = append(result, gongSiJianPin+"#"+username+"!")
308 | result = append(result, gongSiJianPin+"@"+username+"!")
309 | result = append(result, gongSiJianPin+"@"+username+"#")
310 | result = append(result, gongSiJianPin+"@"+gongSiMing)
311 | result = append(result, gongSiJianPin+"#"+gongSiMing)
312 | result = append(result, gongSiJianPin+"@"+gongSiMing+"!")
313 | result = append(result, gongSiJianPin+"@"+gongSiMing+"#")
314 | result = append(result, gongSiJianPin+"#"+gongSiMing+"!")
315 | for _, str := range WeakNum {
316 | result = append(result, gongSiJianPin+"@"+username+str)
317 | result = append(result, gongSiJianPin+"@"+username+str+"!")
318 | result = append(result, gongSiJianPin+"@"+username+str+".")
319 | result = append(result, gongSiJianPin+"@"+username+str+"#")
320 | result = append(result, gongSiJianPin+"#"+username+str)
321 | result = append(result, gongSiJianPin+"#"+username+str+"!")
322 | result = append(result, gongSiJianPin+"#"+username+str+".")
323 | result = append(result, username+"@"+gongSiJianPin+str)
324 | result = append(result, username+"@"+gongSiJianPin+str+"!")
325 | result = append(result, username+"@"+gongSiJianPin+str+".")
326 | result = append(result, username+"@"+gongSiJianPin+str+"#")
327 | result = append(result, username+"#"+gongSiJianPin+str)
328 | result = append(result, username+"#"+gongSiJianPin+str+"!")
329 | result = append(result, username+"#"+gongSiJianPin+str+".")
330 | }
331 | }
332 | // 名字+数字
333 | for _, str := range WeakNum {
334 | result = append(result, username+str)
335 | result = append(result, username+str+".")
336 | result = append(result, username+str+"!")
337 | result = append(result, username+str+"#")
338 | }
339 | // 名字+@/#+弱口令
340 | for _, str := range weakPassword {
341 | if len(username) >= 6 {
342 | result = append(result, username)
343 | }
344 | result = append(result, username+"@"+str)
345 | result = append(result, username+"#"+str)
346 | }
347 | }
348 |
349 | }
350 |
351 | // 中文名字弱口令组合
352 | func ChineseCompare(username string) {
353 | for _, str := range weakPassword {
354 | result = append(result, username+str)
355 | result = append(result, username+"@"+str)
356 | result = append(result, username+"#"+str)
357 | }
358 | }
359 |
360 | // func main() {
361 | // CompareWeakPassword()
362 | // usernameCompare("zhangsan", "baidu.com", "baidu", "bd")
363 | // for _, str := range result {
364 | // WriteWeakPassword(str + "\r\n")
365 | // }
366 | // }
367 | func init() {
368 | fmt.Println(`
369 |
370 | ________ ___ ___ ________ _______ ________ ________ ___ ________ _________
371 | |\ ____\|\ \|\ \|\ __ \|\ ___ \ |\ __ \ |\ ___ \|\ \|\ ____\\___ ___\
372 | \ \ \___|\ \ \\\ \ \ \|\ \ \ __/|\ \ \|\ \ \ \ \_|\ \ \ \ \ \___\|___ \ \_|
373 | \ \_____ \ \ \\\ \ \ ____\ \ \_|/_\ \ _ _\ \ \ \ \\ \ \ \ \ \ \ \ \
374 | \|____|\ \ \ \\\ \ \ \___|\ \ \_|\ \ \ \\ \| \ \ \_\\ \ \ \ \ \____ \ \ \
375 | ____\_\ \ \_______\ \__\ \ \_______\ \__\\ _\ \ \_______\ \__\ \_______\ \ \__\
376 | |\_________\|_______|\|__| \|_______|\|__|\|__| \|_______|\|__|\|_______| \|__|
377 | \|_________|
378 |
379 | 欢迎使用阿呆超级字典生成器,关注公众号:阿呆攻防了解更多
380 | `)
381 | }
382 |
383 | func main() {
384 | // 结果写入到结构体
385 | answer := &Answers{}
386 | var usernameQuanPinXiaoXie string
387 | var usernameTuoFeng string
388 | var usernameTuoFengTailMing string
389 | var usernameXingQuanChenDaXieMingJianChenXiaoXie string
390 | var usernameXingQuanChenXiaoXieMingJianChenXiaoXie string
391 | var usernameXingJianPinDaXieMingQuanPinXiaoXie string
392 | var usernameXingJianPinXiaoXieMingQuanPinXiaoXie string
393 | var usernameJianPin string
394 |
395 | // 执行提问
396 | err := survey.Ask(qs, answer)
397 | if err != nil {
398 | fmt.Println(err.Error())
399 | return
400 | }
401 |
402 | // 中文弱口令
403 | if answer.ChineseName != "" {
404 | ChineseCompare(answer.ChineseName)
405 | }
406 | // 姓名全拼
407 | if answer.Xing != "" {
408 | answer.XingShouZiMu = answer.Xing[0:1] //姓缩写
409 | if answer.MingShouZiMu != "" {
410 | // 姓全拼+名首字母
411 | usernameXingQuanChenDaXieMingJianChenXiaoXie = answer.Xing + answer.MingShouZiMu
412 | usernameXingQuanChenXiaoXieMingJianChenXiaoXie = strings.ToLower(answer.Xing + answer.MingShouZiMu)
413 | // 姓名简拼
414 | usernameJianPin = strings.ToLower(answer.XingShouZiMu) + strings.ToLower(answer.MingShouZiMu)
415 | }
416 |
417 | if answer.TuoFenMing != "" {
418 | usernameQuanPinXiaoXie = strings.ToLower(answer.Xing) + strings.ToLower(answer.TuoFenMing)
419 | usernameTuoFeng = answer.Xing + answer.TuoFenMing
420 | // 姓简拼名全拼
421 | usernameXingJianPinDaXieMingQuanPinXiaoXie = strings.ToUpper(answer.XingShouZiMu) + strings.ToLower(answer.TuoFenMing)
422 | usernameXingJianPinXiaoXieMingQuanPinXiaoXie = strings.ToLower(answer.XingShouZiMu) + strings.ToLower(answer.TuoFenMing)
423 | }
424 | if answer.TuoFenTailMing != "" {
425 | usernameQuanPinXiaoXie = strings.ToLower(answer.Xing) + strings.ToLower(answer.TuoFenTailMing)
426 | usernameTuoFengTailMing = answer.Xing + answer.TuoFenTailMing
427 | // 姓简拼名全拼
428 | usernameXingJianPinDaXieMingQuanPinXiaoXie = strings.ToUpper(answer.XingShouZiMu) + strings.ToLower(answer.TuoFenTailMing)
429 | usernameXingJianPinXiaoXieMingQuanPinXiaoXie = strings.ToLower(answer.XingShouZiMu) + strings.ToLower(answer.TuoFenTailMing)
430 | }
431 | }
432 | CompareWeakPassword()
433 | if usernameQuanPinXiaoXie != "" {
434 | usernameCompare(usernameQuanPinXiaoXie, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
435 | }
436 | if usernameTuoFeng != "" {
437 | usernameCompare(usernameTuoFeng, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
438 | }
439 | if usernameTuoFengTailMing != "" {
440 | usernameCompare(usernameTuoFengTailMing, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
441 | }
442 | if usernameXingQuanChenDaXieMingJianChenXiaoXie != "" {
443 | usernameCompare(usernameXingQuanChenDaXieMingJianChenXiaoXie, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
444 | }
445 | if usernameXingQuanChenXiaoXieMingJianChenXiaoXie != "" {
446 | usernameCompare(usernameXingQuanChenXiaoXieMingJianChenXiaoXie, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
447 | }
448 | if usernameXingJianPinDaXieMingQuanPinXiaoXie != "" {
449 | usernameCompare(usernameXingJianPinDaXieMingQuanPinXiaoXie, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
450 | }
451 | if usernameXingJianPinXiaoXieMingQuanPinXiaoXie != "" {
452 | usernameCompare(usernameXingJianPinXiaoXieMingQuanPinXiaoXie, answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
453 | }
454 | if usernameJianPin != "" {
455 | usernameCompare(strings.ToLower(usernameJianPin), answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
456 | usernameCompare(strings.ToUpper(usernameJianPin), answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
457 | }
458 | if answer.HuaMing != "" {
459 | usernameCompare(strings.ToLower(answer.HuaMing), answer.GongSiDomain, answer.GongSiQuanChen, answer.GongSiJianChen)
460 | }
461 | if answer.GongSiDomain != "" {
462 | for _, str := range weakPassword {
463 | result = append(result, answer.GongSiDomain+str)
464 | result = append(result, answer.GongSiDomain+"@"+str)
465 | result = append(result, answer.GongSiDomain+"#"+str)
466 | }
467 | }
468 | if answer.GongSiQuanChen != "" {
469 | for _, str := range weakPassword {
470 | result = append(result, strings.ToLower(answer.GongSiQuanChen)+str)
471 | result = append(result, strings.ToLower(answer.GongSiQuanChen)+"@"+str)
472 | result = append(result, strings.ToLower(answer.GongSiQuanChen)+"#"+str)
473 | }
474 | }
475 | if answer.GongSiJianChen != "" {
476 | for _, str := range weakPassword {
477 | result = append(result, strings.ToLower(answer.GongSiJianChen)+str)
478 | result = append(result, strings.ToLower(answer.GongSiJianChen)+"@"+str)
479 | result = append(result, strings.ToLower(answer.GongSiJianChen)+"#"+str)
480 | result = append(result, strings.ToUpper(answer.GongSiJianChen)+str)
481 | result = append(result, strings.ToUpper(answer.GongSiJianChen)+"@"+str)
482 | result = append(result, strings.ToUpper(answer.GongSiJianChen)+"#"+str)
483 | }
484 | }
485 | for _, str := range result {
486 | WriteWeakPassword(str + "\r\n")
487 | }
488 | fmt.Println("字典生成完毕!!!")
489 |
490 | }
491 |
--------------------------------------------------------------------------------