1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| import hashlib
TARGET_HASH = '6cd1f22e65d26246530ff7a2528144e3'
def test_variations(password): """测试密码的各种变体""" variations = [ password, # 原始密码 password + '\n', # 密码+换行符 password + '\r\n', # 密码+回车换行 password + ' ', # 密码+空格 password + '\t', # 密码+制表符 password + '\x00', # 密码+空字符 password.encode('utf-8').decode('latin-1'), # 编码转换 ] for var in variations: # 直接字符串 md5_direct = hashlib.md5(var.encode('utf-8', errors='ignore')).hexdigest() if md5_direct == TARGET_HASH: return var, "direct" # 字节方式 md5_bytes = hashlib.md5(var.encode('latin-1', errors='ignore')).hexdigest() if md5_bytes == TARGET_HASH: return var, "bytes" return None, None
def smart_crack(): """智能爆破,测试多种可能性""" print(f"[*] 目标MD5: {TARGET_HASH}") print("[*] 测试多种编码和格式...") # 扩展常见密码列表 extended_common = [ '123456', 'password', 'admin', '12345', 'qwerty', 'abc123', 'password1', 'admin123', 'root', 'toor', '1234', 'test', 'guest', '123', 'pass', '123456789', '12345678', '1234567', '111111', '000000', 'secret', '123abc', 'admin1', 'password123' ] # 先测试常见密码的各种变体 for pwd in extended_common: result, method = test_variations(pwd) if result: print(f"[🎉] 快速破解成功! 密码: {repr(result)} (方法: {method})") return result # 如果常见密码失败,尝试字典中的密码 try: with open('/usr/share/wordlists/rockyou.txt', 'r', encoding='latin-1') as f: for i, line in enumerate(f): if i % 100000 == 0 and i > 0: print(f"[*] 已测试 {i} 个密码...") pwd = line.strip() result, method = test_variations(pwd) if result: print(f"[🎉] 字典破解成功! 密码: {repr(result)} (方法: {method})") print(f"[*] 在字典第 {i} 行找到") return result print("[-] 字典中未找到匹配密码") except FileNotFoundError: print("[-] 字典文件不存在") return None
def analyze_hash(): """分析哈希特征""" print(f"[*] 分析MD5哈希: {TARGET_HASH}") print("[*] 特征:") print(f" - 长度: {len(TARGET_HASH)} 字符") print(f" - 字符集: 0-9a-f") print(f" - 可能的密码长度范围: 1-32字符")
if __name__ == "__main__": analyze_hash() result = smart_crack() if result: print(f"\n✅ 最终结果: {repr(result)}") print(f"📋 使用方式:") print(f" 密码: {result}") else: print(f"\n❌ 爆破失败,可能需要其他方法") print(f"💡 建议:") print(f" 1. 检查靶机脚本的实际MD5计算方式") print(f" 2. 尝试在线MD5解密服务") print(f" 3. 检查密码是否包含特殊unicode字符")
|