refactor(menu): close numbering gap, renumber attacks 13-24 → 10-21

Menu options jumped from 9 to 13 because items 10-12 were removed
historically but remaining items kept their old numbers. Renumbers
the contiguous attack block to 10-21, closing the gap.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Justin Bollinger
2026-05-04 18:37:57 -04:00
co-authored by Claude Sonnet 4.6
parent eacbc44042
commit 14c6edf27a
5 changed files with 52 additions and 52 deletions
+12 -12
View File
@@ -83,18 +83,18 @@ def get_main_menu_options():
"7": _attacks.hybrid_crack, "7": _attacks.hybrid_crack,
"8": _attacks.pathwell_crack, "8": _attacks.pathwell_crack,
"9": _attacks.prince_attack, "9": _attacks.prince_attack,
"13": _attacks.bandrel_method, "10": _attacks.bandrel_method,
"14": _attacks.loopback_attack, "11": _attacks.loopback_attack,
"15": _attacks.ollama_attack, "12": _attacks.ollama_attack,
"16": _attacks.omen_attack, "13": _attacks.omen_attack,
"17": _attacks.adhoc_mask_crack, "14": _attacks.adhoc_mask_crack,
"18": _attacks.markov_brute_force, "15": _attacks.markov_brute_force,
"19": _attacks.ngram_attack, "16": _attacks.ngram_attack,
"20": _attacks.permute_crack, "17": _attacks.permute_crack,
"21": _attacks.generate_rules_crack, "18": _attacks.generate_rules_crack,
"22": _attacks.combipow_crack, "19": _attacks.combipow_crack,
"23": _attacks.pcfg_attack, "20": _attacks.pcfg_attack,
"24": _attacks.prince_ling_attack, "21": _attacks.prince_ling_attack,
"80": _attacks.wordlist_tools_submenu, "80": _attacks.wordlist_tools_submenu,
"81": _attacks.rule_tools_submenu, "81": _attacks.rule_tools_submenu,
"82": notifications_submenu, "82": notifications_submenu,
+24 -24
View File
@@ -4365,18 +4365,18 @@ def get_main_menu_items():
("7", "Hybrid Attack"), ("7", "Hybrid Attack"),
("8", "Pathwell Top 100 Mask Brute Force Crack"), ("8", "Pathwell Top 100 Mask Brute Force Crack"),
("9", "PRINCE Attack"), ("9", "PRINCE Attack"),
("13", "Bandrel Methodology"), ("10", "Bandrel Methodology"),
("14", "Loopback Attack"), ("11", "Loopback Attack"),
("15", "LLM Attack"), ("12", "LLM Attack"),
("16", "OMEN Attack"), ("13", "OMEN Attack"),
("17", "Ad-hoc Mask Attack"), ("14", "Ad-hoc Mask Attack"),
("18", "Markov Brute Force Attack"), ("15", "Markov Brute Force Attack"),
("19", "N-gram Attack"), ("16", "N-gram Attack"),
("20", "Permutation Attack"), ("17", "Permutation Attack"),
("21", "Random Rules Attack"), ("18", "Random Rules Attack"),
("22", "Combipow Passphrase Attack"), ("19", "Combipow Passphrase Attack"),
("23", "PCFG Attack"), ("20", "PCFG Attack"),
("24", "PRINCE-LING Attack"), ("21", "PRINCE-LING Attack"),
("80", "Wordlist Tools"), ("80", "Wordlist Tools"),
("81", "Rule File Tools"), ("81", "Rule File Tools"),
("82", "Notifications"), ("82", "Notifications"),
@@ -4411,18 +4411,18 @@ def get_main_menu_options():
"7": hybrid_crack, "7": hybrid_crack,
"8": pathwell_crack, "8": pathwell_crack,
"9": prince_attack, "9": prince_attack,
"13": bandrel_method, "10": bandrel_method,
"14": loopback_attack, "11": loopback_attack,
"15": ollama_attack, "12": ollama_attack,
"16": omen_attack, "13": omen_attack,
"17": adhoc_mask_crack, "14": adhoc_mask_crack,
"18": markov_brute_force, "15": markov_brute_force,
"19": ngram_attack, "16": ngram_attack,
"20": permute_crack, "17": permute_crack,
"21": generate_rules_crack, "18": generate_rules_crack,
"22": combipow_crack, "19": combipow_crack,
"23": pcfg_attack, "20": pcfg_attack,
"24": prince_ling_attack, "21": prince_ling_attack,
"80": wordlist_tools_submenu, "80": wordlist_tools_submenu,
"81": rule_tools_submenu, "81": rule_tools_submenu,
"82": notifications_submenu, "82": notifications_submenu,
+3 -3
View File
@@ -46,16 +46,16 @@ def _make_ctx(hash_type="1000", hash_file="/tmp/hashes.txt"):
def test_combipow_crack_in_main_menu(cli): def test_combipow_crack_in_main_menu(cli):
options = cli.get_main_menu_options() options = cli.get_main_menu_options()
assert "22" in options assert "19" in options
def test_combipow_crack_menu_item_label(): def test_combipow_crack_menu_item_label():
cli = _load_cli() cli = _load_cli()
items = cli.get_main_menu_items() items = cli.get_main_menu_items()
keys = [k for k, _ in items] keys = [k for k, _ in items]
assert "22" in keys assert "19" in keys
labels = {k: label for k, label in items} labels = {k: label for k, label in items}
assert "passphrase" in labels["22"].lower() or "combipow" in labels["22"].lower() assert "passphrase" in labels["19"].lower() or "combipow" in labels["19"].lower()
# --- combipow_crack handler tests --- # --- combipow_crack handler tests ---
+1 -1
View File
@@ -36,7 +36,7 @@ def cli():
def test_generate_rules_crack_in_main_menu(cli): def test_generate_rules_crack_in_main_menu(cli):
options = cli.get_main_menu_options() options = cli.get_main_menu_options()
assert "21" in options assert "18" in options
def test_generate_rules_crack_handler_calls_main(cli, tmp_path): def test_generate_rules_crack_handler_calls_main(cli, tmp_path):
+12 -12
View File
@@ -20,18 +20,18 @@ MENU_OPTION_TEST_CASES = [
("7", CLI_MODULE._attacks, "hybrid_crack", "hybrid"), ("7", CLI_MODULE._attacks, "hybrid_crack", "hybrid"),
("8", CLI_MODULE._attacks, "pathwell_crack", "pathwell"), ("8", CLI_MODULE._attacks, "pathwell_crack", "pathwell"),
("9", CLI_MODULE._attacks, "prince_attack", "prince"), ("9", CLI_MODULE._attacks, "prince_attack", "prince"),
("13", CLI_MODULE._attacks, "bandrel_method", "bandrel"), ("10", CLI_MODULE._attacks, "bandrel_method", "bandrel"),
("14", CLI_MODULE._attacks, "loopback_attack", "loopback"), ("11", CLI_MODULE._attacks, "loopback_attack", "loopback"),
("15", CLI_MODULE._attacks, "ollama_attack", "ollama"), ("12", CLI_MODULE._attacks, "ollama_attack", "ollama"),
("16", CLI_MODULE._attacks, "omen_attack", "omen"), ("13", CLI_MODULE._attacks, "omen_attack", "omen"),
("17", CLI_MODULE._attacks, "adhoc_mask_crack", "adhoc-mask"), ("14", CLI_MODULE._attacks, "adhoc_mask_crack", "adhoc-mask"),
("18", CLI_MODULE._attacks, "markov_brute_force", "markov-brute"), ("15", CLI_MODULE._attacks, "markov_brute_force", "markov-brute"),
("19", CLI_MODULE._attacks, "ngram_attack", "ngram"), ("16", CLI_MODULE._attacks, "ngram_attack", "ngram"),
("20", CLI_MODULE._attacks, "permute_crack", "permute"), ("17", CLI_MODULE._attacks, "permute_crack", "permute"),
("21", CLI_MODULE._attacks, "generate_rules_crack", "random-rules"), ("18", CLI_MODULE._attacks, "generate_rules_crack", "random-rules"),
("22", CLI_MODULE._attacks, "combipow_crack", "combipow"), ("19", CLI_MODULE._attacks, "combipow_crack", "combipow"),
("23", CLI_MODULE._attacks, "pcfg_attack", "pcfg"), ("20", CLI_MODULE._attacks, "pcfg_attack", "pcfg"),
("24", CLI_MODULE._attacks, "prince_ling_attack", "prince-ling"), ("21", CLI_MODULE._attacks, "prince_ling_attack", "prince-ling"),
("80", CLI_MODULE._attacks, "wordlist_tools_submenu", "wordlist-tools"), ("80", CLI_MODULE._attacks, "wordlist_tools_submenu", "wordlist-tools"),
("81", CLI_MODULE._attacks, "rule_tools_submenu", "rule-tools"), ("81", CLI_MODULE._attacks, "rule_tools_submenu", "rule-tools"),
("82", CLI_MODULE, "notifications_submenu", "notifications-submenu"), ("82", CLI_MODULE, "notifications_submenu", "notifications-submenu"),