Форум по 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,096
Версия 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
Адрес: Санкт-Петербург
Сообщения: 577
Версия 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)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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