├── m1 ├── app ├── m1 └── RP.py ├── m1.txt ├── backups ├── RedPasswd.zip └── RP.py ├── fool2.4.3 ├── instructionbook ├── RP-foolproof ├── home ├── RP-foolproof ├── RP-basics ├── RP-Dletter ├── RP-letter └── RP-notsign ├── RP README!!!.md ├── Instruction book is SIGNIFICANT !.md ├── RP-basics ├── README.md ├── RP-Dletter ├── RP-letter ├── RP-notsign └── RP.py /m1: -------------------------------------------------------------------------------- 1 | Abc 2 | 123 3 | def 4 | .1/a, 5 | -------------------------------------------------------------------------------- /app/m1: -------------------------------------------------------------------------------- 1 | Abc 2 | 123 3 | def 4 | .1/a, 5 | -------------------------------------------------------------------------------- /m1.txt: -------------------------------------------------------------------------------- 1 | abc 2 | 123 3 | a.1/\_+,@#$%^&*& 4 | ./, 5 | -------------------------------------------------------------------------------- /backups/RedPasswd.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nengyi1226/RedTeamPasswd/HEAD/backups/RedPasswd.zip -------------------------------------------------------------------------------- /fool2.4.3: -------------------------------------------------------------------------------- 1 | abc 2 | 123 3 | .1/a, 4 | abc123 5 | abc.1/a, 6 | 123abc 7 | 123.1/a, 8 | .1/a,abc 9 | .1/a,123 10 | abc123.1/a, 11 | abc.1/a,123 12 | 123abc.1/a, 13 | 123.1/a,abc 14 | .1/a,abc123 15 | .1/a,123abc 16 | -------------------------------------------------------------------------------- /instructionbook: -------------------------------------------------------------------------------- 1 | print("""选项解释: 2 | 1.基础模块:对生成的字典不做干预,可以限制最大生成数量 3 | 2.万全模块:完全无限制,可能生成数据量庞大的字典,非必要请优先考虑其他模块 4 | 3.非符模块:如果生成的数据首位是符号,那么此条数据将被清除 5 | 4.字母模块:首位必须是字母,否则数据不会被保存到输出的字典 6 | 5.大写模块:首位必须是大写字母,否则数据不会被保存到输出的字典 7 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 8 | Options explained: 9 | 1. Basic module: Do not interfere with the generated dictionary, can limit the maximum number of generated 10 | 2. Universal module: Completely unlimited, may generate a large amount of data dictionary, non-necessary please give priority to other modules 11 | 3. Non-character module: If the first part of the generated data is a symbol, then this data will be cleared 12 | 4. Letter module: the first must be a letter, otherwise the data will not be saved to the output dictionary 13 | 5. Uppercase module: The first letter must be uppercase, otherwise the data will not be saved to the output dictionary 14 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences.""") -------------------------------------------------------------------------------- /RP-foolproof: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | 4 | def generate_passwords(chunks): 5 | # 对每一个长度,生成所有可能的排列 6 | for length in range(1, len(chunks) + 1): 7 | permutations = itertools.permutations(chunks, length) 8 | 9 | 10 | for perm in permutations: 11 | yield ''.join(perm) 12 | 13 | def get_chunks_from_file(filename): 14 | 15 | with open(filename, 'r') as f: 16 | chunks = [line.strip() for line in f.readlines()] 17 | return chunks 18 | 19 | def write_passwords_to_file(password_generator, filename): 20 | 21 | with open(filename, 'w') as f: 22 | for password in password_generator: 23 | f.write(password + '\n') 24 | 25 | def main(): 26 | 27 | chunks_file = input("源自定义特征字典名:") 28 | output_file = input("为输出字典命名,可以在名前指定路径:") 29 | 30 | 31 | chunks_file_path = os.path.join(os.getcwd(), chunks_file) 32 | output_file_path = os.path.join(os.getcwd(), output_file) 33 | 34 | 35 | chunks = get_chunks_from_file(chunks_file_path) 36 | 37 | 38 | password_generator = generate_passwords(chunks) 39 | 40 | 41 | write_passwords_to_file(password_generator, output_file_path) 42 | 43 | print(f"特征字典输出位置: {output_file_path}。") 44 | 45 | if __name__ == "__main__": 46 | main() 47 | -------------------------------------------------------------------------------- /home/RP-foolproof: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | 4 | def generate_passwords(chunks): 5 | # 对每一个长度,生成所有可能的排列 6 | for length in range(1, len(chunks) + 1): 7 | permutations = itertools.permutations(chunks, length) 8 | 9 | 10 | for perm in permutations: 11 | yield ''.join(perm) 12 | 13 | def get_chunks_from_file(filename): 14 | 15 | with open(filename, 'r') as f: 16 | chunks = [line.strip() for line in f.readlines()] 17 | return chunks 18 | 19 | def write_passwords_to_file(password_generator, filename): 20 | 21 | with open(filename, 'w') as f: 22 | for password in password_generator: 23 | f.write(password + '\n') 24 | 25 | def main(): 26 | 27 | chunks_file = input("源自定义特征字典名:") 28 | output_file = input("为输出字典命名,可以在名前指定路径:") 29 | 30 | 31 | chunks_file_path = os.path.join(os.getcwd(), chunks_file) 32 | output_file_path = os.path.join(os.getcwd(), output_file) 33 | 34 | 35 | chunks = get_chunks_from_file(chunks_file_path) 36 | 37 | 38 | password_generator = generate_passwords(chunks) 39 | 40 | 41 | write_passwords_to_file(password_generator, output_file_path) 42 | 43 | print(f"特征字典输出位置: {output_file_path}。") 44 | 45 | if __name__ == "__main__": 46 | main() 47 | -------------------------------------------------------------------------------- /RP README!!!.md: -------------------------------------------------------------------------------- 1 | RP README!!! 2 | 3 | 一款定向暴力破解工具,针对信息收集后,用目标的特征信息进行专用字典生成,让字典里的每一条数据都有包含目标特征的数据. 4 | 5 | ​ 使用本工具需要一定的信息收集能力,例如,针对个体的特定日期,号码,名缩写等等,针对指定团体的名称缩写,特定日期,口号等,将此数据做成一个原始字典,用本程序对其进行指定方式组合,以高效验证可能的数据. 6 | 7 | 选项解释: 8 | 9 | 1.基础模块:对生成的字典不做干预,可以限制最大生成数量 10 | 11 | 2.万全模块:完全无限制,可能生成数据量庞大的字典,非必要请优先考虑其他模块 12 | 13 | 3.非符模块:如果生成的数据首位是符号,那么此条数据将被清除 14 | 15 | 4.字母模块:首位必须是字母,否则数据不会被保存到输出的字典 16 | 17 | 5.大写模块:首位必须是大写字母,否则数据不会被保存到输出的字典 18 | 19 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 20 | 21 | ​ Author: Stupid FQ 22 | 23 | ​ A directed brute force cracking tool, after collecting information, generates a special dictionary with the characteristic information of the target, so that every piece of data in the dictionary contains the data of the target characteristics. 24 | 25 | The use of this tool requires certain information collection capabilities, such as specific date, number, name abbreviation, etc., for an individual, name abbreviation, specific date, slogan, etc., to make this data into a primitive dictionary, and combine it in a specified way with this program to efficiently verify possible data. 26 | 27 | Options explained: 28 | 29 | 1. Basic module: Do not interfere with the generated dictionary, can limit the maximum number of generated 30 | 31 | 2. Universal module: Completely unlimited, may generate a large amount of data dictionary, non-necessary please give priority to other modules 32 | 33 | 3. Non-character module: If the first part of the generated data is a symbol, then this data will be cleared 34 | 35 | 4. Letter module: the first must be a letter, otherwise the data will not be saved to the output dictionary 36 | 37 | 5. Uppercase module: The first letter must be uppercase, otherwise the data will not be saved to the output dictionary 38 | 39 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 40 | 41 | ​ Author: Stupid FQ -------------------------------------------------------------------------------- /Instruction book is SIGNIFICANT !.md: -------------------------------------------------------------------------------- 1 | Instruction book is SIGNIFICANT ! 2 | 3 | RP README!!! 4 | 5 | 一款定向暴力破解工具,针对信息收集后,用目标的特征信息进行专用字典生成,让字典里的每一条数据都有包含目标特征的数据. 6 | 7 | ​ 使用本工具需要一定的信息收集能力,例如,针对个体的特定日期,号码,名缩写等等,针对指定团体的名称缩写,特定日期,口号等,将此数据做成一个原始字典,用本程序对其进行指定方式组合,以高效验证可能的数据. 8 | 9 | 选项解释: 10 | 11 | 1.基础模块:对生成的字典不做干预,可以限制最大生成数量 12 | 13 | 2.万全模块:完全无限制,可能生成数据量庞大的字典,非必要请优先考虑其他模块 14 | 15 | 3.非符模块:如果生成的数据首位是符号,那么此条数据将被清除 16 | 17 | 4.字母模块:首位必须是字母,否则数据不会被保存到输出的字典 18 | 19 | 5.大写模块:首位必须是大写字母,否则数据不会被保存到输出的字典 20 | 21 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 22 | 23 | ​ Author: Stupid FQ 24 | 25 | ​ A directed brute force cracking tool, after collecting information, generates a special dictionary with the characteristic information of the target, so that every piece of data in the dictionary contains the data of the target characteristics. 26 | 27 | The use of this tool requires certain information collection capabilities, such as specific date, number, name abbreviation, etc., for an individual, name abbreviation, specific date, slogan, etc., to make this data into a primitive dictionary, and combine it in a specified way with this program to efficiently verify possible data. 28 | 29 | Options explained: 30 | 31 | 1. Basic module: Do not interfere with the generated dictionary, can limit the maximum number of generated 32 | 33 | 2. Universal module: Completely unlimited, may generate a large amount of data dictionary, non-necessary please give priority to other modules 34 | 35 | 3. Non-character module: If the first part of the generated data is a symbol, then this data will be cleared 36 | 37 | 4. Letter module: the first must be a letter, otherwise the data will not be saved to the output dictionary 38 | 39 | 5. Uppercase module: The first letter must be uppercase, otherwise the data will not be saved to the output dictionary 40 | 41 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 42 | 43 | ​ Author: Stupid FQ -------------------------------------------------------------------------------- /RP-basics: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | for length in range(1, len(chunks) + 1): 9 | permutations = itertools.permutations(chunks, length) 10 | for perm in permutations: 11 | yield ''.join(perm) 12 | count += 1 13 | if max_count is not None and count >= max_count: 14 | return 15 | 16 | def get_chunks_from_file(filename): 17 | with open(filename, 'r') as f: 18 | chunks = [line.strip() for line in f.readlines()] 19 | return chunks 20 | 21 | def write_passwords_to_file(password_generator, filename, password_count=None): 22 | if password_count is None: 23 | with open(filename, 'w') as f: 24 | for password in password_generator: 25 | f.write(password + '\n') 26 | else: 27 | with open(filename, 'w') as f: 28 | for password in tqdm.tqdm(password_generator, total=password_count): 29 | f.write(password + '\n') 30 | 31 | def validate_file(filename): 32 | while not os.path.isfile(filename): 33 | print(f"文件 {filename} 不存在。") 34 | filename = input("请重新输入文件名:") 35 | return filename 36 | 37 | def main(): 38 | chunks_file = input("源自定义特征字典名:") 39 | chunks_file = validate_file(chunks_file) 40 | chunks = get_chunks_from_file(chunks_file) 41 | 42 | max_count = input("最大生成数量(若不设限,请直接按 Enter):") 43 | if max_count == '': 44 | max_count = None 45 | else: 46 | max_count = int(max_count) 47 | 48 | output_file = input("为输出字典命名,支持在名前指定路径:") 49 | 50 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 51 | if max_count is not None: 52 | password_count = min(password_count, max_count) 53 | 54 | password_generator = generate_passwords(chunks, max_count) 55 | write_passwords_to_file(password_generator, output_file, password_count) 56 | 57 | print(f"特征字典输出位置: {output_file}。") 58 | 59 | if __name__ == "__main__": 60 | main() 61 | -------------------------------------------------------------------------------- /home/RP-basics: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | for length in range(1, len(chunks) + 1): 9 | permutations = itertools.permutations(chunks, length) 10 | for perm in permutations: 11 | yield ''.join(perm) 12 | count += 1 13 | if max_count is not None and count >= max_count: 14 | return 15 | 16 | def get_chunks_from_file(filename): 17 | with open(filename, 'r') as f: 18 | chunks = [line.strip() for line in f.readlines()] 19 | return chunks 20 | 21 | def write_passwords_to_file(password_generator, filename, password_count=None): 22 | if password_count is None: 23 | with open(filename, 'w') as f: 24 | for password in password_generator: 25 | f.write(password + '\n') 26 | else: 27 | with open(filename, 'w') as f: 28 | for password in tqdm.tqdm(password_generator, total=password_count): 29 | f.write(password + '\n') 30 | 31 | def validate_file(filename): 32 | while not os.path.isfile(filename): 33 | print(f"文件 {filename} 不存在。") 34 | filename = input("请重新输入文件名:") 35 | return filename 36 | 37 | def main(): 38 | chunks_file = input("源自定义特征字典名:") 39 | chunks_file = validate_file(chunks_file) 40 | chunks = get_chunks_from_file(chunks_file) 41 | 42 | max_count = input("最大生成数量(若不设限,请直接按 Enter):") 43 | if max_count == '': 44 | max_count = None 45 | else: 46 | max_count = int(max_count) 47 | 48 | output_file = input("为输出字典命名,支持在名前指定路径:") 49 | 50 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 51 | if max_count is not None: 52 | password_count = min(password_count, max_count) 53 | 54 | password_generator = generate_passwords(chunks, max_count) 55 | write_passwords_to_file(password_generator, output_file, password_count) 56 | 57 | print(f"特征字典输出位置: {output_file}。") 58 | 59 | if __name__ == "__main__": 60 | main() 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Redpasswd 2 | ​ A directed brute force cracking tool, after collecting information, generates a special dictionary with the characteristic information of the target, so that every piece of data in the dictionary contains the data of the target characteristics. 3 | 4 | The use of this tool requires certain information collection capabilities, such as specific date, number, name abbreviation, etc., for an individual, name abbreviation, specific date, slogan, etc., to make this data into a primitive dictionary, and combine it in a specified way with this program to efficiently verify possible data. 5 | 6 | "m1" and "m1.txt" are the source signature databases prepared by the author. Please rewrite the source dictionaries as required 7 | 8 | Options explained: 9 | 10 | 1. Basic module: Do not interfere with the generated dictionary, can limit the maximum number of generated 11 | 12 | 2. Universal module: Completely unlimited, may generate a large amount of data dictionary, non-necessary please give priority to other modules 13 | 14 | 3. Non-character module: If the first part of the generated data is a symbol, then this data will be cleared 15 | 16 | 4. Letter module: the first must be a letter, otherwise the data will not be saved to the output dictionary 17 | 18 | 5. Uppercase module: The first letter must be uppercase, otherwise the data will not be saved to the output dictionary 19 | 20 | This program is only for learning, communication, and testing within the legal scope, and shall not be used for illegal purposes, otherwise all responsibilities shall be borne by the user 21 | 22 | ![屏幕截图 2023-07-23 194750](https://github.com/nengyi1226/Redpasswd/assets/124417045/d3ff3a8c-083b-40d0-a052-f1909b5e8868) 23 | ![屏幕截图 2023-07-23 195055](https://github.com/nengyi1226/Redpasswd/assets/124417045/e804528b-05b9-4cff-9632-8a5d965b6a58) 24 | ![屏幕截图 2023-07-23 195014](https://github.com/nengyi1226/RedTeamPasswd/assets/124417045/0776db1a-ce61-4472-9e99-f78afb1e8f48) 25 | ##Module 4 Output example: 26 | ![屏幕截图 2023-07-23 195203](https://github.com/nengyi1226/Redpasswd/assets/124417045/0f5fe4a4-b41e-401a-ae71-ed94707b3e42) 27 | Author: Stupid FQ 28 | 29 | -------------------------------------------------------------------------------- /RP-Dletter: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | for length in range(1, len(chunks) + 1): 9 | permutations = itertools.permutations(chunks, length) 10 | for perm in permutations: 11 | password = ''.join(perm) 12 | if not password[0].isupper(): 13 | continue 14 | yield password 15 | count += 1 16 | if max_count is not None and count >= max_count: 17 | return 18 | 19 | def get_chunks_from_file(filename): 20 | with open(filename, 'r') as f: 21 | chunks = [line.strip() for line in f.readlines()] 22 | return chunks 23 | 24 | def write_passwords_to_file(password_generator, filename, password_count=None): 25 | if password_count is None: 26 | with open(filename, 'w') as f: 27 | for password in password_generator: 28 | f.write(password + '\n') 29 | else: 30 | with open(filename, 'w') as f: 31 | for password in tqdm.tqdm(password_generator, total=password_count): 32 | f.write(password + '\n') 33 | 34 | def validate_file(filename): 35 | while not os.path.isfile(filename): 36 | print(f"文件 {filename} 不存在。") 37 | filename = input("请重新输入文件名:") 38 | return filename 39 | 40 | def main(): 41 | chunks_file = input("源自定义特征字典名:") 42 | chunks_file = validate_file(chunks_file) 43 | chunks = get_chunks_from_file(chunks_file) 44 | 45 | max_count = input("限制最大生成数量(若不设限,请直接按 Enter):") 46 | if max_count == '': 47 | max_count = None 48 | else: 49 | max_count = int(max_count) 50 | 51 | output_file = input("为输出字典命名,支持在名前指定路径:") 52 | 53 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 54 | if max_count is not None: 55 | password_count = min(password_count, max_count) 56 | 57 | password_generator = generate_passwords(chunks, max_count) 58 | write_passwords_to_file(password_generator, output_file, password_count) 59 | 60 | print(f"特征字典输出位置 {output_file}。") 61 | 62 | if __name__ == "__main__": 63 | main() 64 | -------------------------------------------------------------------------------- /home/RP-Dletter: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | for length in range(1, len(chunks) + 1): 9 | permutations = itertools.permutations(chunks, length) 10 | for perm in permutations: 11 | password = ''.join(perm) 12 | if not password[0].isupper(): 13 | continue 14 | yield password 15 | count += 1 16 | if max_count is not None and count >= max_count: 17 | return 18 | 19 | def get_chunks_from_file(filename): 20 | with open(filename, 'r') as f: 21 | chunks = [line.strip() for line in f.readlines()] 22 | return chunks 23 | 24 | def write_passwords_to_file(password_generator, filename, password_count=None): 25 | if password_count is None: 26 | with open(filename, 'w') as f: 27 | for password in password_generator: 28 | f.write(password + '\n') 29 | else: 30 | with open(filename, 'w') as f: 31 | for password in tqdm.tqdm(password_generator, total=password_count): 32 | f.write(password + '\n') 33 | 34 | def validate_file(filename): 35 | while not os.path.isfile(filename): 36 | print(f"文件 {filename} 不存在。") 37 | filename = input("请重新输入文件名:") 38 | return filename 39 | 40 | def main(): 41 | chunks_file = input("源自定义特征字典名:") 42 | chunks_file = validate_file(chunks_file) 43 | chunks = get_chunks_from_file(chunks_file) 44 | 45 | max_count = input("限制最大生成数量(若不设限,请直接按 Enter):") 46 | if max_count == '': 47 | max_count = None 48 | else: 49 | max_count = int(max_count) 50 | 51 | output_file = input("为输出字典命名,支持在名前指定路径:") 52 | 53 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 54 | if max_count is not None: 55 | password_count = min(password_count, max_count) 56 | 57 | password_generator = generate_passwords(chunks, max_count) 58 | write_passwords_to_file(password_generator, output_file, password_count) 59 | 60 | print(f"特征字典输出位置 {output_file}。") 61 | 62 | if __name__ == "__main__": 63 | main() 64 | -------------------------------------------------------------------------------- /RP-letter: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | for length in range(1, len(chunks) + 1): 9 | permutations = itertools.permutations(chunks, length) 10 | for perm in permutations: 11 | password = ''.join(perm) 12 | 13 | if not password[0].isalpha(): 14 | continue 15 | yield password 16 | count += 1 17 | if max_count is not None and count >= max_count: 18 | return 19 | 20 | def get_chunks_from_file(filename): 21 | with open(filename, 'r') as f: 22 | chunks = [line.strip() for line in f.readlines()] 23 | return chunks 24 | 25 | def write_passwords_to_file(password_generator, filename, password_count=None): 26 | if password_count is None: 27 | with open(filename, 'w') as f: 28 | for password in password_generator: 29 | f.write(password + '\n') 30 | else: 31 | with open(filename, 'w') as f: 32 | for password in tqdm.tqdm(password_generator, total=password_count): 33 | f.write(password + '\n') 34 | 35 | def validate_file(filename): 36 | while not os.path.isfile(filename): 37 | print(f"文件 {filename} 不存在。") 38 | filename = input("请重新输入文件名:") 39 | return filename 40 | 41 | def main(): 42 | chunks_file = input("源自定义特征字典名:") 43 | chunks_file = validate_file(chunks_file) 44 | chunks = get_chunks_from_file(chunks_file) 45 | 46 | max_count = input("限制最大生成数量(若不设限,请直接按 Enter):") 47 | if max_count == '': 48 | max_count = None 49 | else: 50 | max_count = int(max_count) 51 | 52 | output_file = input("为输出字典命名,支持在名前指定路径:") 53 | 54 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 55 | if max_count is not None: 56 | password_count = min(password_count, max_count) 57 | 58 | password_generator = generate_passwords(chunks, max_count) 59 | write_passwords_to_file(password_generator, output_file, password_count) 60 | 61 | print(f"特征字典输出位置: {output_file}。") 62 | 63 | if __name__ == "__main__": 64 | main() 65 | -------------------------------------------------------------------------------- /home/RP-letter: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | for length in range(1, len(chunks) + 1): 9 | permutations = itertools.permutations(chunks, length) 10 | for perm in permutations: 11 | password = ''.join(perm) 12 | 13 | if not password[0].isalpha(): 14 | continue 15 | yield password 16 | count += 1 17 | if max_count is not None and count >= max_count: 18 | return 19 | 20 | def get_chunks_from_file(filename): 21 | with open(filename, 'r') as f: 22 | chunks = [line.strip() for line in f.readlines()] 23 | return chunks 24 | 25 | def write_passwords_to_file(password_generator, filename, password_count=None): 26 | if password_count is None: 27 | with open(filename, 'w') as f: 28 | for password in password_generator: 29 | f.write(password + '\n') 30 | else: 31 | with open(filename, 'w') as f: 32 | for password in tqdm.tqdm(password_generator, total=password_count): 33 | f.write(password + '\n') 34 | 35 | def validate_file(filename): 36 | while not os.path.isfile(filename): 37 | print(f"文件 {filename} 不存在。") 38 | filename = input("请重新输入文件名:") 39 | return filename 40 | 41 | def main(): 42 | chunks_file = input("源自定义特征字典名:") 43 | chunks_file = validate_file(chunks_file) 44 | chunks = get_chunks_from_file(chunks_file) 45 | 46 | max_count = input("限制最大生成数量(若不设限,请直接按 Enter):") 47 | if max_count == '': 48 | max_count = None 49 | else: 50 | max_count = int(max_count) 51 | 52 | output_file = input("为输出字典命名,支持在名前指定路径:") 53 | 54 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 55 | if max_count is not None: 56 | password_count = min(password_count, max_count) 57 | 58 | password_generator = generate_passwords(chunks, max_count) 59 | write_passwords_to_file(password_generator, output_file, password_count) 60 | 61 | print(f"特征字典输出位置: {output_file}。") 62 | 63 | if __name__ == "__main__": 64 | main() 65 | -------------------------------------------------------------------------------- /RP-notsign: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | symbols = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" 9 | for length in range(1, len(chunks) + 1): 10 | permutations = itertools.permutations(chunks, length) 11 | for perm in permutations: 12 | password = ''.join(perm) 13 | if password[0] in symbols: 14 | continue 15 | yield password 16 | count += 1 17 | if max_count is not None and count >= max_count: 18 | return 19 | 20 | def get_chunks_from_file(filename): 21 | with open(filename, 'r') as f: 22 | chunks = [line.strip() for line in f.readlines()] 23 | return chunks 24 | 25 | def write_passwords_to_file(password_generator, filename, password_count=None): 26 | if password_count is None: 27 | with open(filename, 'w') as f: 28 | for password in password_generator: 29 | f.write(password + '\n') 30 | else: 31 | with open(filename, 'w') as f: 32 | for password in tqdm.tqdm(password_generator, total=password_count): 33 | f.write(password + '\n') 34 | 35 | def validate_file(filename): 36 | while not os.path.isfile(filename): 37 | print(f"文件 {filename} 不存在。") 38 | filename = input("请重新输入文件名:") 39 | return filename 40 | 41 | def main(): 42 | chunks_file = input("源自定义特征字典名:") 43 | chunks_file = validate_file(chunks_file) 44 | chunks = get_chunks_from_file(chunks_file) 45 | 46 | max_count = input("限制最大生成数量(若不设限,请直接按 Enter):") 47 | if max_count == '': 48 | max_count = None 49 | else: 50 | max_count = int(max_count) 51 | 52 | output_file = input("为输出字典命名,支持在名前指定路径:") 53 | 54 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 55 | if max_count is not None: 56 | password_count = min(password_count, max_count) 57 | 58 | password_generator = generate_passwords(chunks, max_count) 59 | write_passwords_to_file(password_generator, output_file, password_count) 60 | 61 | print(f"特征字典输出位置 {output_file}。") 62 | 63 | if __name__ == "__main__": 64 | main() 65 | -------------------------------------------------------------------------------- /home/RP-notsign: -------------------------------------------------------------------------------- 1 | import itertools 2 | import os 3 | import string 4 | import tqdm 5 | 6 | def generate_passwords(chunks, max_count=None): 7 | count = 0 8 | symbols = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" 9 | for length in range(1, len(chunks) + 1): 10 | permutations = itertools.permutations(chunks, length) 11 | for perm in permutations: 12 | password = ''.join(perm) 13 | if password[0] in symbols: 14 | continue 15 | yield password 16 | count += 1 17 | if max_count is not None and count >= max_count: 18 | return 19 | 20 | def get_chunks_from_file(filename): 21 | with open(filename, 'r') as f: 22 | chunks = [line.strip() for line in f.readlines()] 23 | return chunks 24 | 25 | def write_passwords_to_file(password_generator, filename, password_count=None): 26 | if password_count is None: 27 | with open(filename, 'w') as f: 28 | for password in password_generator: 29 | f.write(password + '\n') 30 | else: 31 | with open(filename, 'w') as f: 32 | for password in tqdm.tqdm(password_generator, total=password_count): 33 | f.write(password + '\n') 34 | 35 | def validate_file(filename): 36 | while not os.path.isfile(filename): 37 | print(f"文件 {filename} 不存在。") 38 | filename = input("请重新输入文件名:") 39 | return filename 40 | 41 | def main(): 42 | chunks_file = input("源自定义特征字典名:") 43 | chunks_file = validate_file(chunks_file) 44 | chunks = get_chunks_from_file(chunks_file) 45 | 46 | max_count = input("限制最大生成数量(若不设限,请直接按 Enter):") 47 | if max_count == '': 48 | max_count = None 49 | else: 50 | max_count = int(max_count) 51 | 52 | output_file = input("为输出字典命名,支持在名前指定路径:") 53 | 54 | password_count = sum(len(chunks)**i for i in range(1, len(chunks) + 1)) 55 | if max_count is not None: 56 | password_count = min(password_count, max_count) 57 | 58 | password_generator = generate_passwords(chunks, max_count) 59 | write_passwords_to_file(password_generator, output_file, password_count) 60 | 61 | print(f"特征字典输出位置 {output_file}。") 62 | 63 | if __name__ == "__main__": 64 | main() 65 | -------------------------------------------------------------------------------- /RP.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import random 4 | 5 | def display_logo(): 6 | logo1 = """ 7 | .------..------..------..------..------..------..------..------. 8 | |R.--. ||P.--. ||-.--. ||F.--. ||Q.--. ||3.--. ||..--. ||0.--. | 9 | | :(): || :/\: || (\/) || :(): || (\/) || :(): || :(): || :/\: | 10 | | ()() || (__) || :\/: || ()() || :\/: || ()() || ()() || :\/: | 11 | | '--'R|| '--'P|| '--'-|| '--'F|| '--'Q|| '--'3|| '--'.|| '--'0| 12 | `------'`------'`------'`------'`------'`------'`------'`------' 13 | 14 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 15 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 16 | """ 17 | 18 | logo2 = """ 19 | __ ___ ___ ____ _____ ___ 20 | /__\ / _ \ / __\/___ \___ / / _ \ 21 | / \// / /_)/____ / _\ // / / |_ \| | | | 22 | / _ \/ ___/_____/ / / \_/ / ___) | |_| | 23 | \/ \_/\/ \/ \___,_\|____(_)___/ 24 | 25 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 26 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 27 | """ 28 | 29 | logos = [logo1, logo2] 30 | print(random.choice(logos)) 31 | 32 | display_logo() 33 | 34 | 35 | try: 36 | import _bootlocale 37 | except ImportError: 38 | pass 39 | 40 | def main(): 41 | print("请选择:") 42 | print("1: RPbasics") 43 | print("2: RP-foolproof") 44 | print("3: RP-notsign") 45 | print("4: RP-letter") 46 | print("5: RP-Dletter") 47 | print("6: help") 48 | current_path = os.path.dirname(os.path.realpath(__file__)) 49 | 50 | choice = input("直接输入序号1~6:") 51 | 52 | if choice == '1': 53 | subprocess.run(["python3", os.path.join(current_path, "RP-basics")]) 54 | elif choice == '2': 55 | subprocess.run(["python3", os.path.join(current_path, "RP-foolproof")]) 56 | elif choice == '3': 57 | subprocess.run(["python3", os.path.join(current_path, "RP-notsign")]) 58 | elif choice == '4': 59 | subprocess.run(["python3", os.path.join(current_path, "RP-letter")]) 60 | elif choice == '5': 61 | subprocess.run(["python3", os.path.join(current_path, "RP-Dletter")]) 62 | elif choice == '6': 63 | subprocess.run(["python3", os.path.join(current_path, "instructionbook")]) 64 | else: 65 | print("无效的选择,请重新运行程序并输入有效的选择。") 66 | 67 | if __name__ == "__main__": 68 | main() 69 | -------------------------------------------------------------------------------- /app/RP.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import random 4 | 5 | def display_logo(): 6 | logo1 = """ 7 | .------..------..------..------..------..------..------..------. 8 | |R.--. ||P.--. ||-.--. ||F.--. ||Q.--. ||3.--. ||..--. ||0.--. | 9 | | :(): || :/\: || (\/) || :(): || (\/) || :(): || :(): || :/\: | 10 | | ()() || (__) || :\/: || ()() || :\/: || ()() || ()() || :\/: | 11 | | '--'R|| '--'P|| '--'-|| '--'F|| '--'Q|| '--'3|| '--'.|| '--'0| 12 | `------'`------'`------'`------'`------'`------'`------'`------' 13 | 14 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 15 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 16 | """ 17 | 18 | logo2 = """ 19 | __ ___ ___ ____ _____ ___ 20 | /__\ / _ \ / __\/___ \___ / / _ \ 21 | / \// / /_)/____ / _\ // / / |_ \| | | | 22 | / _ \/ ___/_____/ / / \_/ / ___) | |_| | 23 | \/ \_/\/ \/ \___,_\|____(_)___/ 24 | 25 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 26 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 27 | """ 28 | 29 | logos = [logo1, logo2] 30 | print(random.choice(logos)) 31 | 32 | display_logo() 33 | 34 | 35 | try: 36 | import _bootlocale 37 | except ImportError: 38 | pass 39 | 40 | def main(): 41 | print("请选择:") 42 | print("1: RPbasics") 43 | print("2: RP-foolproof") 44 | print("3: RP-notsign") 45 | print("4: RP-letter") 46 | print("5: RP-Dletter") 47 | print("6: help") 48 | current_path = os.path.dirname(os.path.realpath(__file__)) 49 | 50 | choice = input("请输入你的选择1~6:") 51 | 52 | if choice == '1': 53 | subprocess.run(["python3", os.path.join(current_path, "RP-basics")]) 54 | elif choice == '2': 55 | subprocess.run(["python3", os.path.join(current_path, "RP-foolproof")]) 56 | elif choice == '3': 57 | subprocess.run(["python3", os.path.join(current_path, "RP-notsign")]) 58 | elif choice == '4': 59 | subprocess.run(["python3", os.path.join(current_path, "RP-letter")]) 60 | elif choice == '5': 61 | subprocess.run(["python3", os.path.join(current_path, "RP-Dletter")]) 62 | elif choice == '6': 63 | subprocess.run(["python3", os.path.join(current_path, "instructionbook")]) 64 | else: 65 | print("无效的选择,请重新运行程序并输入有效的选择。") 66 | 67 | if __name__ == "__main__": 68 | main() 69 | -------------------------------------------------------------------------------- /backups/RP.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | import random 4 | 5 | def display_logo(): 6 | logo1 = """ 7 | .------..------..------..------..------..------..------..------. 8 | |R.--. ||P.--. ||-.--. ||F.--. ||Q.--. ||3.--. ||..--. ||0.--. | 9 | | :(): || :/\: || (\/) || :(): || (\/) || :(): || :(): || :/\: | 10 | | ()() || (__) || :\/: || ()() || :\/: || ()() || ()() || :\/: | 11 | | '--'R|| '--'P|| '--'-|| '--'F|| '--'Q|| '--'3|| '--'.|| '--'0| 12 | `------'`------'`------'`------'`------'`------'`------'`------' 13 | 14 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 15 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 16 | """ 17 | 18 | logo2 = """ 19 | __ ___ ___ ____ _____ ___ 20 | /__\ / _ \ / __\/___ \___ / / _ \ 21 | / \// / /_)/____ / _\ // / / |_ \| | | | 22 | / _ \/ ___/_____/ / / \_/ / ___) | |_| | 23 | \/ \_/\/ \/ \___,_\|____(_)___/ 24 | 25 | 本程序仅供学习、交流,以及合法范围内的测试,切勿用作非法用途,否则一切责任、后果自负. 26 | This program is only for learning, communication, and testing within the legal scope, do not use for illegal purposes, otherwise all responsibilities, consequences. 27 | """ 28 | 29 | logos = [logo1, logo2] 30 | print(random.choice(logos)) 31 | 32 | display_logo() 33 | 34 | 35 | try: 36 | import _bootlocale 37 | except ImportError: 38 | pass 39 | 40 | def main(): 41 | print("请选择:") 42 | print("1: RPbasics") 43 | print("2: RP-foolproof") 44 | print("3: RP-notsign") 45 | print("4: RP-letter") 46 | print("5: RP-Dletter") 47 | print("6: help") 48 | current_path = os.path.dirname(os.path.realpath(__file__)) 49 | 50 | choice = input("请输入你的选择1~6:") 51 | 52 | if choice == '1': 53 | subprocess.run(["python3", os.path.join(current_path, "RP-basics")]) 54 | elif choice == '2': 55 | subprocess.run(["python3", os.path.join(current_path, "RP-foolproof")]) 56 | elif choice == '3': 57 | subprocess.run(["python3", os.path.join(current_path, "RP-notsign")]) 58 | elif choice == '4': 59 | subprocess.run(["python3", os.path.join(current_path, "RP-letter")]) 60 | elif choice == '5': 61 | subprocess.run(["python3", os.path.join(current_path, "RP-Dletter")]) 62 | elif choice == '6': 63 | subprocess.run(["python3", os.path.join(current_path, "instructionbook")]) 64 | else: 65 | print("无效的选择,请重新运行程序并输入有效的选择。") 66 | 67 | if __name__ == "__main__": 68 | main() 69 | --------------------------------------------------------------------------------