Instacracker-cli Official

# Analyze command analyze_parser = subparsers.add_parser('analyze', help='Analyze password strength') analyze_parser.add_argument('--password', required=True, help='Password to analyze')

def analyze_password(self, password: str) -> Dict: """Analyze password strength and provide feedback""" score = 0 feedback = [] # Length check if len(password) >= 12: score += 2 elif len(password) >= 8: score += 1 else: feedback.append("Password is too short (minimum 8 characters)") # Complexity checks if re.search(r'[A-Z]', password): score += 1 else: feedback.append("Add uppercase letters") if re.search(r'[a-z]', password): score += 1 else: feedback.append("Add lowercase letters") if re.search(r'\d', password): score += 1 else: feedback.append("Add numbers") if re.search(r'[!@#$%^&*(),.?":{}|<>]', password): score += 1 else: feedback.append("Add special characters") # Check against common passwords if password.lower() in self.common_passwords: score -= 2 feedback.append("Password is too common") # Entropy calculation (simplified) charset_size = 0 if re.search(r'[a-z]', password): charset_size += 26 if re.search(r'[A-Z]', password): charset_size += 26 if re.search(r'\d', password): charset_size += 10 if re.search(r'[!@#$%^&*(),.?":{}|<>]', password): charset_size += 32 entropy = len(password) * (charset_size.bit_length() - 1) if charset_size > 0 else 0 # Strength rating if score >= 5: strength = "Very Strong" elif score >= 4: strength = "Strong" elif score >= 3: strength = "Moderate" elif score >= 2: strength = "Weak" else: strength = "Very Weak" return { "score": score, "strength": strength, "entropy_bits": entropy, "feedback": feedback, "length": len(password), "has_upper": bool(re.search(r'[A-Z]', password)), "has_lower": bool(re.search(r'[a-z]', password)), "has_digits": bool(re.search(r'\d', password)), "has_special": bool(re.search(r'[!@#$%^&*(),.?":{}|<>]', password)) } def main(): parser = argparse.ArgumentParser( description='InstaCracker CLI - Password Security Testing Tool', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: %(prog)s hash --target 5f4dcc3b5aa765d61d8327deb882cf99 --type md5 %(prog)s analyze --password "MySecurePass123!" %(prog)s brute --hash 5f4dcc3b5aa765d61d8327deb882cf99 --max-length 5 %(prog)s generate --words admin,password,test --output wordlist.txt """ )

#!/usr/bin/env python3 """ instacracker-cli - A command-line password strength testing tool For educational and security assessment purposes only """ import hashlib import itertools import string import time import sys import argparse import re from typing import Dict, List, Tuple, Optional import json

# Generate wordlist command generate_parser = subparsers.add_parser('generate', help='Generate custom wordlist') generate_parser.add_argument('--words', required=True, help='Comma-separated base words') generate_parser.add_argument('--output', required=True, help='Output file') generate_parser.add_argument('--no-numbers', action='store_true', help='Don\'t add numbers') generate_parser.add_argument('--no-special', action='store_true', help='Don\'t add special characters') instacracker-cli

def _check_hash(self, word: str, target_hash: str, hash_type: str) -> bool: """Check if word matches target hash""" hash_func = getattr(hashlib, hash_type, None) if not hash_func: raise ValueError(f"Unsupported hash type: hash_type") computed = hash_func(word.encode()).hexdigest() return computed == target_hash

class InstaCrackerCLI: def (self, verbose=False): self.verbose = verbose self.common_passwords = self._load_common_passwords() self.attempts = 0 self.start_time = None

subparsers = parser.add_subparsers(dest='command', help='Commands') # Analyze command analyze_parser = subparsers

args = parser.parse_args()

def hybrid_attack(self, target_hash: str, hash_type: str = "md5", base_words: List[str] = None) -> Tuple[Optional[str], int]: """Hybrid attack combining dictionary with mutations""" base_words = base_words or self.common_passwords mutations = [ lambda x: x + "123", lambda x: x + "1234", lambda x: x + "!", lambda x: x.capitalize(), lambda x: x.upper(), lambda x: x + "2023", lambda x: x + "@", ] self.attempts = 0 self.start_time = time.time() print(f"[*] Starting hybrid attack...") for word in base_words: # Check original self.attempts += 1 if self._check_hash(word, target_hash, hash_type): elapsed = time.time() - self.start_time return word, self.attempts, elapsed # Check mutations for mutation in mutations: mutated = mutation(word) self.attempts += 1 if self._check_hash(mutated, target_hash, hash_type): elapsed = time.time() - self.start_time return mutated, self.attempts, elapsed elapsed = time.time() - self.start_time return None, self.attempts, elapsed

def brute_force_attack(self, target_hash: str, hash_type: str = "md5", max_length: int = 6, charset: str = None) -> Tuple[Optional[str], int]: """Perform brute force attack""" charset = charset or string.ascii_lowercase + string.digits self.attempts = 0 self.start_time = time.time() print(f"[*] Starting brute force attack (max length: max_length)...") for length in range(1, max_length + 1): for combo in itertools.product(charset, repeat=length): word = ''.join(combo) self.attempts += 1 if self._check_hash(word, target_hash, hash_type): elapsed = time.time() - self.start_time return word, self.attempts, elapsed # Progress indicator if self.verbose and self.attempts % 10000 == 0: print(f"[*] Attempts: self.attempts, Current: word") elapsed = time.time() - self.start_time return None, self.attempts, elapsed help='Password to analyze') def analyze_password(self

# Hash crack command crack_parser = subparsers.add_parser('hash', help='Crack a hash') crack_parser.add_argument('--target', required=True, help='Target hash to crack') crack_parser.add_argument('--type', default='md5', help='Hash type (md5, sha1, sha256)') crack_parser.add_argument('--method', choices=['dict', 'brute', 'hybrid'], default='dict', help='Attack method') crack_parser.add_argument('--max-length', type=int, default=5, help='Max length for brute force') crack_parser.add_argument('--wordlist', help='Custom wordlist file') crack_parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output')

def dictionary_attack(self, target_hash: str, hash_type: str = "md5", wordlist: List[str] = None) -> Tuple[Optional[str], int]: """Perform dictionary attack against hash""" wordlist = wordlist or self.common_passwords self.attempts = 0 self.start_time = time.time() print(f"[*] Starting dictionary attack with len(wordlist) words...") for word in wordlist: self.attempts += 1 if self._check_hash(word, target_hash, hash_type): elapsed = time.time() - self.start_time return word, self.attempts, elapsed elapsed = time.time() - self.start_time return None, self.attempts, elapsed