Commit Graph
177 Commits
Author SHA1 Message Date
Justin Bollinger 63e7286fcb merge: resolve conflicts with main - random rules moves to key 21 2026-03-19 15:42:11 -04:00
Justin Bollinger 92a835c6d8 merge: resolve conflicts with main - permute moves to key 20, ngram stays at 19 2026-03-19 15:33:48 -04:00
Justin Bollinger 5fe6e21405 feat: add ngramX attack and gzip auto-detection for external binaries
- Add _is_gzipped() magic-byte detector and _wordlist_path() context
  manager that transparently decompresses gzip files to a temp path
- Apply gzip handling to hcatCombinator3 and hcatCombinatorX via
  contextlib.ExitStack so compressed wordlists work without manual prep
- Add hcatNgramX() wrapper using ngramX.bin <corpus> <group_size> piped
  to hashcat, with gzip auto-detection on the corpus file
- Add ngram_attack() handler in attacks.py with tab-autocomplete corpus
  selection and configurable group size (default 3)
- Register attack as menu option 19 in both main.py and hate_crack.py
- Fix wordlist_optimizer.py: .app extension on macOS was wrong, use .bin
- Add tests/test_ngram_gzip.py covering ngram_attack handler, _is_gzipped,
  and _wordlist_path context manager (temp file cleanup, plain passthrough)
