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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2013, 20:12
Pcrepair
 
Сообщения: n/a
По умолчанию Защита данных от хака

Добрый день. Есть необходимость защитить данные типа строка(HTML-код) от удаления или подмены

Например такой способ:
1. шифруем строку(до пограммы), делаем ее хеш и размещаем гдето в программе в виде констант1 и 2
2. функция, которой нужны данные заключенные в константе1 (HTML-код), вызывает специальную функцию, которая:
- получает константу1 и делает ее хеш
- получает константу2(ранее сделанный хеш) и сравнивает хеши
если хеш1 = хеш2 тогда
спец.функция расшифровывает константу1(ключ встроен в функцию) и передает параметр в вызвавшую функцию и записывает значение TRUE в ГлобПерем
иначе (хеши различны)
спец.функция возвращает FALSE в ГлобПерем

все основные процедуры программы в начале кода имеют обращение к этой ГлобПерем и если она FALSE идут в Exit(не выполняют свой код), что приведет к сбою в работе программы

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

Первое, что сделает взломщик - инвертирует условие
Цитата:
имеют обращение к этой ГлобПерем и если она FALSE идут в Exit(не выполняют свой код), что приведет к сбою в работе программы
Если не поможет - посмотрит, кто обращается к строке, с чем она (или хеш) сравнивается, и либо пропатчит все места сравнений, либо поменяет все константы, чтобы совпадало.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 07.06.2013, 22:21
Pcrepair
 
Сообщения: n/a
По умолчанию

до того чтобы понять что это условие сеть надо еще долго ковыряться в коде, это ведь побочная ветка поиска где данные которые нужно подменить
Ответить с цитированием
  #4  
Старый 07.06.2013, 22:29
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Долго ковыряться не надо. Есть динамический анализ и хардварные брейк-поинты.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 07.06.2013, 22: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
Репутация: выкл
По умолчанию

лучше не делать так, чтобы приходилось защищать. если это по сети передается, можно засесть сниффером и вся заSHITа пойдет коту под хвост.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #6  
Старый 07.06.2013, 22:36
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Чтобы усложнить: сделай несколько функций с разными названиями и реализацией сравнения (т.е. по сути все функции делают одно и то же, но по-разному и их имена различны), вызывай эти функции несколько раз в теле программы (явная или неявная проверка), сделай проверку CRC программы по аналогии с описанным выше алгоритмом, используй заглушки против отладки, дампа и т.п., используй навесную защиту.
Ответить с цитированием
  #7  
Старый 07.06.2013, 22:43
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
используй заглушки против отладки, дампа и т.п., используй навесную защиту.
И вообще переводи код на виртуалку, а ее - на еще одну виртуалку.
Совет MADMAN - а самый дельный.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 07.06.2013, 23:02
Pcrepair
 
Сообщения: n/a
По умолчанию

Цитата:
Сообщение от Vayrus
Чтобы усложнить: сделай несколько функций с разными названиями и реализацией сравнения (т.е. по сути все функции делают одно и то же, но по-разному и их имена различны), вызывай эти функции несколько раз в теле программы (явная или неявная проверка), сделай проверку CRC программы по аналогии с описанным выше алгоритмом, используй заглушки против отладки, дампа и т.п., используй навесную защиту.
а если так:

допустим кто то хочет заменить данные(в частности свой емейл подсунуть вместо моего)
в кнопке "Контакты" он видит мой емейл(данные кстати полностью доступны), дальнейшие действия кулхацкера:
- начинает искать в коде программе этот емейл(поскольку зашифрованно, он его просто не находит)
- начинает в отладчике вызывать форму в которой прописан емейл, идет до спец.функции, которая выдает константа1 в расшифрованном виде
- проходит мимо ГлобПерем, поскольку он ее и не ищет
- находит таки константа1. в зашифрованном виде(о том что все зашифрованно кулхацкер пока ничего не знает)
- вырезает константу1 в блокнот начинает смотреть где там что, ничего не находит
- возвращается к спец.функции и долго думает чего оно делает
- находит всетаки ключ с помощью которого функция расшифровывает константа1?????? если это возможно
- но код спец.функции дизаассемблировать нельзя, долго ломает голову над кодом функции, переберет все доступные
- все таки находит код(в принципе он там простой, хотя можно и усложнить)
- создает свою константу1 и влеивает ее в файл
- запускает прогамму и тут обнаруживает что ничего не работает(о передаче флага в ГлобПЕРЕМ ведь ничего неизвестно)
- начинает возится с спец.функцией воображая что там ошибка
...... и еще много ненужных телодвижений
в изнеможении стирает нафиг все и форматирует свой диск Ц

насколько такое реально?
Ответить с цитированием
  #9  
Старый 07.06.2013, 23:07
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
(о том что все зашифрованно кулхацкер пока ничего не знает)
Ты плохо знаешь кулхацкеров. Нормальный кулхацкер всегда чует подвох, и до того, что все шифровано, дойдет быстро.
Цитата:
но код спец.функции дизаассемблировать нельзя, долго ломает голову над кодом функции, переберет все доступные
С каких это пор? Код любой функции априори можно дизассемблировать. Можно ее запутать, зашифровать, еще че-то сделать, но все равно ее будет можно дизассемблировать. В крайнем случае это SoftICE с полным трейсом функции.
Цитата:
запускает прогамму и тут обнаруживает что ничего не работает
Так будет, да. А вот следующий шаг будет другой. Это будет хардварный бряк на этой константе и проверка, кто и зачем обращается.
Это один вариант развития. А другой - посмотреть, где при смене все валится (почему идет другой код), и найдет флаг.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 07.06.2013 в 23:11.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter