World's fastest and most advanced password recovery utility
This report summarizes scanner evidence for hashcat/hashcat, a C project with 27,214 GitHub stars. SynthScan examined 605,928 lines of code across 2332 source files, recording 1408 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 2.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1286 finding(s).
Are imports declared and package/API names verified? 33 finding(s).
Are wrappers, guards, and repeated structures necessary? 154 finding(s).
Which changes need focused human review? 1408 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1408 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/mozilla2hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/sqlcipher2hashcat.pl | 1 | #!/usr/bin/env perl | COMMENT |
| LOW | tools/bisq2hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_options.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_options.py | 21 | # ./tools/test_options.py run --base bf="-d 1" --phase pairs -j 16 --workdir sweep --out sweep.jsonl | COMMENT |
| LOW | tools/requirements.txt | 1 | # Python packages the test modules under tools/test_modules need. | COMMENT |
| LOW | tools/metamask2hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_lookup.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/test_lookup.sh | 21 | # | COMMENT |
| LOW | tools/test_module_runner.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/bitwarden2hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/install_dependencies.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/pcfg_hints.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/pcfg_hints.py | 41 | 'Y': 'Years', | COMMENT |
| LOW | tools/test.py | 1121 | continue | COMMENT |
| LOW | tools/cachedata2hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/radmin3_to_hashcat.pl | 1 | #!/usr/bin/env perl | COMMENT |
| LOW | tools/radmin3_to_hashcat.pl | 21 | # | COMMENT |
| LOW | tools/test_package.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/test_package.sh | 161 | "$HC" -m "$FIRST" --hash-info 2>&1 | grep -iE 'built for plugin interface|cannot load|undefined|no such file' | head - | COMMENT |
| LOW | tools/test_package.sh | 201 | return 1 | COMMENT |
| LOW | tools/test_package.sh | 401 | # reading them means starting the candidate pipeline and that wants a backend platform. | COMMENT |
| LOW | tools/rar32hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/recursivefiles2sha256sum.pl | 1 | #!/usr/bin/env perl | COMMENT |
| LOW | tools/routeros2hashcat.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_bridge.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/asan/gpu_sweep.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/asan/gpu_sweep.sh | 101 | # Count finding lines by a substring they actually contain. Each reads | COMMENT |
| LOW | tools/asan/sweep.sh | 21 | COMMENT | |
| LOW | tools/asan/msan_sweep.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/asan/msan_sweep.sh | 21 | # that buffer is reported as use-of-uninitialized-value: a false positive | COMMENT |
| LOW | tools/asan/build.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/asan/parse_harness.c | 281 | // | COMMENT |
| LOW | tools/asan/repro.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/asan/repro.sh | 101 | # SIGSTKSZ stopped being a compile-time constant and the runtime computes 0 | COMMENT |
| LOW | tools/fuzz/seeds.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/fuzz/fuzz_mask.c | 21 | #include "common.h" | COMMENT |
| LOW | tools/fuzz/build.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/fuzz/fuzz_tokenizer.c | 101 | const int attr = ((data[pos] << 8) | data[pos + 1]) & TOKEN_ATTR_MASK; | COMMENT |
| LOW | tools/compute_sanitizer/sweep_shim.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/test_modules/m99999.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m19900.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m35600.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m09000.py | 21 | # RandStuff(8) || RandHash(20) || Salt(20, unused) || IV(8, unused) | COMMENT |
| LOW | tools/test_modules/m19800.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m17020.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m17030.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m17010.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m17050.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m32700.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/luks1.sh | 121 | # ripemd160_serpent-cbc-essiv_512 | COMMENT |
| LOW | tools/test_modules/luks1.sh | 141 | # sha256_aes-cbc-essiv_512 | COMMENT |
| LOW | tools/test_modules/luks1.sh | 161 | # whirlpool_aes-cbc-plain64_512 | COMMENT |
| LOW | tools/test_modules/m29700.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m38500.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m16800.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m08300.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m38600.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | tools/test_modules/m32500.py | 21 | # total, and the salt is 16 bytes. The key is | COMMENT |
| LOW | tools/test_modules/m02000.py | 1 | #!/usr/bin/env python3 | COMMENT |
| 1011 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/test_options.py | 919 | except OSError: | CODE |
| HIGH | tools/test_options.py | 1327 | except OSError: | CODE |
| HIGH | tools/bitwarden2hashcat.py | 111 | except (KeyError, TypeError): | CODE |
| HIGH | tools/bitwarden2hashcat.py | 121 | except KeyError: | CODE |
| HIGH | tools/bitwarden2hashcat.py | 131 | except KeyError: | CODE |
| HIGH | tools/test.py | 209 | except Exception: | CODE |
| HIGH | tools/test.py | 215 | except Exception: | CODE |
| HIGH | tools/test.py | 319 | except Exception: | CODE |
| HIGH | tools/test.py | 516 | except Exception: | CODE |
| HIGH | tools/test.py | 531 | except Exception: | CODE |
| HIGH | tools/test.py | 549 | except Exception: | CODE |
| HIGH | tools/test.py | 5787 | except OSError: | CODE |
| HIGH | tools/test.py | 6484 | except (AttributeError, ValueError): | CODE |
| HIGH | tools/test.py | 5554 | except OSError: | CODE |
| HIGH | tools/test.py | 221 | except Exception: | CODE |
| HIGH | tools/compute_sanitizer/run.py | 113 | except Exception: | CODE |
| HIGH | tools/test_modules/lib/pytwofish.py | 40 | except ImportError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/test_options.py | 1750 | # An option the base passes itself is tagged "harness" on that base, whatever its family. | COMMENT |
| MEDIUM | tools/test_options.py | 1901 | # a run the harness could not make shows nothing about hashcat | COMMENT |
| MEDIUM | tools/recursivefiles2sha256sum.pl | 4 | ## This script was created to be used in conjunction with Hashcat mode 29700 (Keepass in keyfile only mode). | COMMENT |
| MEDIUM⚡ | tools/asan/sweep.sh | 52 | # fatal errors land on the harness's own stderr, recoverable ones in log_path | COMMENT |
| MEDIUM⚡ | tools/asan/sweep.sh | 61 | # The harness returns 1 when the sanitizer reported a finding, 2 when it | COMMENT |
| MEDIUM⚡ | tools/asan/sweep.sh | 63 | # show up as text (a UBSan run has no callback into the harness), so it is | COMMENT |
| MEDIUM | tools/asan/sweep.sh | 82 | # rc 2 is the harness's own "could not run": a failed dlopen, a missing | COMMENT |
| MEDIUM | tools/asan/sweep.sh | 84 | # plugins). Any other nonzero rc is an unexpected harness failure. Neither | COMMENT |
| MEDIUM | tools/asan/msan_sweep.sh | 11 | # MSan-instrumented harness and links a PLAIN (uninstrumented) core. | COMMENT |
| MEDIUM | tools/asan/msan_sweep.sh | 13 | # IMPORTANT: this UNDER-reports by construction. Only the harness, the named | COMMENT |
| MEDIUM⚡ | tools/asan/build.sh | 3 | # Build the fully-instrumented host-parser harness. | COMMENT |
| MEDIUM⚡ | tools/asan/build.sh | 5 | # Everything is instrumented: the harness, the libhashcat core and the module | COMMENT |
| MEDIUM⚡ | tools/asan/build.sh | 8 | # harness linked against an uninstrumented core reports those runs as clean. | COMMENT |
| MEDIUM⚡ | tools/asan/repro.sh | 4 | # harness instead of dlopen()ed. | COMMENT |
| MEDIUM⚡ | tools/asan/repro.sh | 9 | # MSan harness must not dlopen an ASan-built plugin). | COMMENT |
| MEDIUM⚡ | tools/asan/repro.sh | 11 | # The tradeoff: only the harness and the named module are instrumented. A bug | COMMENT |
| MEDIUM | tools/asan/repro.sh | 113 | # argv[1] is ignored under -DSTATIC_MODULE, but the harness still expects it | COMMENT |
| MEDIUM | tools/fuzz/build.sh | 79 | # hashconfig a parser sees, shared with the harness in tools/asan/ | COMMENT |
| MEDIUM | tools/fuzz/build.sh | 132 | # HC_CORE_BUILD. The rest of that file drives the feed and the backend, which the harness never | COMMENT |
| MEDIUM | tools/fuzz/build.sh | 217 | # built and recompiles only the harness with FUZZ_RECIPE_B64. fuzz.yml finds it by the | COMMENT |
| MEDIUM | tools/test_modules/m99999.py | 13 | # the length at 55. The compare harness' "invalid input" check cannot be met here and is | COMMENT |
| MEDIUM | .github/workflows/fuzz_report.py | 25 | # leak is always reported from and the harness that called the parser | COMMENT |
| MEDIUM | src/modules/scrypt_common.c | 173 | // used 19/68 processors. Increasing the TMTO to utilize all 68 processors | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/test_options.py | 1294 | except Exception as e: | CODE |
| LOW | tools/test_module_runner.py | 288 | except Exception as exc: | CODE |
| LOW | tools/shiro1-to-hashcat.py | 28 | except Exception as e: | CODE |
| MEDIUM | tools/test.py | 313 | def host_avail_mib(): | CODE |
| LOW⚡ | tools/test.py | 209 | except Exception: | CODE |
| LOW⚡ | tools/test.py | 215 | except Exception: | CODE |
| LOW⚡ | tools/test.py | 221 | except Exception: | CODE |
| LOW⚡ | tools/test.py | 516 | except Exception: | CODE |
| LOW⚡ | tools/test.py | 522 | except Exception: | CODE |
| LOW⚡ | tools/test.py | 531 | except Exception: | CODE |
| LOW | tools/test.py | 278 | except Exception: | CODE |
| LOW | tools/test.py | 319 | except Exception: | CODE |
| LOW | tools/test.py | 334 | except Exception: | CODE |
| LOW | tools/test.py | 351 | except Exception: | CODE |
| LOW | tools/test.py | 549 | except Exception: | CODE |
| MEDIUM | tools/cachedata2hashcat.py | 78 | print(f"Error opening file: {e}") | CODE |
| MEDIUM⚡ | tools/ppk2hashcat.py | 223 | print(f"Error: File not found: {filename}", file=sys.stderr) | CODE |
| MEDIUM⚡ | tools/ppk2hashcat.py | 225 | print(f"Error parsing {filename}: {e}", file=sys.stderr) | CODE |
| LOW⚡ | tools/ppk2hashcat.py | 226 | except Exception as e: | CODE |
| MEDIUM⚡ | tools/ppk2hashcat.py | 227 | print(f"Error processing {filename}: {e}", file=sys.stderr) | CODE |
| MEDIUM | tools/routeros2hashcat.py | 552 | print(f"Error: file too small: {path}", file=sys.stderr) | CODE |
| MEDIUM | tools/routeros2hashcat.py | 602 | print(f"Error: unrecognized file format or no EC-SRP5 hashes: {path}", | CODE |
| MEDIUM | tools/routeros2hashcat.py | 629 | print(f"Error: {input_path}: no such file or directory", | CODE |
| MEDIUM⚡ | tools/routeros2hashcat.py | 641 | print(f"Error: {input_path}: {e}", file=sys.stderr) | CODE |
| LOW⚡ | tools/routeros2hashcat.py | 642 | except Exception as e: | CODE |
| MEDIUM⚡ | tools/routeros2hashcat.py | 643 | print(f"Error: {input_path}: {e}", file=sys.stderr) | CODE |
| LOW | tools/test_bridge.py | 103 | except Exception: | CODE |
| LOW | tools/compute_sanitizer/run.py | 113 | except Exception: | CODE |
| MEDIUM | tools/compute_sanitizer/run.py | 49 | def sanity_check_binary(binary): | CODE |
| LOW | tools/compute_sanitizer/triage.py | 282 | except Exception: | CODE |
| LOW | tools/compute_sanitizer/triage.py | 294 | except Exception: | CODE |
| LOW | tools/compute_sanitizer/triage.py | 313 | except Exception as e: | CODE |
| MEDIUM | tools/compute_sanitizer/triage.py | 279 | def run(args): | CODE |
| MEDIUM | tools/compute_sanitizer/triage.py | 290 | def _tool_version(cmd): | CODE |
| MEDIUM | tools/compute_sanitizer/triage.py | 307 | def analyze(log_path, repo_root, tool, test_name="", timestamp="", command=None, | CODE |
| LOW | tools/compute_sanitizer/report.py | 35 | except Exception: | CODE |
| LOW | tools/test_modules/m28503.py | 189 | except Exception: | CODE |
| LOW | tools/test_modules/m28503.py | 209 | except Exception: | CODE |
| LOW | tools/test_modules/m02500.py | 198 | except Exception: | CODE |
| LOW | tools/test_modules/m09000.py | 114 | except Exception: | CODE |
| LOW | tools/test_modules/m28506.py | 153 | except Exception: | CODE |
| LOW | tools/test_modules/m28506.py | 174 | except Exception: | CODE |
| LOW | tools/test_modules/m02501.py | 204 | except Exception: | CODE |
| LOW | tools/test_modules/m25500.py | 82 | except Exception: | CODE |
| LOW | tools/test_modules/m30906.py | 153 | except Exception: | CODE |
| LOW | tools/test_modules/m30902.py | 148 | except Exception: | CODE |
| LOW | tools/test_modules/m30905.py | 153 | except Exception: | CODE |
| LOW | tools/test_modules/m30901.py | 148 | except Exception: | CODE |
| LOW | tools/test_modules/m32500.py | 90 | except Exception: | CODE |
| LOW | tools/test_modules/m28505.py | 152 | except Exception: | CODE |
| LOW | tools/test_modules/m28505.py | 173 | except Exception: | CODE |
| LOW | tools/test_modules/m33400.py | 73 | except Exception: | CODE |
| LOW | tools/test_modules/m40011.py | 72 | except Exception: | CODE |
| LOW | tools/test_modules/m26600.py | 88 | except Exception: | CODE |
| LOW | tools/test_modules/m28504.py | 191 | except Exception: | CODE |
| LOW | tools/test_modules/m28504.py | 211 | except Exception: | CODE |
| LOW | tools/test_modules/m26610.py | 89 | except Exception: | CODE |
| LOW | tools/test_modules/m40054.py | 40 | except Exception: | CODE |
| LOW | docs/hashcat-plugin-development-guide.md | 185 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/mozilla2hashcat.py | 161 | CODE | |
| LOW | tools/apfs2hashcat.py | 441 | CODE | |
| LOW | tools/bisq2hashcat.py | 36 | CODE | |
| LOW | tools/test_options.py | 351 | CODE | |
| LOW | tools/test_options.py | 621 | CODE | |
| LOW | tools/test_options.py | 1024 | CODE | |
| LOW | tools/test_options.py | 1093 | CODE | |
| LOW | tools/test_options.py | 1148 | CODE | |
| LOW | tools/test_options.py | 1368 | CODE | |
| LOW | tools/test_options.py | 1472 | CODE | |
| LOW | tools/test_options.py | 1967 | CODE | |
| LOW | tools/test_options.py | 787 | CODE | |
| LOW | tools/test_options.py | 852 | CODE | |
| LOW | tools/openbsd_softraid2hashcat.py | 183 | CODE | |
| LOW | tools/gpg-ocb-aes2hashcat.py | 37 | CODE | |
| LOW | tools/metamask2hashcat.py | 23 | CODE | |
| LOW | tools/test_module_runner.py | 431 | CODE | |
| LOW | tools/test_module_runner.py | 578 | CODE | |
| LOW | tools/bitwarden2hashcat.py | 169 | CODE | |
| LOW | tools/test_pkzip_stream.py | 67 | CODE | |
| LOW | tools/keybag2hashcat.py | 99 | CODE | |
| LOW | tools/keybag2hashcat.py | 30 | CODE | |
| LOW | tools/keybag2hashcat.py | 58 | CODE | |
| LOW | tools/test.py | 313 | CODE | |
| LOW | tools/test.py | 340 | CODE | |
| LOW | tools/test.py | 1136 | CODE | |
| LOW | tools/test.py | 1543 | CODE | |
| LOW | tools/test.py | 1677 | CODE | |
| LOW | tools/test.py | 2035 | CODE | |
| LOW | tools/test.py | 2182 | CODE | |
| LOW | tools/test.py | 2302 | CODE | |
| LOW | tools/test.py | 2320 | CODE | |
| LOW | tools/test.py | 2394 | CODE | |
| LOW | tools/test.py | 2434 | CODE | |
| LOW | tools/test.py | 2517 | CODE | |
| LOW | tools/test.py | 2540 | CODE | |
| LOW | tools/test.py | 2654 | CODE | |
| LOW | tools/test.py | 2686 | CODE | |
| LOW | tools/test.py | 2801 | CODE | |
| LOW | tools/test.py | 2904 | CODE | |
| LOW | tools/test.py | 3305 | CODE | |
| LOW | tools/test.py | 3400 | CODE | |
| LOW | tools/test.py | 3497 | CODE | |
| LOW | tools/test.py | 4083 | CODE | |
| LOW | tools/test.py | 4546 | CODE | |
| LOW | tools/test.py | 4775 | CODE | |
| LOW | tools/test.py | 4866 | CODE | |
| LOW | tools/test.py | 5254 | CODE | |
| LOW | tools/test.py | 5603 | CODE | |
| LOW | tools/test.py | 5835 | CODE | |
| LOW | tools/test.py | 6467 | CODE | |
| LOW | tools/cryptoloop2hashcat.py | 35 | CODE | |
| LOW | tools/ppk2hashcat.py | 28 | CODE | |
| LOW | tools/krb5db2hashcat.py | 436 | CODE | |
| LOW | tools/routeros2hashcat.py | 56 | CODE | |
| LOW | tools/routeros2hashcat.py | 181 | CODE | |
| LOW | tools/routeros2hashcat.py | 217 | CODE | |
| LOW | tools/routeros2hashcat.py | 400 | CODE | |
| LOW | tools/routeros2hashcat.py | 608 | CODE | |
| LOW | tools/test_modules/m09000.py | 45 | CODE | |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | BUILD_Android.md | 19 | ### Step 1: Install Dependencies | COMMENT |
| LOW | BUILD_Android.md | 33 | ### Step 2: Verify OpenCL Support | COMMENT |
| LOW | BUILD_Android.md | 42 | ### Step 3: Fix OpenCL Libraries (If Needed) | COMMENT |
| LOW | BUILD_Android.md | 84 | ### Step 4: Clone and Build Hashcat | COMMENT |
| LOW | BUILD_Android.md | 92 | ### Step 5: Verify Build | COMMENT |
| LOW | BUILD.md | 26 | ### Step 1: Clone the Hashcat repository | COMMENT |
| LOW | BUILD.md | 35 | ### Step 2: Build Hashcat | COMMENT |
| LOW | docs/hashcat-encrypted-plains.md | 13 | ### Step 1: The customer creates a key pair | COMMENT |
| LOW | docs/hashcat-encrypted-plains.md | 27 | ### Step 2: The operator cracks the hash | COMMENT |
| LOW | docs/hashcat-encrypted-plains.md | 68 | ### Step 3: The customer decrypts the result | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 206 | ### Step 1: Unpack | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 215 | ### Step 2: Install and compile hashcat | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 230 | ### Step 3: a quick test | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 255 | ### Step 4: Create your own reference implementation | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 435 | ### Step 1: Give your plugin a unique attack number | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 448 | ### Step 2: Configure the module | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 547 | ### Step 3: Define the struct | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 593 | ### Step 4: Define the temporary struct | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 628 | ### Step 5: Add the hash_decode() method | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 744 | ### Step 6: Add the hash_encode() method | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 795 | ### Step 7: Add the init () method | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 820 | ### Step 8: Gone through all of the steps? Let's compile | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 857 | ### Step 9: Rename the template | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 866 | ### Step 10: Split your implementation | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 893 | ### Step 11: Copy the structs | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 917 | ### Step 12: Insert your attack number in the kernel | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 946 | ### Step 13: Enter the init() method | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 996 | ### Step 14: Adjust the loop() method | COMMENT |
| LOW | …cs/plugin-development-workshop/Workshop-Syllabus-EN.md | 1044 | ### Step 15: Fill the comp() | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/compute_sanitizer/run.py | 134 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tools/compute_sanitizer/run.py | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tools/compute_sanitizer/run.py | 174 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 202 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 204 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 349 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 351 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 435 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/compute_sanitizer/run.py | 437 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tools/test_modules/lib/pyserpent.py | 6 | ## ================ | COMMENT |
| MEDIUM | tools/test_modules/lib/pytwofish.py | 5 | ## ========== | COMMENT |
| MEDIUM | tools/test_modules/lib/pytwofish.py | 31 | ## =========== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/mozilla2hashcat.py | 142 | def is_decrypting_pbe_aes_without_password(prf, global_salt, entry_salt, iteration, iv, cipher_text): | CODE |
| LOW | tools/mozilla2hashcat.py | 161 | def extract_master_password_infos(db_filepath: str, db_version: int) -> MasterPasswordInfos: | CODE |
| LOW | tools/apfs2hashcat.py | 140 | def parse_keybag_entry_header(keybag_entry_header): | CODE |
| LOW | tools/apfs2hashcat.py | 147 | def parse_container_keybag_entries(key_entries, nkeys): | CODE |
| LOW | tools/apfs2hashcat.py | 180 | def parse_wrapped_kek_packed_object(wrapped_kek, kek_uuid, volume_uuid): | CODE |
| LOW | tools/apfs2hashcat.py | 237 | def parse_keybag_packed_value(keybag_packed_value, kek_uuid, volume_uuid): | CODE |
| LOW | tools/apfs2hashcat.py | 246 | def parse_volume_keybag_entries(key_entries, nkeys, volume_uuid): | CODE |
| LOW | tools/test.py | 3087 | def container_mask_from_password(pw, where): | CODE |
| LOW | tools/bitlocker2hashcat.py | 88 | def parse_aes_ccm_encrypted_key(data): | CODE |
| LOW | tools/bitlocker2hashcat.py | 98 | def parse_volume_header_block(data): | CODE |
| LOW | tools/bitlocker2hashcat.py | 166 | def parse_fve_metadata_header(block): | CODE |
| LOW | tools/test_modules/m28503.py | 176 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m99999.py | 26 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m31600.py | 22 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m28506.py | 140 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m28502.py | 150 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m02501.py | 25 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m30903.py | 101 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m25900.py | 21 | def device_authentication_code(password): | CODE |
| LOW | tools/test_modules/m25900.py | 46 | def generate_session_response_mac(secure_session_identifier, public_value_xor, key): | CODE |
| LOW | tools/test_modules/m30906.py | 117 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m25400.py | 39 | def pdf_compute_encryption_key_user(word, id_hex, o, P, R, enc): | CODE |
| LOW | tools/test_modules/m25400.py | 61 | def pdf_compute_encryption_key_owner(word, R): | CODE |
| LOW | tools/test_modules/m30902.py | 112 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m10510.py | 39 | def pdf_compute_encryption_key(word_buf, padding, id_hex, o, P): | CODE |
| LOW | tools/test_modules/m30905.py | 117 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m30901.py | 112 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m16801.py | 21 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m30904.py | 104 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m28505.py | 139 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m28501.py | 150 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m31500.py | 20 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/m28504.py | 178 | def module_get_random_password(word): | CODE |
| LOW | tools/test_modules/lib/pyserpent.py | 170 | def inv_linear_transformation(x0, x1, x2, x3): | CODE |
| LOW | …orkflows/hashcat-example-hashes_machine-readable2md.py | 48 | def md_remove_backticks_and_pipes(msg): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/mozilla2hashcat.py | 24 | CODE | |
| LOW | tools/mozilla2hashcat.py | 25 | CODE | |
| LOW | tools/bisq2hashcat.py | 33 | CODE | |
| LOW | tools/exodus2hashcat.py | 10 | CODE | |
| LOW | tools/test_modules/m06800.py | 12 | CODE | |
| LOW | tools/test_modules/m10420.py | 11 | CODE | |
| LOW | tools/test_modules/m40020.py | 8 | CODE | |
| LOW | tools/test_modules/m34211.py | 9 | CODE | |
| LOW | tools/test_modules/m34201.py | 9 | CODE | |
| LOW | tools/test_modules/m34200.py | 8 | CODE | |
| LOW | tools/test_modules/lib/oldoffice.py | 13 | CODE | |
| LOW | tools/test_modules/lib/ike.py | 11 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_enigmax1_dma.py | 11 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_enigmax1_dma.py | 13 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_enigmax1_dma.py | 16 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_enigmax1_dma.py | 17 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_ypcb_dma.py | 11 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_ypcb_dma.py | 13 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_ypcb_dma.py | 15 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_ypcb_dma.py | 20 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_ypcb_dma.py | 21 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_zc706_dma.py | 11 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_zc706_dma.py | 13 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_zc706_dma.py | 14 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_zc706_dma.py | 19 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_zc706_dma.py | 20 | CODE | |
| LOW | src/fpga/bcrypt/platforms/enigma_x1.py | 7 | CODE | |
| LOW | src/fpga/bcrypt/gateware/bcrypt_dma_wrapper.py | 9 | CODE | |
| LOW | src/fpga/bcrypt/gateware/bcrypt_dma_wrapper.py | 10 | CODE | |
| LOW | src/fpga/bcrypt/gateware/bcrypt_dma_wrapper.py | 11 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/apfs2hashcat.py | 402 | CODE | |
| LOW | tools/test_options.py | 753 | CODE | |
| LOW | tools/compute_sanitizer/triage.py | 361 | CODE | |
| LOW | tools/test_modules/m37600.py | 33 | CODE | |
| LOW | tools/test_modules/m25400.py | 76 | CODE | |
| LOW | tools/test_modules/m22000.py | 290 | CODE | |
| LOW | tools/test_modules/m22001.py | 285 | CODE | |
| LOW | tools/test_modules/m37801.py | 22 | CODE | |
| LOW | tools/test_modules/m11400.py | 24 | CODE | |
| LOW | tools/test_modules/lib/shavite.py | 139 | CODE | |
| LOW | tools/test_modules/lib/shavite.py | 225 | CODE | |
| LOW | tools/test_modules/lib/hamsi.py | 333 | CODE | |
| LOW | tools/test_modules/lib/edonr.py | 133 | CODE | |
| LOW | tools/test_modules/lib/tiger.py | 75 | CODE | |
| LOW | tools/test_modules/lib/md6.py | 53 | CODE | |
| LOW | tools/test_modules/lib/cubehash.py | 69 | CODE | |
| LOW | tools/test_modules/lib/bmw.py | 171 | CODE | |
| LOW | tools/test_modules/lib/libcrypt.py | 60 | CODE | |
| LOW | tools/test_modules/lib/shabal.py | 121 | CODE | |
| LOW | tools/test_modules/lib/blake.py | 113 | CODE | |
| LOW | tools/test_modules/lib/blake.py | 152 | CODE | |
| LOW | tools/test_modules/lib/has160.py | 73 | CODE | |
| LOW | tools/test_modules/lib/haval.py | 116 | CODE | |
| LOW | tools/test_modules/lib/skein.py | 125 | CODE | |
| LOW | extra/fpga/zc706-sdboot/make_bootbin.py | 48 | CODE | |
| LOW | extra/fpga/zc706-sdboot/make_bootbin.py | 247 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_enigmax1_dma.py | 65 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_ypcb_dma.py | 89 | CODE | |
| LOW | src/fpga/bcrypt/bcrypt_zc706_dma.py | 70 | CODE | |
| LOW | src/fpga/bcrypt/gateware/bcrypt_dma_wrapper.py | 15 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/compute_sanitizer/run.py | 6 | build make clean && make DEBUG=1, produce ./hashcat-sanitizer | STRING |
| HIGH⚡ | tools/compute_sanitizer/run.py | 168 | print(" make clean && make -j$(nproc)") | CODE |
| HIGH | src/fpga/bcrypt/bcrypt_ztex213_usb.py | 139 | lines.append ("set mmcms [get_cells -hier -filter {REF_NAME == MMCME2_ADV || REF_NAME == MMCME2_BASE}]") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/asan/gpu_sweep.sh | 10 | # Usage: | COMMENT |
| LOW | tools/asan/sweep.sh | 6 | # Usage: | COMMENT |
| LOW⚡ | tools/asan/build.sh | 10 | # Usage: | COMMENT |
| LOW⚡ | tools/asan/repro.sh | 16 | # Usage: | COMMENT |
| LOW | tools/fuzz/seeds.sh | 9 | # Usage: | COMMENT |
| LOW | tools/fuzz/build.sh | 10 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/metamask2hashcat.py | 9 | # Extract metamask vault from browser and save to file, then you can use this tool | COMMENT |
| LOW | deps/phc-winner-argon2-20190702/_hashcat/opt.c | 215 | /* Don't forget to generate the first block of addresses: */ | COMMENT |
| LOW | deps/phc-winner-argon2-20190702/_hashcat/ref.c | 126 | /* Don't forget to generate the first block of addresses: */ | COMMENT |
| LOW | deps/phc-winner-argon2-20190702/src/opt.c | 215 | /* Don't forget to generate the first block of addresses: */ | COMMENT |
| LOW | deps/phc-winner-argon2-20190702/src/ref.c | 126 | /* Don't forget to generate the first block of addresses: */ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/apfs2hashcat.py | 416 | # Check if this block has a valid NXSB header | COMMENT |
| LOW | tools/radmin3_to_hashcat.pl | 118 | # Read the file line by line | COMMENT |
| LOW | tools/radmin3_to_hashcat.pl | 122 | # Check if the line is a section header | COMMENT |
| LOW | tools/radmin3_to_hashcat.pl | 158 | # Loop over the data | COMMENT |
| LOW | tools/routeros2hashcat.py | 465 | # Read filename | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/outfile.c | 850 | // Every other field stays as requested, so --left still prints the hash alone. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/keybag2hashcat.py | 100 | # Create the argument parser | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/backend.c | 1277 | // Now we need to check if this an AMD vendor, because this is when the problems start | COMMENT |
| LOW | src/modules/module_13500.c | 138 | /* we need to check if we can precompute some of the data -- | COMMENT |