首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个独特的文件头“特殊标记”如何告诉eCryptfs它是一个eCryptfs文件?

这个独特的文件头“特殊标记”如何告诉eCryptfs它是一个eCryptfs文件?
EN

Stack Overflow用户
提问于 2011-04-26 01:26:22
回答 2查看 436关注 0票数 1

我正在写一个程序(使用免费的Pascal,而不是C)来解析eCryptfs文件头。

报头中的一个值开始于字节7,结束于15 (一个8字节值)。它对我很有用,因为它是唯一地将文件标识为eCryptfs文件的值。因此,我正在尝试编写我的应用程序,当它在文件中找到这样的值时,它会识别它。

然而,标记本身是通过将随机生成的4字节值(X)与另外4字节静态十六进制值0x3c81b7f5 (Y)进行异或而生成的。生成的值是4字节,Z。X+Z一起形成了8字节的特殊标记。Y本身并不存储在文件头中。因此,由于值0x3c81b7f5 (Y)从未存储在头文件中,因此我无法编写应用程序代码来查找它,并且由于其他4个字节是一个静态值与另一个随机值的XOR结果,我不知道它是如何被识别的。

在询问eCryptfs程序如何在eCryptfs Launchpad站点(https://answers.launchpad.net/ecryptfs/+question/152821 )上将该值识别为“eCryptfs文件”时,其中一个社区向我推荐了相关的C源代码,我已经在下面链接到了这些源代码。然而,我对C的理解还不够深入,无法弄清楚它是如何识别特殊标记的。有没有人能帮我把同样的识别过程编码到我自己的应用程序中?我不想要源代码,但我只想有人解释一下C代码是如何工作的:“啊,是的,那是一个eCryptfs文件!”因此,我知道我需要编写我的应用程序来做什么。

http://fxr.watson.org/fxr/source/fs/ecryptfs/crypto.c?v=linux-2.6;im=excerpts#L1029

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-26 01:43:36

你真正感兴趣的是这里的这部分:

代码语言:javascript
复制
m_1 = get_unaligned_be32(data);
m_2 = get_unaligned_be32(data + 4);
if ((m_1 ^ MAGIC_ECRYPTFS_MARKER) == m_2)
    return 1;

get_unaligned_be32函数通过可能的byte order调整将四个字节从data转换为一个无符号的四个字节的整数。第二次调用get_unaligned_be32时,data + 4将传递给get_unaligned_be32的地址上移四个字节:

代码语言:javascript
复制
[0][3][2][4][4][5][6][7]   
^           ^
data        data + 4
m_1         m_2          /* After adjusting byte order */

因此,前两行只是从data的前八个字节中拉出两个无符号整数(可能有固定的字节顺序)。

然后我们有了这个表达式:

代码语言:javascript
复制
(m_1 ^ MAGIC_ECRYPTFS_MARKER) == m_2

^只是XOR运算符,MAGIC_ECRYPTFS_MARKER0x3c81b7f5,所以这个测试是XORing m_1和0x3c81b7f5,看看它是否等于m_2;如果这个比较是真的,那么您就有了正确的文件类型。

票数 4
EN

Stack Overflow用户

发布于 2011-04-26 02:07:11

如果"X +Z一起形成8字节的特殊标记“意味着它们是连接在一起的,那么你会得到以下结果:

代码语言:javascript
复制
Y = 0x3c81b7f5
X = some random value

Z = X ^ Y  (also a random value, due to X being random)

现在,您可以从文件头中获得X和Z。如果将它们进行xor运算,则以下关系成立:

代码语言:javascript
复制
X ^ Z = X ^ (X ^ Y) = Y

因此,您应该得到值0x3c81b7f5。

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

https://stackoverflow.com/questions/5781061

复制
相关文章

相似问题

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