2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Алгоритм проверка лицензии
Сообщение15.01.2013, 16:26 
Аватара пользователя


27/10/10
80
Добрый день, мне сказали что все гуру булевой алгебры тусуются здесь и я надеюсь что они гуру не только в алгебре, но и просто хорошие люди.

У меня такой вопрос.

Допустим у меня есть некоторый участок кода программы который я хочу защитить от модификации. Для этого я сделал его хэш-код (md5).

Могу ли я хранить md5 хэш в этом участке, если да, то как написать такую программу?

С наилучшими пожеланиями.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение15.01.2013, 20:41 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Простой хэш никто не мешает поменять вместе с этим участком кода. К тому же, MD5 не секьюрен по современным меркам. То, что Вам нужно, называется цифровая подпись.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение16.01.2013, 08:21 
Аватара пользователя


27/10/10
80
Xaositect в сообщении #672059 писал(а):
Простой хэш никто не мешает поменять вместе с этим участком кода. К тому же, MD5 не секьюрен по современным меркам. То, что Вам нужно, называется цифровая подпись.


Добрый день, меня интересует метод которым я могу воспользоваться для написания самоверифицирующегося участка кода.

Что именно мне нужно сделать для написания такого кода?

hex, md5, rsa - это все цифровая подпись и роли не играет.

-- Ср янв 16, 2013 09:25:09 --

Xaositect в сообщении #672059 писал(а):
Простой хэш никто не мешает поменять вместе с этим участком кода. К тому же, MD5 не секьюрен по современным меркам. То, что Вам нужно, называется цифровая подпись.


Интересует решение такой задачи, для оценки сложности вычисления и замены нового хэша.

-- Ср янв 16, 2013 09:27:29 --

Xaositect в сообщении #672059 писал(а):
Простой хэш никто не мешает поменять вместе с этим участком кода. К тому же, MD5 не секьюрен по современным меркам. То, что Вам нужно, называется цифровая подпись.


Уровень секьюрности алгоритма может быть любой, hex тоже подойдет.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение16.01.2013, 17:06 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Это все сильно платформозависимо. Например, в gcc на x86/x86_64 (и на многих других платформах, наверное, тоже) указатель на функцию можно скастовать к (char *) и получить доступ (на чтение) к машинному коду этой функции. после этого можете от него и хэш считать. Еще можно ассемблерные вставки делать.

 Профиль  
                  
 
 Posted automatically
Сообщение16.01.2013, 17:17 
Супермодератор
Аватара пользователя


20/11/12
5728
 i  Тема перемещена из форума «Математика (общие вопросы)» в форум «Computer Science»
Перенёс в соответствующий раздел

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение17.01.2013, 08:03 
Аватара пользователя


27/10/10
80
Xaositect в сообщении #672406 писал(а):
Это все сильно платформозависимо. Например, в gcc на x86/x86_64 (и на многих других платформах, наверное, тоже) указатель на функцию можно скастовать к (char *) и получить доступ (на чтение) к машинному коду этой функции. после этого можете от него и хэш считать. Еще можно ассемблерные вставки делать.


Нет гарантии целостности проверяющего блока.

Платформа тоже роли не играет. Вот формулировка задачи с математической точки зрения. Можно или нельзя написать такую программу?


Хэш это результат функции от некоторой последовательности байт.

Интересует может ли эта последовательность байт содержать последовательность эквивалентную хэшу.

Если нет, то есть ли такие функции, которые могут выдавать результат включенный в исходную последовательность. Интересуют функции кроме функции равенства естественно.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение17.01.2013, 21:40 


27/11/10
207
Вероятно, что в компилируемых языках такого сделать просто не получится по нескольким причинам. Во-первых всё в итоге будет в байт-коде, не могут представить себе, как вы собираетесь сравнивать хэш для исходного кода и результат какой-то функции от байт-кода (не учитывая, что его ещё необходимо будет найти в исполняемом файле). Сильная зависимость от компилятора, конечной платформы, выставления различных ключей в компиляторе. Может как-то получится изощрится с повторной компиляцией исходника в объектный файл, но опять же зависимость от конечной платформы.
Также можно подумать в сторону модификации куайнов.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение18.01.2013, 08:05 
Аватара пользователя


