为SAFARI存储cookie的方式已经改变了SAFARI 5.1 并且他们添加了一种完整性控制代码 在文件的最后8个字节中:
该文件是%APPDATA%\ Apple Computer \ Safari \ Cookies \ Cookies.binarycookies
有人知道最后8个字节对应的是什么吗?
CRC32检查?
请帮忙
答案 0 :(得分:17)
Cookie.binarycookies:
我认为这会有所帮助。我用十六进制编辑器对文件进行了反转,并开始更改cookie。
该文件由多个页面组成,每个页面内部可以有一个或多个cookie。每个页面都有一个标题,它是可变的,0x10,0x14和0x1c是我们可以看到的常见值。
文件以一个不感兴趣的4字节标头开头。
接下来的4个字节是真正感兴趣的,因为它们表示文件中的页数。
然后我们得到每个页面的长度,也用4个字节的数字表示。重要的是要知道所有这些数字都是用big-endian编写的。因此,我们有4 *个字节页面,然后是页面。
我们最后有8个字节,也没什么兴趣。
每个页面都有一个标题,其长度可以从一个页面更改为另一个页面。要知道标头的长度,我们必须丢弃前五个字节,接下来的4个字节将指示标头的长度。
在标题之后,我们将以4个字节表示cookie的长度,以little-endian排序!该长度还包括表示长度所需的4个字节。
当这个cookie结束时,另一个将开始,依此类推到页面的末尾。
每个cookie的日期从0x2B开始。日期由以little-endian排序的4个字节组成。日期以秒表示,但不是自纪元以来所以我们需要减去这个数字:1706047360。(它只适用于2017年的某一天)
下一个感兴趣的字段从0x38开始。这些字段是动态字段,因此它们由NULL“0x00”字节分隔,并按以下顺序排列:name,value,url,path。
http://i52.tinypic.com/2qcqix2.jpg
整个cookie的长度为0x82。 如果与页面长度相对应,此cookie旁边将以完全相同的格式启动另一个cookie。
答案 1 :(得分:3)
这不能完全回答你的问题,但希望它能触及你想要做的事情的核心。
您可以使用~/Library/Cookies/Cookies.binarycookies
类阅读位于NSHTTPCookieStorage
的二进制Cookie文件的内容,如以下代码段所示:
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *c in [cookieStorage cookies])
{
NSLog(@"%@", c);
}
答案 2 :(得分:2)
我编写了一个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格式打印您的Cookie。它也可以很容易地与cookies.txt兼容。
答案 3 :(得分:1)
我为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);
}
});
目前有一些项目也可以用其他语言来完成:
答案 4 :(得分:0)
我刚收到一份网址列表:
$ strings Cookies.binarycookies | grep '^A\.' | uniq