解密Google时间戳:EI与VED参数的技术解析

本文深入解析Google搜索URL中EI和VED参数的技术原理,详细展示如何从这些参数中提取时间戳信息,并通过实际案例演示解码过程和时间计算,为数字取证提供实用方法。

解密Google时间戳:EI与VED参数的技术解析

EI时间戳

从根本上说,这个想法是你可以使用EI时间戳来近似估算页面被访问的时间。例如,如果你找到这样的URL:

1
https://www.google.com/search?q=search+at+9am+UTC-6+on+22nd+Sept+2024&ei=cDPwZt7ID-fB0PEP5rHJ6A0

你可以提取EI值cDPwZt7ID-fB0PEP5rHJ6A0,然后通过转换找到时间戳Sun 22 Sep 2024 09:10:40 (UTC-6:00),你可以看到这与我执行的搜索时间非常相似。

虽然我从未声称这是页面被访问的准确时间戳,但我相信它可以提供关于此的重要信息。

计算EI时间

对于任何想知道EI时间如何计算的人,让我们从上面取一个EI值: cDPwZt7ID-fB0PEP5rHJ6A0

这是URL安全的Base64,所以我们首先需要将"-“转换为”+","_“转换为”/"。

现在我们有:cDPwZt7ID+fB0PEP5rHJ6A0

这通过Base64解码得到字节:70 33 f0 66 de c8 0f e7 c1 d0 f1 0f e6 b1 c9 e8 0d

我们实际上不需要所有这些字节,因为EI参数中除了时间戳还有更多内容。

我们只需要前4个字节:70 33 f0 66

这可以读取为32位小端序整数值:1727017840

这只是一个常规的UNIX时间戳(自1970年1月1日以来的秒数):22 Sep 2024 15:10:40 (UTC)

VED值

我还将介绍Google的另一个查询字符串参数,因为它与时间戳相关,即VED参数。

我不负责解码这个值或弄清楚关于它的任何信息,我会引导你到Ryan Benson出色的unfurl工具和博客获取更多信息。

为了概述它,就像EI值一样,VED值是查询字符串中的一个参数,包含几个信息片段。

如果我们回头看之前的URL,我们可以找到ved值:

1
https://www.google.com/search?q=search+at+9am+UTC-6+on+22nd+Sept+2024&ved=0ahUKEwjewI7n6taIAxXnIDQIHeZYEt0Q4dUDCBg

所以,专注于VED值:0ahUKEwjewI7n6taIAxXnIDQIHeZYEt0Q4dUDCBg

第一步是删除第一个字符,它指的是VED的版本。这给我们留下:ahUKEwjewI7n6taIAxXnIDQIHeZYEt0Q4dUDCBg

这是一个base64值,可以转换为十六进制:6a 15 0a 13 08 de c0 8e e7 ea d6 88 03 15 e7 20 34 08 1d e6 58 12 dd 10 e1 d5 03 08 18

*注意,由于base64是URL安全的,你可能需要切换使用的一些字符。

例如,base64字符串中出现的任何"_“需要替换为”+","-“需要替换为”/"。

一旦你有了base64解码,你可以发现它是一个需要进一步解码的protbuf blob:

其中一个值可以看到是1727017840255070,这是自1970年1月1日以来的微秒数。

这计算出来是2024-09-22 3:10:40 PM (UTC),减去我的时区6小时,得到09:10:40,这与EI时间戳值相同。

它们意味着什么?

好的,很酷。所以现在我们知道了它在哪里以及如何计算出来,它意味着什么。

我将通过加载一个全新的浏览器窗口并访问www.google.com开始。

我在正好10:08:00点击了Google URL。

然后我等待了1分钟,在正好10:09:00执行了搜索。

加载的URL是:

1
https://www.google.com/search?q=10%3A09%3A00&ei=4EDwZpP9D7zA0PEPk8O3mAw&ved=0ahUKEwiT7bfP99aIAxU8IDQIHZPhDcMQ4dUDCBg

