Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.10.2012, 22:58
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
Вопрос Алгоритм защиты окна авторизации

Делаю авторизацию пользователей. Окошко для ввода логина и пароля. Данные пользователя хранятся в БД. Воопрос как лучше реализовать защиту от взлома программы. Программа используется на предприятии, особо защищать не придётся, так как сеть локальная без выхода в интернет, но уж сам вопрос интересный. И вот тут мои размышления:
1. Допустим пароли как таковые я хранить в открытом виде не буду, а будет в базу данных записываться их хэш.
2. При реализации условий логина (нажатие кнопки и обработка сравнения паролей) возможен взлом кода программы с подменой битов (как взламывают экзешники любимых программ).

Весь вопрос в том, как усложнить взлом с использованием подмены бытов самого модуля логина, чтобы логин был неудачен даже при получении true, что якобы пароли совпадают...??????

Все модули, в том числе модуль логина, дата модуль и прочие - это bpl пакеты... Помогите с данным вопросом, первый раз с этим сталкиваюсь...
Спасибо!
Ответить с цитированием
  #2  
Старый 16.10.2012, 23:28
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Почитал тут статейку
http://www.codenet.ru/progr/delphi/stat/delphi.php
и подумал:
хоть и не рекомендует автор делать функции проверки пароля, но
если эту функцию запихнуть в datamodule.bpl и там же сравнивать CRC этого модуля с изначальным, то взломщику не удастся подменить изменить сам модуль... Только вот как получить CRC модуля, не зная его CRC, которое должно быть зашито в сам модуль )))))))))
Ответить с цитированием
  #3  
Старый 17.10.2012, 00:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Например, скомпилить модуль, посчитать CRC, а проверку делать в основной программе, которая компилится после и она уже может знать нужный CRC. Хотя в этом случае нет возможности защитить саму программу... тоже проблема...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
~TB~ (19.10.2012)
  #4  
Старый 17.10.2012, 03:02
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
нет возможности защитить саму программу... тоже проблема...
Посмотри, как сделано у Джордана Рассела в StripReloc -- функция CalcChecksum.

Для повторного подсчета достаточно отобразить exe-файл в память с отбрасыванием изменений, прочитать контрольную сумму из заголовка PE, сохранить в переменной. Вписать 0 в это поле (который будет отброшен после закрытия файла), посчитать контрольную сумму заново и сравнить.

Но прежде чем заниматься фигней, представить ситуацию, когда злые хакеры ломают программу прямо в локальной сети предприятия.
Ответить с цитированием
  #5  
Старый 17.10.2012, 03:17
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Защитить её VMProtect'ом. Антивирусные компании даже не пытаются понять смысл того, что им защищено, потому что человек со здоровой головой понять это не сможет.
Я пробовал его реверсить. Там виртуалка с шифрованными опкодами, шифрованные адреса обработчиков опкодов, шифрованные данные и ни единой функции. Весь код так сказать прямым текстом, только после каждых 1-10 команд стоит jmp или call (который юзается как jmp) куда-нибудь ещё, и код превращается в беспорядочное месиво. Стек там используется как большая помойка, почти все регистры - тоже. Код виртуалки загаживается огромнейшим количеством совершенно тупых и бесполезных команд, среди которых реальный смысл даже маленького кусочка восстановить очень тяжело. И хоть все алгоритмы шифрования сами по себе там элементарные (xor, add/sub, rol/ror и различные их комбинации), разобрать это вручную невозможно.
Слышал где-то на хакерских форумах обитают скрипты для снятия VMP старых версий, однако для новых что-то не слышал и не видел.
Если не хочется платить за VMP, можно написать свой упрощенный аналог.

Цитата:
если эту функцию запихнуть в datamodule.bpl и там же сравнивать CRC этого модуля с изначальным, то взломщику не удастся подменить изменить сам модуль...
При высоком уровне хитромордости это тоже можно обойти без особо крупных проблем - CRC = const, как следствие то место, которое считает CRC, можно заполнить NOP'ами, и поверх записать возврат верного CRC. Нужно помнить, что изменить можно не только 1-2 команды. Изменить можно десятки, сотни и тысячи команд: в крайнем случае хакер может внедрить ДЛЛ, написанную на Delphi/C/C++ (LoadLibrary-то он найдет где впихнуть), которая будет полностью менять целые ветви программы, огромные функции и т.д. на полностью свой код. И это не трудно, мне самому приходилось так делать (только не для взлома, а для добавления множества совершенно новых фич в программу).

