SAFARI 5.1改变了SAFARI存储cookie的方式,他们在文件的最后8个字节中添加了一种完整性控制代码:
文件为%APPDATA%\Apple Computer\Safari\Cookies\Cookies.binarycookies
有人知道最后8个字节对应的是什么吗?
CRC32检查?
请帮帮忙
发布于 2011-10-19 13:03:29
Cookie.binarycookies:
我想这会有帮助的。我使用十六进制编辑器对文件进行反向工程,并开始更改cookie。
一般描述:
文件由几个页面组成,每个页面中可以有一个或多个cookie。每个页面都有一个头部,它是可变的,0x10、0x14和0x1c是我们可以看到的常见值。
文件:
该文件以不感兴趣的4字节头开始。
接下来的4个字节是真正有意义的,因为它们表示文件中的页数。
然后我们得到每个页面的长度,也是用一个4字节的数字表示的。重要的是要知道,所有这些数字都是以大端字母顺序编写的。因此,我们有4*个字节的页面,然后是页面。
我们在末尾有8个字节,这也是没有意义的。
页面:
每一页都有一个页眉,页眉的长度可以从一页改变到另一页。要知道报头的长度,我们必须丢弃前5个字节,接下来的4个字节将表示报头的长度。
在头部之后,我们将有4个字节表示的cookie的长度,以小端排序!该长度还包括表示该长度所需的4个字节。
当此cookie结束时,将启动另一个cookie,依此类推,直到页面的末尾。
Cookie:
每个cookies的日期从0x2B开始。日期由4个字节组成,按小端排序。日期是以秒为单位表示的,而不是从纪元开始,所以我们需要减去这个数字: 1706047360。(它只适用于2017年的某一天)
下一个感兴趣的字段从0x38开始。这些字段是动态字段,因此它们由空的“0x00”字节分隔,并按以下顺序排列:名称、值、url、路径。
示例:
http://i52.tinypic.com/2qcqix2.jpg
整个cookie的长度将为0x82。在此cookie旁边,将启动另一个格式完全相同的cookie(如果与页面长度一致)。
发布于 2011-10-04 23:31:30
这并不能准确地回答你的问题,但希望它能切中你想要做的事情的核心。
您可以使用NSHTTPCookieStorage类读取位于~/Library/Cookies/Cookies.binarycookies的二进制cookie文件的内容,如以下代码片段所示:
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *c in [cookieStorage cookies])
{
NSLog(@"%@", c);
}发布于 2011-11-22 14:06:55
我已经编写了一个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兼容。
https://stackoverflow.com/questions/7545885
复制相似问题