{"id":22075769,"url":"https://github.com/trigger-segfault/unhash_name","last_synced_at":"2025-03-23T20:12:53.189Z","repository":{"id":87735841,"uuid":"352372906","full_name":"trigger-segfault/unhash_name","owner":"trigger-segfault","description":"Brute-force CRC-32 hashes of ASCII names.","archived":false,"fork":false,"pushed_at":"2021-04-23T22:22:19.000Z","size":333,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-29T03:37:11.356Z","etag":null,"topics":["crc-32","hash","reverse"],"latest_commit_sha":null,"homepage":"","language":"C","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/trigger-segfault.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}},"created_at":"2021-03-28T15:59:02.000Z","updated_at":"2022-09-04T08:40:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"508e904f-671c-4413-b81b-f422d4a3059e","html_url":"https://github.com/trigger-segfault/unhash_name","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trigger-segfault%2Funhash_name","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trigger-segfault%2Funhash_name/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trigger-segfault%2Funhash_name/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trigger-segfault%2Funhash_name/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trigger-segfault","download_url":"https://codeload.github.com/trigger-segfault/unhash_name/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245162194,"owners_count":20570692,"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":["crc-32","hash","reverse"],"created_at":"2024-11-30T22:11:11.258Z","updated_at":"2025-03-23T20:12:53.167Z","avatar_url":"https://github.com/trigger-segfault.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# unhash\\_name #\n\nA tool for brute-forcing recovery of CRC-32 hashed ASCII names, when supplied the resulting accumulator (CRC output) and optional static prefixes and postfixes.\n\n\n## Usage\n\n```bat\nusage: unhash.exe \u003cACCUM\u003e [PRE=] [POST=] [MAX=16] [MIN=0] [CHARSET=a-z_0-9]\n\narguments:\n  ACCUM    target CRC-32 result to match (accepts hex prefix '0x' and '$')\n  PRE      constant ASCII name prefix\n  POST     constant ASCII name postfix\n  MAX      maximum character length to test\n  MIN      minimum character length to test\n  CHARSET  list of characters for pattern (accepts ranges and '\\' escapes)\n```\n\nCharset is defined similarly to a Regex range: *(`[a-z_]`)*. For example: `A-z` will be substituted with a range of all ASCII characters from `A` - `z`, *including* the symbols that appear between the upper and lowercase letters.\n\nCharacters *not* next to a dash will include only themselves. Use `\\\\` to define a backslash, and `\\-` to define a dash. To work with the full ASCII range, use \"` -~`\" or \"`!-~`\" to skip space.\n\n### Examples\n\n```bat\nC:\\\u003eunhash $a3d0623b \"_start\" \"@\" 7 1 \"a-z_\"\ncharset = \"abcdefghijklmnopqrstuvwxyz_\"\naccum = 0xa3d0623b, init = 0x1541b913, target = 0x63083f04\ndepth = 1\ndepth = 2\ndepth = 3\ndepth = 4\n\"_starttime@\"\ndepth = 5\ndepth = 6\ndepth = 7\n^C\n```\n\n## Notes\n\n### Optimizations\n\nIt's much easier to find an unhashed name by throwing common or expected keywords into the prefix and/or postfix.\n\nThe prefix **and now postfix** are only run through CRC-32 once, with that result being fed to -and compared with- all future calls to CRC-32 for the generated names. Both prefix and postfix can be as long as needed without impacting performance.\n\nThe best usage of this tool is not to run once and let it sit. It's recommended to make numerous attempts with manual changes to the constant prefixes, postfixes and character set, until potential results are found.\n\nTrim out unlikely characters from the character set to increase the speed of each depth (length) calculation. This is most optimal when only one letter casing is used. e.g. *`snake_case`* and *`SCREAMING_SNAKE_CASE`*.\n\n### Collisions\n\nBy depth 7 with a character set of `a-z_`, the number of calculations made already surpasses the size of a 32-bit unsigned integer:\n\n`10460353203`\u003cbr\u003e*vs.*\u003cbr\u003e`4294967295`\n\nOnce you hit a length of 8 generated letters, the number of collisions becomes incredibly high. By length 9, it becomes unreasonable to sift through all the garbage collisions (unless your charset is relatively small).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrigger-segfault%2Funhash_name","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrigger-segfault%2Funhash_name","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrigger-segfault%2Funhash_name/lists"}