1. CUPP密码生成器核心原理剖析
在网络安全领域,密码破解的成功率往往取决于字典的质量。传统爆破工具使用通用弱密码字典,命中率通常不足5%。而基于CUPP(Common User Password Profiler)理念的个性化密码生成器,通过分析目标用户的个人信息,能将命中率提升至30-50%。
这个Python实现的CUPP集成密码生成器,其核心算法建立在三个关键发现上:
- 超过60%的用户会将自己的姓名、生日或电话号码融入密码
- 近80%的个性化密码会采用简单的变形规则(如首字母大写、添加数字后缀)
- 用户倾向于重复使用5-7种密码变体组合
提示:该工具仅限用于合法安全测试,实际使用前需获得明确授权
2. 用户信息处理引擎
2.1 多维度数据解析
程序通过parse_user_data方法构建用户画像,处理逻辑包含三个层级:
身份信息处理层
python复制# 姓名多格式处理示例
name_parts = user_data['name'].split('|')
user_data['first_lower'] = name_parts[0].lower() # 转为小写
user_data['last_upper'] = name_parts[-1].upper() if len(name_parts)>1 else '' # 转为大写
user_data['initials'] = name_parts[0][0] + (name_parts[-1][0] if len(name_parts)>1 else '') # 提取首字母
联系方式解析层
- 电话号码清洗:
re.sub(r'\D', '', phone)移除所有非数字字符 - 智能分段存储:自动识别手机号前3位、后4/6/8位等关键段
- 国际号码兼容:支持11位(中国)、10位(美国)等常见格式
时间信息处理层
python复制# 生日八种格式转换
birth = '19900515'
formats = [
birth[:4], # 1990
birth[2:4], # 90
birth[4:6]+birth[6:8],# 0515
birth[4:6]+birth[2:4],# 0590
#...其他组合格式
]
2.2 密码知识库设计
程序内置四大类密码特征库:
-
全球弱密码TOP200:包含
123456、password等经典弱密码 -
键盘模式库:
python复制keyboard_patterns = [ 'qwerty', 'asdfgh', '1qaz2wsx', '!QAZ@WSX', # 包含shift键的组合 'zxcvbnm' ] -
Leet语映射表:
原字符 替换方案 a 4,@ e 3 s 5,$ -
情境化词库:根据用户年龄自动选择"love"(青少年)、"1988"(80后)等时代特征词汇
3. 密码生成算法实现
3.1 分层生成策略
基础组合层
python复制def generate_basic(user_data):
guesses = set()
fn, ln = user_data['first_lower'], user_data['last_lower']
# 姓名基础组合
guesses.update([fn+ln, ln+fn, fn[0]+ln])
# 账户组合
if account := user_data.get('account'):
guesses.add(fn + account[:3])
return guesses
高级变形层
- 大小写混合:
JohnSmith、JOHNSMITH、johnSmith - 分隔符插入:
john.smith、john-smith、john_smith - 反转处理:
htimsnhoj(johnsmith的反写)
情境增强层
python复制# 根据年龄生成时代特征密码
if user_data.get('approx_age') > 40:
guesses.add(user_data['first_lower'] + '88') # 80后偏好吉利数字
elif user_data.get('approx_age') < 25:
guesses.add(user_data['first_lower'] + 'love')
3.2 智能组合控制
为避免组合爆炸,程序采用多种限制策略:
-
长度过滤:只保留4-16位的密码(覆盖92%的实际密码)
python复制if not 4 <= len(guess) <= 16: continue -
数量控制:每类变体最多生成30个候选
python复制for base in list(base_guesses)[:30]: # 限制基础密码数量 -
概率优先:按长度、字符类型等特征排序输出
python复制guesses.sort(key=lambda x: ( len(x), # 短密码优先 -sum(c.isalnum() for c in x)/len(x), # 字母数字占比高优先 x # 字典序 ))
4. 工程实践优化技巧
4.1 性能提升方案
内存优化
- 使用生成器替代列表存储中间结果
- 采用
set()自动去重,避免重复计算
多进程加速
python复制from multiprocessing import Pool
with Pool(4) as p: # 4进程并行
results = p.map(generate_for_user, user_chunks)
4.2 常见问题排查
编码问题处理
python复制try:
with open(file, 'r', encoding='utf-8') as f:
content = f.read()
except UnicodeDecodeError:
with open(file, 'r', encoding='gbk') as f: # 尝试GBK编码
content = f.read()
数据异常处理
python复制# 生日格式校验
if birth and len(birth)==8:
try:
datetime.strptime(birth, '%Y%m%d')
except ValueError:
birth = None # 无效日期置空
5. 实战应用案例
5.1 企业安全审计
某金融企业使用该工具对员工密码策略进行测试:
- 收集公开信息:员工姓名拼音、入职年份
- 生成个性化字典(平均每个员工1200个候选密码)
- 使用Hydra进行模拟攻击测试
- 结果:38%的员工密码在首轮破解中被命中
5.2 渗透测试技巧
高效使用建议:
- 优先尝试最后4位电话号码+姓名的组合(命中率最高)
- 对90后用户重点测试
姓名+出生年份后两位 - 管理账户尝试
Admin@2023等变形
防御建议:
- 强制使用密码管理器生成随机密码
- 启用双因素认证
- 定期检查是否有员工信息泄露
6. 扩展开发方向
6.1 社交工程增强
python复制def scrape_social_media(username):
# 模拟从社交媒体获取信息
return {
'pet_name': 'buddy',
'hometown': 'beijing'
}
6.2 机器学习优化
python复制from transformers import pipeline
generator = pipeline('text-generation', model='gpt2')
def smart_generate(base):
return generator(base+' my password is', max_length=10)[0]['generated_text']
我在实际安全测试中发现,配合WPA3企业版认证环境使用时,建议将生成的字典大小控制在1万条以内,否则容易触发账户锁定机制。对于特别重要的目标,可以采用"慢速爆破"模式,每分钟尝试不超过5次密码。