{"action":"created","issue":{"url":"https://api.github.com/repos/magnumripper/JohnTheRipper/issues/998","labels_url":"https://api.github.com/repos/magnumripper/JohnTheRipper/issues/998/labels{/name}","comments_url":"https://api.github.com/repos/magnumripper/JohnTheRipper/issues/998/comments","events_url":"https://api.github.com/repos/magnumripper/JohnTheRipper/issues/998/events","html_url":"https://github.com/magnumripper/JohnTheRipper/issues/998","id":53356928,"number":998,"title":"Implement \"unrule\"","user":{"login":"magnumripper","id":1268598,"avatar_url":"https://avatars.githubusercontent.com/u/1268598?v=3","gravatar_id":"","url":"https://api.github.com/users/magnumripper","html_url":"https://github.com/magnumripper","followers_url":"https://api.github.com/users/magnumripper/followers","following_url":"https://api.github.com/users/magnumripper/following{/other_user}","gists_url":"https://api.github.com/users/magnumripper/gists{/gist_id}","starred_url":"https://api.github.com/users/magnumripper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/magnumripper/subscriptions","organizations_url":"https://api.github.com/users/magnumripper/orgs","repos_url":"https://api.github.com/users/magnumripper/repos","events_url":"https://api.github.com/users/magnumripper/events{/privacy}","received_events_url":"https://api.github.com/users/magnumripper/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/magnumripper/JohnTheRipper/labels/enhancement","name":"enhancement","color":"bfe5bf"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":8,"created_at":"2015-01-05T01:41:48Z","updated_at":"2015-01-08T17:37:24Z","closed_at":null,"body":"Brainstorming...\r\n\r\nSay you had a utility you could run like this:\r\n```\r\n./unrule --rules=jumbo --input-enc:utf8 --internal-enc:cp1252 rockyou.txt > rockyou-jumbo.txt\r\n```\r\n\r\nGoal: Produce the smallest possible wordlist that will still cover 100% of rockyou.txt when run with --rules=jumbo\r\n\r\nOne thing that makes this project interesting is we can actually start out pretty rough (even just supporting a single rule) and best-effort and improve it over time. Even if not perfect it will never be a bad thing.\r\n\r\nI initially thought this would be a perl script - but then we'd need to port a whole lot of code to perl for reading config files and include directives, and pre-processing rules. And possibly even support those encoding options."},"comment":{"url":"https://api.github.com/repos/magnumripper/JohnTheRipper/issues/comments/69216678","html_url":"https://github.com/magnumripper/JohnTheRipper/issues/998#issuecomment-69216678","issue_url":"https://api.github.com/repos/magnumripper/JohnTheRipper/issues/998","id":69216678,"user":{"login":"magnumripper","id":1268598,"avatar_url":"https://avatars.githubusercontent.com/u/1268598?v=3","gravatar_id":"","url":"https://api.github.com/users/magnumripper","html_url":"https://github.com/magnumripper","followers_url":"https://api.github.com/users/magnumripper/followers","following_url":"https://api.github.com/users/magnumripper/following{/other_user}","gists_url":"https://api.github.com/users/magnumripper/gists{/gist_id}","starred_url":"https://api.github.com/users/magnumripper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/magnumripper/subscriptions","organizations_url":"https://api.github.com/users/magnumripper/orgs","repos_url":"https://api.github.com/users/magnumripper/repos","events_url":"https://api.github.com/users/magnumripper/events{/privacy}","received_events_url":"https://api.github.com/users/magnumripper/received_events","type":"User","site_admin":false},"created_at":"2015-01-08T17:37:24Z","updated_at":"2015-01-08T17:37:24Z","body":"I mean if we are to keep a list from each unrule to process later, we'll have 4M lists...\r\n\r\nBut perhaps my example is bad. Given an original wordlist of\r\n```\r\npassword\r\nPassword\r\npassword123\r\nPassword456\r\n```\r\nAfter processing \"Capitalize\" we could definitely drop \"Password\" for good. And after processing \"append3\" (with no \"memory\" of the previous operation except our one list is shorter now) we could definitely *change* the words with numbers in the end to not have them. And *this re-inserts \"Password\"*. So we'd end up with\r\n```\r\npassword\r\nPassword\r\n```\r\n"}}