{"id":22111659,"url":"https://github.com/phx/brutalist","last_synced_at":"2025-06-12T12:35:30.245Z","repository":{"id":57416447,"uuid":"221504121","full_name":"phx/brutalist","owner":"phx","description":"brutalist is a python3+ based command line tool for all platforms that can be used to generate quick and large word lists from one or more sample passwords supplied by the user.","archived":false,"fork":false,"pushed_at":"2022-04-01T15:50:23.000Z","size":478,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-27T05:11:31.783Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phx.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}},"created_at":"2019-11-13T16:30:13.000Z","updated_at":"2023-02-23T11:20:56.000Z","dependencies_parsed_at":"2022-09-26T20:11:51.652Z","dependency_job_id":null,"html_url":"https://github.com/phx/brutalist","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phx/brutalist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phx%2Fbrutalist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phx%2Fbrutalist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phx%2Fbrutalist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phx%2Fbrutalist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phx","download_url":"https://codeload.github.com/phx/brutalist/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phx%2Fbrutalist/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259465729,"owners_count":22862170,"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","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":[],"created_at":"2024-12-01T10:50:14.034Z","updated_at":"2025-06-12T12:35:30.198Z","avatar_url":"https://github.com/phx.png","language":"Python","readme":"![Platform: ALL](https://img.shields.io/badge/platform-ALL-green)\n![Dependencies: python3+](https://img.shields.io/badge/dependencies-python3+-blue)\n![Version: 1.7.1](https://img.shields.io/badge/version-1.7.1-green)\n![Follow @rubynorails on Twitter](https://img.shields.io/twitter/follow/rubynorails?label=follow\u0026style=social)\n\n\n![brutalist](https://raw.githubusercontent.com/phx/brutalist/master/brutalist.png)\n\n# brutalist\n`brutalist` is a python3-based command line tool for all platforms that can be used to generate quick and large word lists from one or more sample passwords provided by the user.\n\n### Use case:\nLet's say you come across an outdated password in an old credential dump, but the user has since updated their password (`password`) to `P@$$w0rd123!`.\nIf fed the word `password`, `brutalist` can generate up to a few million unique custom combinations for that specific word.\n`brutalist` uses various methods of leet speak substitution, as well as other common special character substitutions, suffixes, and special character additions -- all while keeping the order of the original characters in the password.\n\n### Notes:\nRunning without the `--limit-special`, `--limit-numbers`, or `--limit` options decreases the number of results to something manageable.\n\nRunning with the `--leet` option increases the number of results exponentially to something quite large.\n\nThe time it takes to return the results depends on the initial password length.\n\n## Install from PyPI:\n`pip3 install --user --upgrade brutalist`\n\n## Install via Homebrew on MacOS:\n`brew install phx/brutalist/brutalist`\n\n## Install via Git:\n1. `git clone https://github.com/phx/brutalist`\n2. `cd brutalist`\n3. `sudo cp brutalist /usr/local/bin/`\n\nYou can just as easily execute it where it stands or manually copy it elsewhere in your `$PATH`.\n\n## Run:\n```\nUsage: brutalist \u003c[password] | -p [password] | -i [input file]\u003e \u003c[extended options]\u003e\n\nOptions:\n       [no params]                             takes input from stdin.\n       [string]                                first argument is used as password.\n       -p | --password                         second argument is used as password.\n       -i | -f | --file [input file]           file is used as input.\n\nExtended Options:\n       -c | --limit-special | --limit-chars    limits special characters to '!@#$%*-+_'\n       -n | --limit-numbers                    only includes common 1 and 2 digit suffixes + special\n       -l | --limit                            limits both 3 digit numbers and special characters\n            --leet                             includes all leet speak combinations (will increase size)\n```\n\n## Examples\n\n- `stdin`from pipe, `stdout` to a file:\n`cat small_list.txt | brutalist \u003e huge_list.txt`\n- `stdin` from input redirection, `stdout` to a file:\n`brutalist \u003c small_list.txt \u003e huge_list.txt`\n- input file as argument, write to both file and `stdout`:\n`brutalist -f /path/to/small_list.txt | tee huge_list.txt`\n\n### Runtime samples for using the password example \"password\":\n```\n---------------------------------------------------------\n$ time echo password | brutalist\n...\nreal    0m30.776s\nuser    0m23.589s\nsys     0m4.892s\n...\n$ echo password | brutalist | wc -l\n 7643680\n---------------------------------------------------------\n$ time echo password | brutalist --leet\n...\nreal    1m1.169s\nuser    0m41.930s\nsys     0m9.094s\n...\n$ echo password | brutalist | wc -l\n 13198680\n---------------------------------------------------------\n$ time echo password | brutalist --limit-special\n...\nreal    0m16.423s\nuser    0m11.681s\nsys     0m2.582s\n...\n$ echo password | brutalist --limit-special | wc -l\n 3821840\n---------------------------------------------------------\n$ time echo password | brutalist --limit-numbers\n...\nreal    0m0.633s\nuser    0m0.439s\nsys     0m0.109s\n...\n$ echo password | brutalist --limit-numbers | wc -l\n  134160\n---------------------------------------------------------\n$ time echo password | brutalist --limit\n...\nreal    0m0.352s\nuser    0m0.234s\nsys     0m0.059s\n...\n$ echo password | brutalist --limit | wc -l\n   68800\n---------------------------------------------------------\n```\n### 10 random samples from password example \"boot\":\n```\n$ time echo boot | ./brutalist.py --leet | sort -R | head -10\n13oOT225)\n3oO7721)\nBOO7791.\n130Ot814%\nb0O+538.\nB0OT059\u0026\n13Oot786=\n3OOt899)\n3OO+631!\nB0O+313]\n\nreal    1m40.766s\nuser    1m41.305s\nsys    0m0.491s\n```\n\n### Background\nI started out in C before realizing that Python would do a much better job, and it's still pretty fast when it comes to generating these word lists.\n\nI wrote this over the course of a few hours because it was something I had been thinking about that solved a particular use-case I had come across on multiple occasions, and while BurpSuite Pro offers some similar functionality, you have to fool around with it every time to get something close to what you want, as opposed to just running a simple command using `brutalist` . \n\n### Contribution\nIf you want to contribute or help clean up and optimize some code, feel free to submit a pull request.\n\n### Disclaimer\nBy downloading and running this software, you agree to only use it for ethical purposes and also agree to be held fully liable and accountable for any damage or harm caused by using `brutalist`.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphx%2Fbrutalist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphx%2Fbrutalist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphx%2Fbrutalist/lists"}