Я пишу программу (используя Free Pascal, а не C), которая анализирует заголовок файлов eCryptfs.
Одно из значений в заголовке начинается с байта 7 и заканчивается 15 (8-байтовое значение). Это полезно для меня, потому что это значение, которое однозначно определяет файлы как файлы eCryptfs. Поэтому я пытаюсь закодировать свое приложение, чтобы оно распознало его в файлах.
Однако сам маркер генерируется путем XOR'а случайным образом генерируемого 4-байтового значения (X) с другим 4-байтовым статическим шестнадцатеричным значением 0x3c81b7f5 (Y). Сгенерированное значение составляет 4 байта, Z. X + Z вместе образуют специальный 8-байтовый маркер. Сам Y не хранится в заголовке файла. Таким образом, видя, что значение 0x3c81b7f5 (Y) никогда не сохраняется в заголовке, я не могу написать свое приложение для его поиска и видеть, как остальные 4 байта являются результатом XOR одного статического значения с другим случайным Я не могу понять, как это признано.
Спросив, как программа eCryptfs распознает это значение как "файл eCryptfs" на сайте панели запуска eCryptfs (https://answers.launchpad.net/ecryptfs/+question/152821,, одно из сообществ направило меня к соответствующему исходному коду C, с которым я связался ниже. Однако Я недостаточно хорошо понимаю C, чтобы понять, как он распознает специальные маркеры. Может ли кто-нибудь мне помочь, чтобы я мог кодировать такой же процесс распознавания в свое собственное приложение? Я не хочу исходный код, но я просто хочу кто-то, чтобы объяснить, как работает код C: «Ах, да, это файл eCryptfs прямо сейчас!», поэтому я знаю, что мне нужно для написания кода моего приложения.
http://fxr.watson.org/fxr/source/fs/ecryptfs/crypto.c?v=linux-2.6;im=excerpts#L1029