首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Osquery转换Chrome浏览器历史记录Sqlite时间戳

如何使用Osquery转换Chrome浏览器历史记录Sqlite时间戳
EN

Stack Overflow用户
提问于 2020-04-14 05:46:32
回答 3查看 2K关注 0票数 2

据我所知,Chrome浏览器在浏览器历史数据库中使用WebKit时间格式作为时间戳。自1601年1月以来,WebKit时间以毫秒表示。

我找到了许多文章,似乎对我的问题有答案,但到目前为止还没有一篇有效。常见的答案是使用下面的公式将WebKit转换为人类可读的本地时间:

代码语言:javascript
运行
复制
SELECT datetime((time/1000000)-11644473600, 'unixepoch', 'localtime') AS time FROM table;

资料来源:https://linuxsleuthing.blogspot.com/2011/06/decoding-google-chrome-timestamps-in.html What is the format of Chrome's timestamps?

我尝试在通过Osquery收集数据时转换时间戳,使用下面的配置。

代码语言:javascript
运行
复制
"chrome_browser_history" : {
        "query" : "SELECT urls.id id, urls.url url, urls.title title, urls.visit_count visit_count, urls.typed_count typed_count, urls.last_visit_time last_visit_time, urls.hidden hidden, visits.visit_time visit_time, visits.from_visit from_visit, visits.visit_duration visit_duration, visits.transition transition, visit_source.source source FROM urls JOIN visits ON urls.id = visits.url LEFT JOIN visit_source ON visits.id = visit_source.id",
        "path" : "/Users/%/Library/Application Support/Google/Chrome/%/History",
        "columns" : ["path", "id", "url", "title", "visit_count", "typed_count", "last_visit_time", "hidden", "visit_time", "visit_duration", "source"],
        "platform" : "darwin"
    }

"schedule": {
    "chrome_history": {
    "query": "select distinct url,datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') AS time from chrome_browser_history where url like '%nhl.com%';",
    "interval": 10
    }
}

由此产生的事件具有1600年以来的时间戳:

代码语言:javascript
运行
复制
"time":"1600-12-31 18:46:16"

如果我更改配置以拉取原始时间戳而不进行转换,则会得到如下所示的戳:

代码语言:javascript
运行
复制
"last_visit_time":"1793021894"

从我读到的WebKit时间来看,它是用17位数字表示的,这显然不是我看到的。所以我不确定这是一个Osquery,Chrome,还是查询的问题。感谢所有的帮助和洞察力!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-15 03:34:40

解决了。datetime转换需要在表定义查询中进行。即在"chrome_browser_history“下定义的查询。

代码语言:javascript
运行
复制
"chrome_browser_history" : {
        "query" : "SELECT urls.id id, urls.url url, urls.title title, urls.visit_count visit_count, urls.typed_count typed_count, datetime(urls.last_visit_time/1000000-11644473600, 'unixepoch') last_visit_time, urls.hidden hidden, visits.visit_time visit_time, visits.from_visit from_visit, visits.visit_duration visit_duration, visits.transition transition, visit_source.source source FROM urls JOIN visits ON urls.id = visits.url LEFT JOIN visit_source ON visits.id = visit_source.id",
        "path" : "/Users/%/Library/Application Support/Google/Chrome/%/History",
        "columns" : ["path", "id", "url", "title", "visit_count", "typed_count", "last_visit_time", "hidden", "visit_time", "visit_duration", "source"],
        "platform" : "darwin"
    }

"schedule": {
    "chrome_history": {
    "query": "select distinct url,last_visit_time from chrome_browser_history where url like '%nhl.com%';",
    "interval": 10
    }
}

尝试在osquery调度查询中进行转换(就像我之前尝试的那样)将不会起作用。即:

代码语言:javascript
运行
复制
"schedule": {
"chrome_history": {
"query": "select distinct url,datetime((last_visit_time/1000000)-11644473600, 'unixepoch', 'localtime') AS time from chrome_browser_history where url like '%nhl.com%';",
"interval": 10
}

}

票数 3
EN

Stack Overflow用户

发布于 2020-04-14 19:02:25

尝试:

SELECT datetime(last_visit_time/1000000-11644473600, \"unixepoch\") as last_visited, url, title, visit_count FROM urls;

这是我不久前写的一段代码,它使用ATC配置运行osqueryi,读取chrome历史文件,导出为json,并将json卷曲到API端点。

https://gist.github.com/defensivedepth/6b79581a9739fa316b6f6d9f97baab1f

票数 1
EN

Stack Overflow用户

发布于 2020-04-15 00:07:36

你正在处理的东西,是非常直接的sqlite。因此,我将首先在sqlit中进行调试。

首先,您应该验证数据是否符合您的预期。在我的机器上,我看到:

代码语言:javascript
运行
复制
$ cp   Library/Application\ Support/Google/Chrome/Profile\ 1/History /tmp/
$ sqlite3 /tmp/History "select last_visit_time from urls limit 2"
13231352154237916
13231352154237916

其次,我将验证潜在的数学:

代码语言:javascript
运行
复制
sqlite> select datetime(last_visit_time/1000000-11644473600, "unixepoch") from urls limit 2;
2020-04-14 15:35:54
2020-04-14 15:35:54

如果您将配置片段作为我们可以复制/粘贴的文本包含进来,那么测试它将会更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61197346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档