在正好10:10:00,我点击了结果第2页的链接。

加载的URL是:

1
https://www.google.com/search?q=10:09:00&ei=HEHwZqzpE8Xm0PEPvoOl-Qg&ved=2ahUKEwis54ns99aIAxVFMzQIHb5BKY8Q8tMDegQIBRAE

现在这些就够了。让我们来计算这些。

第1页(在10:09:00加载)

  • EI = 4EDwZpP9D7zA0PEPk8O3mAw = 2024-09-22 10:08:00 (UTC -6:00)
  • VED = ahUKEwiT7bfP99aIAxU8IDQIHZPhDcMQ4dUDCBg = 2024-09-22 10:08:00 PM (UTC-6)

第2页(在10:10:00加载)

  • EI = HEHwZqzpE8Xm0PEPvoOl-Qg = 2024-09-22 10:09:00 (UTC -6:00)
  • VED = ahUKEwis54ns99aIAxVFMzQIHb5BKY8Q8tMDegQIBRAE = 2024-09-22 10:09:00 (UTC-6:00)

你会注意到,对于两个页面,EI和VED时间戳中显示的时间正好比页面实际被访问的时间早1分钟。

这既是预期的,也完全合理。

深入分析

现在让我们后退一步,在10:57:00重新加载初始Google页面。

我可以使用页面检查器工具查看页面背后的HTML代码。在这里我找到一个名为"ei"的隐藏字段,值为XEzwZtH3CMWO0PEP5PWvyAI

我还可以看到许多带有"data-ved"属性的字段,它们都有类似的值。

EI字段中的值可以计算为2024-09-22 10:57:00 (UTC -6:00)

data-ved字段中的值可以计算为2024-09-22 10:57:00 (UTC-6)

当我最终在11:02:00提交搜索时,我被带到的URL是:

1
https://www.google.com/search?q=submit+at+11%3A02%3A00&ei=XEzwZtH3CMWO0PEP5PWvyAI&ved=0ahUKEwjRlaTJgteIAxVFBzQIHeT6CykQ4dUDCBg

注意URL中的EI和VED值等于初始页面中的EI和VED值(减去最后几个字符)。

我不会在这里计算这些,因为我们已经知道它们是什么。

然而,我会查看这个新加载页面的HTML,特别再次查找EI和data-VED字段。

  • EI = 2024-09-22 11:02:00 (UTC -6:00)
  • VED = 2024-09-22 11:02:00 (UTC -6:00)

在11:18:00,我访问了第2页,这带我到了URL:

1
https://www.google.com/search?q=submit+at+11:02:00&ei=iE3wZsC8Fciv0PEP7Oqy8Qg&ved=2ahUKEwjAoLfYg9eIAxXIFzQIHWy1LI4Q8tMDegQIBRAE

这里,EI匹配,大部分VED匹配。同样,最后几个字符不同,但版本字符也不同。无论如何,日期计算出来是相同的。

结论

本质上,当页面加载时,页面加载的时间被嵌入到页面本身。当下一个页面加载时,时间戳作为URL的一部分传递。

这意味着从查询字符串中的EI或VED值解析的时间戳是上一个页面加载的时间,不应误认为是这个页面加载的时间。

但它仍然可能有用。

如果你不需要秒级精确的时间戳,那么这个数据通常足够好,因为你可以通常假设页面在显示的时间戳之后不久被访问。

但这里有一个巨大的警告。

如果我打开一个几天没用的页面并再次开始使用它呢?如果我上次使用页面是几周或几个月前呢?在这些情况下,时间戳可能比我实际访问该页面的时间早几个月。

总结

与许多事情一样,这个时间戳不是Google为了我们的利益而放在那里的。对Google来说,知道你在离开前在页面上花费了多长时间可能很有用。但这并不真正使它对我们有用。

我们正在用我们拥有的东西做到最好,虽然我仍然认为它可能是一个相当有价值的工件,但当被问及它有多准确时,唯一的答案是"视情况而定"。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计