З.Ы. +1 к
Цитата:
Но прежде чем заниматься фигней, представить ситуацию, когда злые хакеры ломают программу прямо в локальной сети предприятия.
Один знакомый как-то раз сказал: защита делается такой, чтобы стоимость взлома была выше, чем польза от него.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 17.10.2012 в 03:46.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
~TB~ (19.10.2012)
  #6  
Старый 17.10.2012, 08:08
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Возложить авторизацию на сервер, чтоб он только ответ выдавал, валидны логины/пароли или нет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
~TB~ (19.10.2012)
  #7  
Старый 17.10.2012, 09:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Возложить авторизацию на сервер, чтоб он только ответ выдавал, валидны логины/пароли или нет.
да, проще и надежней найти способ сложно.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 18.10.2012, 07:26
Аватар для Lost_Fish
Lost_Fish Lost_Fish вне форума
Начинающий
 
Регистрация: 21.07.2011
Адрес: Новосибирск
Сообщения: 103
Версия Delphi: Delphi 7,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Возложить авторизацию на сервер, чтоб он только ответ выдавал, валидны логины/пароли или нет.

Это самый правильный способ!

Я так подозреваю логины и пароли ты хранишь самостоятельно в таблице на серваке, если это так то в базу ты попадаешь под общим паролем и логином (для того чтоб считать данные из таблицы), тогда метод взлома такой БД заключается в том чтоб в хекс редакторе посмотреть пароль/логин, цепануться к базе считать пароли логины пользователей, даже если общий пароль/логин шифрованы то умному хакеру не составит труда их достать
__________________
Код сырец
Ответить с цитированием
  #9  
Старый 18.10.2012, 08:29
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

SSL + Хеши
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
~TB~ (19.10.2012)
  #10  
Старый 19.10.2012, 13:27
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию Если честно

Во первых я невижу смысла алгоритма потому что!
1. Если вашу программу захотят сломать, ее все равно сломают.
2. Защиту организовывают сторонние программы. За деньги! И если программа имеет высокий спрос...ЕЕ все равно сломают!
3. Вам не надо париться, логин и пароль стандартными методами защитят вашу прогу от доступа случайных людей не имеющих знаний взлома.
4. Если вы хотите защитить программу от взлома людей обладающими базовыми знаниями взлома, постарайтесь не писать логины и пароли в реестр, в файл, и в exe коде не вязать все 1 переменной.

ЧТОБЫ ПОНЯТЬ КАК ЗАЩИТИТЬ СВОЮ ПРОГРАММУ ПОСТАРАЙТЕСЬ ЕЕ САМИ ВЗОЛМАТЬ!
Лучшая защита пограммы от взлома, это нестандартный методы проверки!
Ответить с цитированием
  #11  
Старый 19.10.2012, 14:18
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

ТС писал:
Цитата:
Программа используется на предприятии, особо защищать не придётся, так как сеть локальная без выхода в интернет, но уж сам вопрос интересный.
Соответственно он в курсе того, что следует не париться, но ему же просто ИНТЕРЕСНО! Так зачем бессмысленные ответы? Мне например это нафиг не нужно, но ведь тоже интересно. Спасибо товарищам M.A.D.M.A.N., Bargest, Freeman и lmikle за нормальные ответы. Будет что поковырять на досуге теперь.
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием
  #12  
Старый 19.10.2012, 14:38
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию

Цитата:
Сообщение от ~TB~
ТС писал:

Соответственно он в курсе того, что следует не париться, но ему же просто ИНТЕРЕСНО! Так зачем бессмысленные ответы? Мне например это нафиг не нужно, но ведь тоже интересно. Спасибо товарищам M.A.D.M.A.N., Bargest, Freeman и lmikle за нормальные ответы. Будет что поковырять на досуге теперь.
Не буду оспаривать если в у вас достаточно времени на ковыряния.
Я высказал позицию человека ценящего время, что овичинка выделки не стоит, и лучше свободное время посвятить более важным и полезным делам.
Мой ответ попытка направить человека в нормальное русло, поскольку вопросы по защите, несколько изжили себя.

Последний раз редактировалось Heneken, 19.10.2012 в 14:40.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter