Спецификации формата файлов cookie Safari 5.1 - PullRequest
7 голосов
/ 25 сентября 2011

изменился способ хранения cookie для SAFARI с SAFARI 5.1 и что они добавляют своего рода код контроля целостности в последних 8 байтах файла:

Файл% APPDATA% \ Apple Computer \ Safari \ Cookies \ Cookies.binarycookies

Кто-нибудь знает, чему соответствуют последние 8 байт?

Проверка CRC32?

Пожалуйста, помогите

Ответы [ 5 ]

17 голосов
/ 19 октября 2011

Cookie.binarycookies:

Я думаю, это будет полезно. Я изменил файл с помощью hex-редактора и начал менять куки.

Общее описание:

Файл состоит из нескольких страниц, каждая из которых может содержать один или несколько файлов cookie. Каждая страница имеет заголовок, который является переменной, 0x10, 0x14 и 0x1c - это общие значения, которые мы можем видеть.

Файл:

Файл начинается с 4-байтового заголовка, который не представляет интереса.

Следующие 4 байта представляют реальный интерес, поскольку они указывают количество страниц в файле.

Тогда у нас есть длина каждой страницы, также представленная 4-байтовым числом. Важно знать, что все эти числа написаны с прямым порядком байтов. Итак, у нас есть 4 * количество страниц байтов, а затем страниц.

У нас есть 8 байтов в конце, которые также не представляют интереса.

Страница:

Каждая страница имеет заголовок, длина которого может меняться от одной страницы к другой. Чтобы узнать длину заголовка, мы должны отбросить первые пять байтов, а следующие 4 байта будут указывать длину заголовка.

После заголовка мы будем иметь длину куки, представленную 4 байтами, упорядоченными в порядке с прямым порядком байтов! Эта длина также включает 4 байта, необходимые для представления длины.

Когда этот файл cookie заканчивается, запускается другой, и так далее до конца страницы.

Cookie:

Дата каждого куки начинается с 0x2B. Дата состоит из 4 байтов, упорядоченных в порядке с прямым порядком байтов. Дата представляется в секундах, но не с эпохи, поэтому нам нужно вычесть это число: 1706047360. (Оно работает только до какого-то дня в 2017 году)

Следующая область интересов начинается с 0x38. Эти поля являются динамическими полями, поэтому они разделены нулевым байтом «0x00» и имеют следующий порядок: имя, значение, URL, путь.

* +1032 * Пример: * 1 033 *

http://i52.tinypic.com/2qcqix2.jpg

Длина всего файла cookie будет 0x82. Рядом с этим файлом cookie будет запущен еще один файл в том же формате, если он соответствует длине страницы.

3 голосов
/ 04 октября 2011

Это не будет точным ответом на ваш вопрос, но, надеюсь, оно поможет понять, что вы пытаетесь сделать.

Вы можете прочитать содержимое двоичного файла cookie, расположенного в ~/Library/Cookies/Cookies.binarycookies, используя класс NSHTTPCookieStorage, как показано в следующем фрагменте:

NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *c in [cookieStorage cookies])
{
    NSLog(@"%@", c);
}
2 голосов
/ 22 ноября 2011

Я написал скрипт MacRuby, чтобы сделать то, что вы ищете:

https://gist.github.com/1385008

#!/usr/bin/env macruby
require 'csv'
framework 'Foundation'

CSV_Headers = %w[domain path expiresDate name value].to_csv

class NSHTTPCookie
  def to_csv
    [domain, path, expiresDate, name, value].to_csv
  end
end

store   = NSHTTPCookieStorage.sharedHTTPCookieStorage
cookies = store.cookies
raw_csv = cookies.map(&:to_csv)

puts CSV_Headers
puts raw_csv.join

Вам необходимо установить MacRuby, но тогда он распечатает ваши куки в формате CSV. Он также может быть легко совместим с cookies.txt.

1 голос
/ 18 августа 2015

Я написал парсер для Swift, который может сделать это для вас. Мне это нужно, потому что NSHTTPCookieStorage.sharedHTTPCookieStorage() не дает вам доступа к глобальным cookie-файлам в песочнице.

https://github.com/icodeforlove/BinaryCookies.swift

Вы можете использовать это так

BinaryCookies.parse(NSHomeDirectory() + "/Library/Cookies/Cookies.binarycookies", callback: {
    (error:BinaryCookiesError?, cookies) in

    if let cookies = cookies {
        print(cookies);
    } else {
        print(error);
    }
});

В настоящее время есть несколько проектов, которые могут сделать это и на других языках:

0 голосов
/ 10 ноября 2015

Я только что получил список URL-адресов от: $ strings Cookies.binarycookies | grep '^A\.' | uniq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...