27/10/10
80
Taus в сообщении #672932 писал(а):
Вероятно, что в компилируемых языках такого сделать просто не получится по нескольким причинам. Во-первых всё в итоге будет в байт-коде, не могут представить себе, как вы собираетесь сравнивать хэш для исходного кода и результат какой-то функции от байт-кода (не учитывая, что его ещё необходимо будет найти в исполняемом файле). Сильная зависимость от компилятора, конечной платформы, выставления различных ключей в компиляторе. Может как-то получится изощрится с повторной компиляцией исходника в объектный файл, но опять же зависимость от конечной платформы.
Также можно подумать в сторону модификации куайнов.


Я думаю вычислять хэш динамически.

Функция определяет начало и конец своего тела, затем вычисляет хэш, затем вызывает некую функцию x, сравнивает полученные два значения, если все ok, то контроль целостности завершен, если значения не равны значит одна из функцию повреждена(модифицирована).

Для еще большей надежности я этот код выполняю в памяти.

А раз уж зашел разговор зашел о реализации, то все это делается на виртуальной машине, что бы совсем хакеру мозги свернуть ->B^E

Куайны - это не опечатка?

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение18.01.2013, 12:37 


27/11/10
207
b099ard скажите для начала на каком языке вы пишите.
b099ard в сообщении #673046 писал(а):
Функция определяет начало и конец своего тела, затем вычисляет хэш, затем вызывает некую функцию x, сравнивает полученные два значения, если все ok, то контроль целостности завершен, если значения не равны значит одна из функцию повреждена(модифицирована).

Вот хэш чего во время выполнения вы собираетесь вычислять?
b099ard в сообщении #673046 писал(а):
Куайны - это не опечатка?

Скопировал перевод с википедии.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение21.01.2013, 08:13 
Аватара пользователя


27/10/10
80
Taus в сообщении #673118 писал(а):
b099ard скажите для начала на каком языке вы пишите.
b099ard в сообщении #673046 писал(а):
Функция определяет начало и конец своего тела, затем вычисляет хэш, затем вызывает некую функцию x, сравнивает полученные два значения, если все ok, то контроль целостности завершен, если значения не равны значит одна из функцию повреждена(модифицирована).

Вот хэш чего во время выполнения вы собираетесь вычислять?

Пока сделал так:


строка a = "некоторый код"

строка хэш = хэш строки a


строка б = исходный код некоторой функции:
если параметр 2 неравен хэшу строки а верну ноль
выполнить код в параметре 1

компилируем строку б в память

выполняем код

проверяем результат



b099ard в сообщении #673046 писал(а):
Куайны - это не опечатка?

Скопировал перевод с википедии.


Близко, но теоретически моя задача не имеет решения. См. теорему Дёгеля.

Тему можно считать закрытой.

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение22.01.2013, 07:54 


21/03/06
1545
Москва
Имеет ли смысл поступать следующим образом: в полезный код вставить константу необходимой длины. дополнить полезный код случайным значением хэша. варьируя константу и вычисляя значение хэша от полезного кода + константа + случайный хэш, подобрать ее (константу) значение таким образом, чтобы значение вычисленного хэша совпало со случайно выбранным.

Даст это что-то или нет, не соображу?

 Профиль  
                  
 
 Re: Алгоритм проверка лицензии
Сообщение22.01.2013, 08:09 
Аватара пользователя


27/10/10
80
e2e4 в сообщении #674851 писал(а):
Имеет ли смысл поступать следующим образом: в полезный код вставить константу необходимой длины. дополнить полезный код случайным значением хэша. варьируя константу и вычисляя значение хэша от полезного кода + константа + случайный хэш, подобрать ее (константу) значение таким образом, чтобы значение вычисленного хэша совпало со случайно выбранным.

Даст это что-то или нет, не соображу?


Незнаю. Это вопрос брони и пули. Я использовал принципиально иной подход.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group