您可以从UUID中提取哪些数据?

Chr*_*ost 21 uuid

我知道我们可以轻松提取uuid版本号.有没有可靠的方法来提取时间戳,MAC地址等信息?

谢谢!

Sec*_*Sec 45

符合标准的UUID可能是多种变体之一,它看起来像这样:

AAAAAAAA - BBBB - CCCC-DDDD-FFFFFFFFFFFF

DDDD部件的第一个(十六进制)数字确定变量.

如果是8,9,A,B之一,则符合当前规范(0-7保留用于向后兼容,C,D保留给Microsoft,E,F保留供将来使用)

如果它符合当前规范,请检查确定UUID版本的CCCC部件的第一个数字:

  1. 基于时间的唯一或随机主机标识符(MAC)
  2. DCE安全版(带POSIX UID)
  3. 基于名称(MD5哈希)
  4. 随机
  5. 基于名称(SHA-1哈希)

版本4只是随机选择.

版本3和5是通过散列并丢弃一些位来生成的,这意味着您基本上没有机会从中恢复任何信息.有关如何构建它的详细信息,请参阅RFC4122UUID Generator网页.

我找不到任何版本2 UUID,所以我没有检查如何提取数据.

版本1由时间戳和当前主机MAC地址生成.(如果您设置MAC地址的"广播/多播"位,该标准也允许使用随机地址.)

以下perl snipped从版本1 uuid解析MAC地址和时间:

my $uuid="AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF";
$uuid=~tr/-//d;
my $time_low=hex substr($uuid,2* 0,2*4);
my $time_mid=hex substr($uuid,2* 4,2*2);
my $version =hex substr($uuid,2* 6,1);
my $time_hi =hex substr($uuid,2* 6+1,2*2-1);

my $time=($time_hi*(2**16)+$time_mid)*(2**32)+$time_low;
my $epoc=int($time /10000000) - 12219292800;
my $nano=$time-int($time/10000000)*10000000;

my $clk_hi  =hex substr($uuid,2* 8,2*1);
my $clk_lo  =hex substr($uuid,2* 9,2*1);
my $node    =substr($uuid,2*10,2*6);

$node=~/^(..)(..)(..)(..)(..)(..)$/ || die;
$node="$1:$2:$3:$4:$5:$6";

print "time: ",scalar localtime $epoc," +",$nano/10000,"ms\n";
print "clock id: ",$clk_hi*256+$clk_lo,"\n";
print "Mac: $node\n";

my $byte=hex $1;
if(hex($1)&1){
    print "broadcast/multicast bit set.\n";
};
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的是,有几个分配的UUID,例如GPT分区.


Dan*_*den 8

不一定是可靠的方式,因为取决于UUID的类型,它可以完全从随机位生成,或者基于时间戳,或者基于MAC地址.所以你可以获得一些信息,但你不能保证你可以得到任何东西.

对此的官方参考是RFC 4122,它应该可以为您提供足够的信息来提取数据,尽管您可能不应该过分依赖它.


Mah*_*mer 6

我知道我们可以轻松提取 uuid 版本号。有没有可靠的方法来提取时间戳、MAC 地址等信息?

是的,是的;如果 UUID 是版本 1 或版本 2(如 RFC 4122 中所述)。还有一个替代(非 RFC 4122)版本 4,称为“COMB”,其中包含可以解析的时间戳(以及随机值),并且可以显示创建日期/时间。

奖励:Mahonri Moriancumer 的UUID 和 GUID 生成器和取证


Luc*_*Luc 6

OSSP UUID工具可以解码所有版本的UUID。在基于 Debian 的 Linux 系统上,您可以使用apt-get install uuid它来安装它;对于其他发行版,包名称可能不同。

要解码 UUID,请使用-d(decode) 标志:

uuid -d AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

对于版本 1 UUID,这给出了 MAC 地址和时间戳——因为这是 v1 uuid 中的内容。


Ste*_*ell 2

您可以查看 Uuid 的版本,但只有在确定 Uuid 有效的情况下才可以信任(请参阅https://www.rfc-editor.org/rfc/rfc4122)。该版本将告诉您拥有哪种 Uuid,并使用它您可以提取特定的信息位。