2026-03-19 14:35:29 -04:00
Justin Bollinger e41134eb1a feat: add permutation attack using permute.bin (closes #86)
Adds Permutation Attack (menu option 19) that generates all character
permutations of each word in a targeted wordlist and pipes them to
hashcat via permute.bin from hashcat-utils.

- hcatPermute() in main.py: pipes permute.bin < wordlist | hashcat
- permute_crack() in attacks.py: prompts for single wordlist file with
  factorial-growth warning, tab-autocomplete support
- Menu option 19 wired in both main.py and hate_crack.py
- hcatPermuteCount tracking alongside other count globals
- Tests: test_permute_attack.py (handler behavior) and
  test_permute_wrapper.py (subprocess wiring)
- README: added entry in menu listing and attack descriptions
2026-03-19 12:14:05 -04:00
Justin Bollinger dfe9e28e70 feat: add random rules attack using generate-rules.bin (#87)
- Add hcatGenerateRules() in main.py: runs generate-rules.bin to
  produce N random rules, writes them to a temp file, runs hashcat
  with -r against a chosen wordlist, cleans up on exit
- Add generate_rules_crack() handler in attacks.py with count
  prompt (default 65536), wordlist picker with tab-completion,
  input validation, and abort on invalid input
- Add dispatcher generate_rules_crack() in main.py and key "20"
  in both main.py and hate_crack.py get_main_menu_options()
- Add ("20", "Random Rules Attack") to get_main_menu_items()
- Add tests: test_random_rules_attack.py (menu presence, handler
  wiring), test_random_rules_wrapper.py (subprocess behavior,
  cleanup, count passing, count tracking)
- Add key "20" to MENU_OPTION_TEST_CASES in test_ui_menu_options.py
- Update README: add option 20 to menu listing, add attack
  description, add version history entry
2026-03-19 12:13:38 -04:00
Justin Bollinger 9a432f8b07 feat: add ad-hoc mask attack, markov brute force, and combinator sub-menu
- Add three hashcat wrapper functions: hcatAdHocMask, hcatMarkovTrain, hcatMarkovBruteForce
- Add corresponding attack handlers in attacks.py with OMEN-style training flow
- Consolidate 4 combinator attacks (keys 10/11/12) into interactive sub-menu (key 6)
- Add key 17 for ad-hoc mask attack and key 18 for markov brute force
- Update both main.py and hate_crack.py menu systems
- Add comprehensive test coverage for new handlers and wrappers
- Training source picker supports cracked passwords or any wordlist
2026-03-18 19:00:40 -04:00
Justin Bollinger 22d8858825 feat: default wordlist autocomplete to hcatWordlists dir and add TUI extra 2026-03-16 12:48:45 -04:00
Justin Bollinger 102facf42a refactor: remove PassGPT attack (option 17)
Remove the ML-based PassGPT password generation feature entirely:
modules, config keys, [ml] optional dependency group, menu entries,
tests, and documentation.
2026-03-03 14:31:41 -05:00
Justin BollingerandClaude Opus 4.6 f0b512a079 feat: add startup version check, fix PassGPT MPS/output issues, hide menu without ML deps
- Add optional startup version check against GitHub releases (check_for_updates config option)
- Add packaging dependency for version comparison
- Fix PassGPT OOM on MPS by capping batch size to 64 and setting memory watermark limits
- Fix PassGPT output having spaces between every character
- Hide PassGPT menu item (17) unless torch/transformers are installed
- Fix mypy errors in passgpt_generate.py with type: ignore comments
- Update README with version check docs, optional ML deps section, and PassGPT CLI options
- Add test_version_check.py with 8 tests covering update check behavior

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 09:32:40 -05:00
Justin BollingerandClaude Opus 4.6 39970b41c4 feat: add PassGPT attack (#17) - GPT-2 based ML password generator
Add PassGPT as attack mode 17, using a GPT-2 model trained on leaked
password datasets to generate candidate passwords. The generator pipes
candidates to hashcat via stdin, matching the existing OMEN pipe pattern.

- Add standalone generator module (python -m hate_crack.passgpt_generate)
- Add [ml] optional dependency group (torch, transformers)
- Add config keys: passgptModel, passgptMaxCandidates, passgptBatchSize
- Wire up menu entries in main.py, attacks.py, and hate_crack.py
- Auto-detect GPU (CUDA/MPS) with CPU fallback
- Add unit tests for pipe construction, handler, and ML deps check

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 08:41:22 -05:00
Justin BollingerandClaude Opus 4.6 6fb261d76f feat: add OMEN attack as menu option 16
Add OMEN (Ordered Markov ENumerator) as a probability-ordered password
candidate generator. Trains n-gram models on leaked passwords via
createNG, then pipes candidates from enumNG into hashcat.

Also fix a pre-existing bug where ensure_binary() used quit(1) instead
of sys.exit(1) - quit() closes stdin before raising SystemExit, which
caused "ValueError: I/O operation on closed file" when any optional
binary check failed and the program continued to use input().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 14:01:58 -05:00
Justin BollingerandClaude Opus 4.6 31c1dbbe35 refactor: rename Markov LLM attack to Ollama attack and simplify interface
Rename markov_attack → ollama_attack and hcatMarkov → hcatOllama across
menu, attacks, and tests. Remove candidate count prompts and cracked-output
default wordlist logic. Rename config keys (markov* → ollama*) and drop
ollamaUrl. Fix Dockerfile.test to use granular build steps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 19:17:50 -05:00
Justin BollingerandClaude Opus 4.6 e205e6e886 feat: add LLM Markov Attack (menu option 15)
Add a new attack mode that uses a local LLM via Ollama to generate
password candidates, converts them into hashcat .hcstat2 Markov
statistics via hcstat2gen, and runs a Markov-enhanced mask attack.

Two generation sub-modes:
- Wordlist-based: feeds sample from an existing wordlist to the LLM
  as pattern context (config-selectable default with Y/N override)
- Target-based: prompts for company name, industry, and location
  for contextual password generation

Pipeline: Ollama API -> candidate file -> hcstat2gen -> LZMA compress
-> hashcat -a 3 --markov-hcstat2

Config additions: ollamaUrl, ollamaModel, markovCandidateCount,
markovWordlist. No new pip dependencies (uses stdlib urllib/lzma).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 13:13:39 -05:00
Justin Bollinger 3e6efc0ef8 removed extended expander 2026-02-06 19:37:39 -05:00
Justin Bollinger 09ac410ace updated loopback logic and added testing 2026-02-06 14:36:15 -05:00
Justin Bollinger 9756f83b0c lots of refactoring around the menues and building out test cases 2026-02-05 13:52:06 -05:00
Justin Bollinger ac71a7f2b3 fixed menu pytest options that failed after updating them 2026-02-02 13:16:20 -05:00
Justin Bollinger 203afb3d82 Restore hate_crack package and add E2E install tests 2026-01-31 22:50:51 -05:00
Justin Bollinger b3d7576e35 updated tests 2026-01-28 10:56:00 -05:00
Justin Bollinger fd293a75c6 updated tests 2026-01-27 20:04:45 -05:00
Justin Bollinger d788f31f84 updated hashview apis and tests. 2026-01-27 16:00:09 -05:00
Justin Bollinger 15540bd2d1 Merge remote-tracking branch 'refs/remotes/origin/main' 2026-01-26 23:28:09 -05:00
Justin Bollinger f6e459ade9 code cleanup 2026-01-26 23:27:55 -05:00
Justin Bollinger 4091780a11 automatic rules 2026-01-26 22:57:46 -05:00
Justin Bollinger a53719cfe1 pipal print 2026-01-26 22:10:11 -05:00
Justin Bollinger 78056b6d1f moved comments back to top 2026-01-26 21:54:39 -05:00
Justin Bollinger 9bdd8bcbb1 updated wordlist downloading functions 2026-01-26 21:06:12 -05:00
Justin Bollinger a46ea5897a weakpass tests and migration to api.py 2026-01-26 16:10:58 -05:00
Justin Bollinger 544ee2dba3 cleanup of modules 2026-01-26 14:29:39 -05:00
Justin Bollinger 17e8298f07 Version2 initial commits 2026-01-26 13:44:02 -05:00
Justin Bollinger 4a47848988 major refactor and version change to 2.0 2026-01-26 13:32:37 -05:00
Justin Bollinger 4111e010d4 hashcat-util overhaul to automatically compile using make 2026-01-25 19:51:06 -05:00
Justin Bollinger ceca2b05df hashcat-util overhaul to automatically compile using make 2026-01-25 19:48:25 -05:00
Justin Bollinger 06f9477071 updated hashcat path 2026-01-25 19:23:37 -05:00
Justin Bollinger fe4731753b temporary removed create option from menu 2026-01-25 19:16:58 -05:00
Justin Bollinger e0ec4bf00a disabled create job feature until api is fixed 2026-01-25 15:13:00 -05:00
Justin Bollinger de366ba3f8 hashlist download fix 2026-01-21 20:42:49 -05:00
Justin Bollinger b656e125d4 autocomplete for quickcrack/hybrid attack modes 2026-01-21 20:05:36 -05:00
Justin Bollinger ecb4b1c736 hashview additions 2026-01-21 15:08:42 -05:00
Justin Bollinger c32a35bca0 updated hashview pytest runners and updated config example 2026-01-21 13:25:45 -05:00
larry.spohn d83de9760b Fixes for LM hash cracking routine. Also, hashcat-utils defaults to {util}.bin 2025-10-08 05:56:41 -04:00
Justin Bollinger 375a359f4f added logic for checking for format of username:hash 2025-01-30 12:42:43 -05:00
Justin Bollinger 5285ada177 fixed NTLM issues when not using pwdump format 2025-01-30 11:14:55 -05:00
Justin Bollinger cffdeca3c8 added variable for rules back in 2024-09-28 15:39:28 -04:00
Justin BollingerandGitHub a54e38b36b removed the rule section of the config parser 2024-09-28 15:29:48 -04:00
larry.spohn 14c47be29b Added rule choice to quick_crack(). 2024-09-28 06:19:56 -04:00
larry.spohn 9ae5320f5c Added wordlist choice to quick_crack(). 2024-09-08 08:42:59 -04:00
Spoonman1091andGitHub f4496e6c0f Update hate_crack.py
Fixed Dictionary Attack where best64.rule was renamed to best66.rule
2024-08-23 14:30:32 -04:00
Justin Bollinger 13f77d4832 removed an accidental extra character in the mask 2021-10-13 16:42:03 -04:00
Justin Bollinger 23213fd5b6 Additional check for potfile entries 2020-09-01 11:15:04 -04:00