{"id":13583568,"url":"https://github.com/phoqe/havelock","last_synced_at":"2025-04-10T20:10:56.377Z","repository":{"id":38173997,"uuid":"237613901","full_name":"phoqe/havelock","owner":"phoqe","description":"Extract accounts, cookies, and history from Chromium-based web browsers.","archived":false,"fork":false,"pushed_at":"2022-12-10T22:04:10.000Z","size":1121,"stargazers_count":26,"open_issues_count":16,"forks_count":2,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2024-05-01T17:25:47.429Z","etag":null,"topics":["brave","browser","chrome","chromium","cookies","google","history","password","web"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/phoqe.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":".github/funding.yml","license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/codeowners","security":null,"support":null},"funding":{"github":"phoqe"}},"created_at":"2020-02-01T12:47:33.000Z","updated_at":"2024-04-20T06:50:50.000Z","dependencies_parsed_at":"2023-01-26T09:30:24.600Z","dependency_job_id":null,"html_url":"https://github.com/phoqe/havelock","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoqe%2Fhavelock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoqe%2Fhavelock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoqe%2Fhavelock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoqe%2Fhavelock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phoqe","download_url":"https://codeload.github.com/phoqe/havelock/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248288357,"owners_count":21078903,"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":["brave","browser","chrome","chromium","cookies","google","history","password","web"],"created_at":"2024-08-01T15:03:35.707Z","updated_at":"2025-04-10T20:10:56.358Z","avatar_url":"https://github.com/phoqe.png","language":"JavaScript","funding_links":["https://github.com/sponsors/phoqe"],"categories":["JavaScript"],"sub_categories":[],"readme":"# Havelock\n\nExtract and decrypt accounts, cookies, and history from web browsers based on Chromium. Havelock was initially developed as part of a remote administration tool for harvesting accounts from a computer and sending them to a remote endpoint securely. It’s now available as an API in JavaScript and a standalone CLI.\n\n## Verified Web Browsers\n\nEvery web browser using the same storage mechanism for user data is supported. These are the verified web browsers:\n\n| Name                 | API            | Platform(s)           |\n| -------------------- | -------------- | --------------------- |\n| Chromium             | `chromium`     | Windows, macOS, Linux |\n| Google Chrome Stable | `chrome`       | Windows, macOS, Linux |\n| Google Chrome Beta   | `chromeBeta`   | Linux                 |\n| Google Chrome Dev    | `chromeDev`    | Linux                 |\n| Google Chrome Canary | `chromeCanary` | Windows, macOS        |\n| Brave Stable         | `brave`        | Windows, macOS, Linux |\n\n### Adding a browser\n\nFeel free to add support for more browsers through a Pull Request. To get started, take a look at the existing browser definitions in [`/browsers`](browsers). The gist of adding a browser is simple. You need to figure out the Keychain credentials and provide a path resolution that works on Windows, macOS, and Linux.\n\n## String Decryption\n\nYou can decrypt strings retrieved from your web browser using Havelock.\n\n| Platform | Algorithm   | Supported | Source                                                                                                                  |\n| -------- | ----------- | --------- | ----------------------------------------------------------------------------------------------------------------------- |\n| Windows  | AES-256-GCM | No        | [`os_crypt_win.cc`](https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_win.cc)     |\n| macOS    | AES-128-CBC | Yes       | [`os_crypt_mac.mm`](https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_mac.mm)     |\n| Linux    | AES-128-CBC | Yes       | [`os_crypt_linux.cc`](https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_linux.cc) |\n\n## API\n\nThe Havelock API is available in JavaScript. You can only use it from a Node.js environment.\n\n### Installation\n\nHavelock is available as `havelock` in npm. Use your favorite package manager to install it for your Node.js project:\n\n```sh\nyarn add havelock\n```\n\n### Usage\n\nUsing the Havelock API is quick and easy.\n\n#### Extracting data\n\nHere’s an example of retrieving data from the `logins` table in the `Login Data` file of the `Default` profile in Google Chrome:\n\n```js\nconst havelock = require(\"havelock\");\n\nconst explorer = havelock.explorer;\nconst browser = havelock.browser;\n\nexplorer\n  .dataFromUserDataDirectoryFile(browser.chrome, \"Default\", \"Login Data\", \"logins\")\n  .then((logins) =\u003e {\n    console.info(logins);\n  })\n  .catch((reason) =\u003e {\n    console.error(reason);\n  });\n```\n\nThere are also shorthands available for interesting files. You can achieve the same result using this shorter function:\n\n```js\nexplorer\n  .logins(browser.chrome, \"Default\")\n  .then((logins) =\u003e {\n    console.log(logins);\n  })\n  .catch((reason) =\u003e {\n    console.error(reason);\n  });\n```\n\n#### Decrypting data\n\nHavelock can decrypt passwords and credit cards numbers. Here’s an example of decrypting a password from the `logins` table in the `Login Data` file of the `Default` profile of Google Chrome:\n\n```js\nconst crypto = havelock.crypto;\n\nexplorer\n  .dataFromUserDataDirectoryFile(browser.chrome, \"Default\", \"Login Data\", \"logins\")\n  .then((logins) =\u003e {\n    logins.forEach((login) =\u003e {\n      crypto\n        .decrypt(browser.chrome, login.password_value)\n        .then((value) =\u003e {\n          console.log(value);\n        })\n        .catch((reason) =\u003e {\n          console.error(reason);\n        });\n    });\n  })\n  .catch((reason) =\u003e {\n    console.error(reason);\n  });\n```\n\n## CLI\n\nHavelock is also available as a standalone CLI. It can be used separately to execute commands on the local machine.\n\n### Installation\n\nThe Havelock CLI can be included by using your favorite package manager to install it globally:\n\n```sh\nyarn global add havelock\n```\n\n### Usage\n\nThe command `havelock` should now be available globally throughout your system. You can see the commands and options with:\n\n```sh\nhavelock --help\n```\n\n### Extracting data\n\nYou can retrieve your logins from the default profile in Google Chrome with:\n\n```sh\nhavelock logins chrome default\n```\n\nIf you want a more filtered version of the output, i.e. interesting data points, you can use the option `-t`:\n\n```sh\nhavelock logins chrome default -t\n```\n\n### Decrypting data\n\nUse the option `-d` if you want to decrypt fields known to be encrypted.\n\n## Attribution\n\nThank you to David Sheldrick ([ds300](https://github.com/ds300)) for passing on the package name.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoqe%2Fhavelock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphoqe%2Fhavelock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoqe%2Fhavelock/lists"}