2014-11-29 2 views
3

Из man page of memfrob:Вопросы, касающиеся проектирования и использования функции memfrob

void *memfrob(void *s, size_t n); 

Функция memfrob() шифрует первые п байт области памяти ами по эксклюзивным -Использование каждого символа с номером 42. Эффект можно отменить, используя memfrob() в области зашифрованной памяти.

Обратите внимание, что эта функция не является надлежащей процедурой шифрования, поскольку постоянная константа XOR является фиксированной и подходит только для скрытия строк.

У меня есть следующие вопросы, касающиеся memfrob функции:

  1. Почему XORing сделано с номером 42?
  2. Есть ли причина, по которой фиксируется постоянная XOR, и почему разработчики memfrob не оставили выбор константы для пользователя?
  3. В каком смысле он подходит для скрытия строк? Поскольку он может быть отменен и поэтому не должен использоваться в приложениях, где важно шифрование, на что он используется на практике?
+0

Было бы полезно знать причины для этого вопроса. – syntagma

+0

1) Может быть любым другим, кроме специального номера, например 0. – BLUEPIXY

+0

2) расшифровка, если так может дать ключ, также проще в использовании. – BLUEPIXY

ответ

1

Цель memfrob() (если вы хотите назвать это цель), чтобы скрыть строки, так что вы их не видите, когда вы запускаете strings. Это может быть полезно, когда ваш двоичный файл содержит пароли открытого текста, и вы хотите остановить любопытных людей, чтобы узнать, что это за пароли. Конечно, нетрудно взломать XOR-by-42, но это лучше, чем ничего.

Число в XOR с может быть произвольным, но оно должно оставаться постоянным по последовательным выпускам glibc, поэтому код, который зависит от числа 42, не прерывается.

Некоторые считают, что memfrob() является шуткой, но я не уверен, действительно ли это так. Тем не менее, вы не должны использовать его, потому что это не стандартная функция (и, следовательно, недоступна на платформах без glibc) и потому, что обфускация не является заменой надлежащей безопасности.

0

Использование memfrob() для шифрования/дешифрования вашего пароля в памяти не очень хорошо. Как упоминалось выше, эта функция обрабатывается в памяти системы. Например, если вы используете простой отладчик, например gdb, и помещая точку останова в функцию memfrob(), значения могут быть легко прочитаны.