{"id":28260,"library":"spraycharles","title":"Spraycharles","description":"A low and slow password spraying tool for Active Directory, designed to spray credentials over a long period of time to avoid lockouts. Version 2.0.3 supports OWA, EWS, Teams, and ADFS, with concurrency and retry intervals. Development is active.","status":"active","version":"2.0.3","language":"python","source_language":"en","source_url":"https://github.com/Tw1sm/spraycharles","tags":["password-spraying","active-directory","security","pentesting"],"install":[{"cmd":"pip install spraycharles","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"note":"","wrong":null,"symbol":"SprayRunner","correct":"from spraycharles import SprayRunner"},{"note":"","wrong":null,"symbol":"spraycharles","correct":"import spraycharles"}],"quickstart":{"code":"from spraycharles import SprayRunner\nrunner = SprayRunner(\n    targets=['user@domain.com'],\n    passwords=['Password1', 'Password2'],\n    jitter=10,\n    dur=60\n)\nrunner.run()","lang":"python","description":"Create a SprayRunner with targets, passwords, jitter (seconds), and duration (minutes) to start spraying."},"warnings":[{"fix":"Increase jitter (e.g., 30-60 seconds) and duration (e.g., 120 minutes).","message":"Spraycharles is designed for slow spraying over a long period; setting low jitter or short duration can trigger account lockouts quickly.","severity":"gotcha","affected_versions":">=2.0.0"},{"fix":"Refer to https://github.com/Tw1sm/spraycharles for new YAML schema.","message":"Version 2.0.0 introduced a major rewrite; configuration and API changed from v1. Old config files or YAML structures may not work.","severity":"breaking","affected_versions":">=2.0.0"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"Run: pip install spraycharles","cause":"Library not installed in current Python environment.","error":"ModuleNotFoundError: No module named 'spraycharles'"},{"fix":"Use: from spraycharles import SprayRunner","cause":"Import path changed in v2; SprayRunner is in the top-level package.","error":"AttributeError: module 'spraycharles' has no attribute 'SprayRunner'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}