{"id":31962092,"url":"https://github.com/andreitelteu/zipcrack","last_synced_at":"2025-10-14T16:26:21.969Z","repository":{"id":309302515,"uuid":"1035767521","full_name":"AndreiTelteu/ZipCrack","owner":"AndreiTelteu","description":"Crack your forgotten zip password with the power of all your cores/threads !","archived":false,"fork":false,"pushed_at":"2025-08-11T04:58:10.000Z","size":2523,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-10T04:36:15.608Z","etag":null,"topics":["bruteforce","zip"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AndreiTelteu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-11T04:10:55.000Z","updated_at":"2025-08-11T04:19:36.000Z","dependencies_parsed_at":"2025-08-11T06:37:53.843Z","dependency_job_id":null,"html_url":"https://github.com/AndreiTelteu/ZipCrack","commit_stats":null,"previous_names":["andreitelteu/zipcrack"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AndreiTelteu/ZipCrack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiTelteu%2FZipCrack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiTelteu%2FZipCrack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiTelteu%2FZipCrack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiTelteu%2FZipCrack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndreiTelteu","download_url":"https://codeload.github.com/AndreiTelteu/ZipCrack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiTelteu%2FZipCrack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279019570,"owners_count":26086752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bruteforce","zip"],"created_at":"2025-10-14T16:26:17.540Z","updated_at":"2025-10-14T16:26:21.964Z","avatar_url":"https://github.com/AndreiTelteu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZipCrack\n\nZipCrack is a terminal-based ZIP password brute forcer built in Go. It loads an encrypted ZIP into memory, generates random password candidates from a user-selected character set, and tries them concurrently while rendering a live TUI with per-thread throughput, total attempts, progress, and ETA.\n\nScreenshot\n\n![TUI screenshot](./screenshot.png)\n\nKey capabilities\n- Interactive CLI prompts for input file, character sets, min/max lengths, threads, and batch size. See [main.promptString()](cmd/zipcrack/main.go:22), [main.promptYesNo()](cmd/zipcrack/main.go:32), [main.promptInt()](cmd/zipcrack/main.go:46).\n- Concurrent cracking pipeline coordinated by [cracker.NewRunner()](internal/cracker/runner.go:49) with worker stats and result channels.\n- TUI built with Bubble Tea via [tui.NewModel()](internal/tui/model.go:74) showing per-thread p/s, totals, progress bar, and ETA.\n- Per-worker ZIP verification using [cracker.ZipWorker.Try()](internal/cracker/zipcheck.go:80) on the smallest encrypted file in the archive for speed.\n\nRequirements\n- Go (1.20+ recommended).\n- Linux/macOS/WSL. Tested on WSL.\n\nInstall\n\nClone this repository, then fetch dependencies:\n\n`go mod download`\n\nBuild\n\nBuild the CLI binary:\n\n`go build -o zipcrack ./cmd/zipcrack`\n\nOr run without building:\n\n`go run ./cmd/zipcrack`\n\nUsage\n\n1. Prepare an encrypted ZIP file you want to test (the app only targets encrypted entries; unencrypted files are ignored).\n2. Launch the program:\n\n`./zipcrack`\n\n3. Follow the prompts:\n- ZIP file path: Path to the target ZIP (default: /home/andrei/target.zip).\n- Character sets: Toggle letters, numbers, common specials, or all ASCII punctuation.\n- Minimum password length: Non-negative integer (default: 1).\n- Maximum password length: Non-negative integer, adjusted to be \u003e= min (default: 8).\n- Threads: Number of workers, typically CPU cores. Default is your logical CPU count.\n- Batch size: How many random candidates to generate per batch per tick. Larger batches reduce overhead but increase latency to stop.\n\nControls\n- q or Ctrl+C: Quit the TUI.\n\nWhat you will see\n- Per-thread throughput lines like [T01: 123456 p/s], grouped in rows.\n- Total throughput and attempts.\n- Progress bar and ETA when alphabet size and length bounds are known. This is an estimate over the random search space sum_{k=min..max}(alphabet^k).\n- If a password is found, the program exits the TUI and prints: Password found: \u003cvalue\u003e\n\nNotes on approach\n- Random search: Candidates are sampled uniformly from the selected alphabet and length bounds by [cracker.generateBatch()](internal/cracker/generator.go:10). This is not exhaustive enumeration and may revisit candidates; it trades determinism for simplicity and parallel scalability.\n- Target selection: The checker chooses the smallest encrypted file in the archive once; every worker builds its own reader to avoid shared state. See [cracker.NewZipChecker()](internal/cracker/zipcheck.go:26) and [cracker.ZipChecker.NewWorker()](internal/cracker/zipcheck.go:66).\n- Throughput accounting: Worker attempt counters are aggregated periodically and published as [cracker.Stats](internal/cracker/runner.go:11) over a channel sampled by the TUI.\n\nPerformance tips\n- Increase Threads up to the number of logical CPUs. Going beyond may hurt throughput due to contention.\n- Increase Batch size to reduce scheduling overhead; very large batches can make stopping slower.\n- Narrow Min/Max length and alphabet when you can.\n- Use Special Common instead of Special ALL unless you need the full ASCII punctuation range; smaller alphabets reduce the search space dramatically.\n\nSafety and legality\n- Only use this tool on archives you own or are authorized to test. Unauthorized access attempts may be illegal.\n\nProject structure\n- [cmd/zipcrack/main.go](cmd/zipcrack/main.go) — interactive entry point and TUI wiring, see [main.main()](cmd/zipcrack/main.go:63).\n- [internal/tui/model.go](internal/tui/model.go) — Bubble Tea model, rendering, and keyboard handling via [tui.model.Update()](internal/tui/model.go:108) and [tui.model.View()](internal/tui/model.go:168).\n- [internal/cracker/runner.go](internal/cracker/runner.go) — orchestrates generator, workers, stats, and result publication via [cracker.Runner.Start()](internal/cracker/runner.go:82).\n- [internal/cracker/zipcheck.go](internal/cracker/zipcheck.go) — AES/ZipCrypto password checks with yeka/zip.\n- [internal/cracker/generator.go](internal/cracker/generator.go) — random candidate generation.\n- [internal/charset/charset.go](internal/charset/charset.go) — character sets and utilities.\n\nFAQ\n\nQ: Does it try every possible password in order?\nA: No. It samples randomly within your constraints. It can find short or simple passwords quickly, but exhaustive guarantees are not provided.\n\nQ: Can I point it at huge ZIPs?\nA: It chooses the smallest encrypted entry to test against to minimize per-attempt cost, so large archives are fine as long as at least one encrypted file exists.\n\nQ: Why progress/ETA sometimes missing?\nA: If parameters are insufficient or throughput is zero, ETA/progress may not render.\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreitelteu%2Fzipcrack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreitelteu%2Fzipcrack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreitelteu%2Fzipcrack/lists"}