BinaryCookies
BinaryCookies copied to clipboard
Read and write Apple's .binarycookies files
BinaryCookies
Read and write Apple's .binarycookies files
Includes the BinaryCookies library and the dumpcookies
executable.
Install dumpcookies
with brew install interstateone/formulae/dump-cookies
or build from source.
I've tested the BinaryCookies library with real-world .binarycookies files and generated files using the HTTPCookieStorage APIs. It's able to decode and re-encode these files with full fidelity, although there are currently two flags with unknown meanings.
File Format
File
Field | Endianness | Type | Size | Description |
---|---|---|---|---|
Magic | BE | UTF-8 | 4 | "cook", no terminator |
Number of pages | BE | Unsigned Int | 4 | |
Page N size | BE | Unsigned Int | 4 | Repeat for N pages |
Page N | Page N size | Page N content | ||
Checksum | BE | Unsigned Int | 4 | Sum every 4th byte for each page |
Footer | BE | 8 | 0x071720050000004b | |
Metadata | Binary Property List | Contains NSHTTPCookieAcceptPolicy value |
Page
Field | Endianness | Type | Size | Description |
---|---|---|---|---|
Header | BE | 4 | 0x00000100 | |
Number of cookies | LE | Unsigned Int | 4 | |
Cookie N offset | LE | Unsigned Int | 4 | Repeat for N cookies |
Footer | 4 | 0x00000000 | ||
Cookie N | Cookie N size | Cookie N content |
Cookie
Field | Endianness | Type | Size | Description |
---|---|---|---|---|
Size | LE | Unsigned Int | 4 | Size in bytes |
Version | LE | Unsigned Int | 4 | 0 or 1 |
Flags | LE | Bit field | 4 | isSecure = 1, isHTTPOnly = 1 << 2, unknown1 = 1 << 3, unknown2 = 1 << 4 |
Has port | LE | Unsigned Int | 4 | 0 or 1 |
URL Offset | LE | Unsigned Int | 4 | Offset from the start of the cookie |
Name Offset | LE | Unsigned Int | 4 | Offset from the start of the cookie |
Path Offset | LE | Unsigned Int | 4 | Offset from the start of the cookie |
Value Offset | LE | Unsigned Int | 4 | Offset from the start of the cookie |
Comment Offset | LE | Unsigned Int | 4 | Offset from the start of the cookie, 0x00000000 if not present |
Comment URL Offset | LE | Unsigned Int | 4 | Offset from the start of the cookie, 0x00000000 if not present |
Expiration | LE | Double | 8 | Number of seconds since 00:00:00 UTC on 1 January 2001 |
Creation | LE | Double | 8 | Number of seconds since 00:00:00 UTC on 1 January 2001 |
Port | LE | Unsigned Int | 2 | Only present if the "Has port" field is 1 |
Comment | LE | String | Null-terminated, optional | |
Comment URL | LE | String | Null-terminated, optional | |
URL | LE | String | Null-terminated | |
Name | LE | String | Null-terminated | |
Path | LE | String | Null-terminated | |
Value | LE | String | Null-terminated |
Reference
- http://www.securitylearn.net/2012/10/27/cookies-binarycookies-reader/
- https://it.toolbox.com/blogs/locutus/understanding-the-safari-cookiesbinarycookies-file-format-010712