![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Делаю авторизацию пользователей. Окошко для ввода логина и пароля. Данные пользователя хранятся в БД. Воопрос как лучше реализовать защиту от взлома программы. Программа используется на предприятии, особо защищать не придётся, так как сеть локальная без выхода в интернет, но уж сам вопрос интересный. И вот тут мои размышления:
1. Допустим пароли как таковые я хранить в открытом виде не буду, а будет в базу данных записываться их хэш. 2. При реализации условий логина (нажатие кнопки и обработка сравнения паролей) возможен взлом кода программы с подменой битов (как взламывают экзешники любимых программ). Весь вопрос в том, как усложнить взлом с использованием подмены бытов самого модуля логина, чтобы логин был неудачен даже при получении true, что якобы пароли совпадают...?????? Все модули, в том числе модуль логина, дата модуль и прочие - это bpl пакеты... Помогите с данным вопросом, первый раз с этим сталкиваюсь... Спасибо! |
#2
|
|||
|
|||
![]() Почитал тут статейку
http://www.codenet.ru/progr/delphi/stat/delphi.php и подумал: хоть и не рекомендует автор делать функции проверки пароля, но если эту функцию запихнуть в datamodule.bpl и там же сравнивать CRC этого модуля с изначальным, то взломщику не удастся подменить изменить сам модуль... Только вот как получить CRC модуля, не зная его CRC, которое должно быть зашито в сам модуль ))))))))) |
#3
|
|||
|
|||
![]() Например, скомпилить модуль, посчитать CRC, а проверку делать в основной программе, которая компилится после и она уже может знать нужный CRC. Хотя в этом случае нет возможности защитить саму программу... тоже проблема...
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
~TB~ (19.10.2012)
|
#4
|
||||
|
||||
![]() Цитата:
Для повторного подсчета достаточно отобразить exe-файл в память с отбрасыванием изменений, прочитать контрольную сумму из заголовка PE, сохранить в переменной. Вписать 0 в это поле (который будет отброшен после закрытия файла), посчитать контрольную сумму заново и сравнить. Но прежде чем заниматься фигней, представить ситуацию, когда злые хакеры ломают программу прямо в локальной сети предприятия. |
#5
|
||||
|
||||
![]() Защитить её VMProtect'ом. Антивирусные компании даже не пытаются понять смысл того, что им защищено, потому что человек со здоровой головой понять это не сможет.
Я пробовал его реверсить. Там виртуалка с шифрованными опкодами, шифрованные адреса обработчиков опкодов, шифрованные данные и ни единой функции. Весь код так сказать прямым текстом, только после каждых 1-10 команд стоит jmp или call (который юзается как jmp) куда-нибудь ещё, и код превращается в беспорядочное месиво. Стек там используется как большая помойка, почти все регистры - тоже. Код виртуалки загаживается огромнейшим количеством совершенно тупых и бесполезных команд, среди которых реальный смысл даже маленького кусочка восстановить очень тяжело. И хоть все алгоритмы шифрования сами по себе там элементарные (xor, add/sub, rol/ror и различные их комбинации), разобрать это вручную невозможно. Слышал где-то на хакерских форумах обитают скрипты для снятия VMP старых версий, однако для новых что-то не слышал и не видел. Если не хочется платить за VMP, можно написать свой упрощенный аналог. ![]() Цитата:
З.Ы. +1 к Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 17.10.2012 в 03:46. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
~TB~ (19.10.2012)
|
#6
|
||||
|
||||
![]() Возложить авторизацию на сервер, чтоб он только ответ выдавал, валидны логины/пароли или нет.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
~TB~ (19.10.2012)
|