Форум по 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.
Ответить с цитированием
  #10  
Старый 07.06.2013, 23:11
Аватар для 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, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #11  
Старый 07.06.2013, 23:17
Pcrepair
 
Сообщения: n/a
По умолчанию

все зависит от уровня взломщика
задача - обломать 99% кулхацкеров в попытке что то изменить в программе
остальные 1% реальные хакеры, способные это сделать не будут это делать, у них заботы поважнее

вот еще накопал:
данный способ не сможет полностью защитить Ваш программный продукт от взлома, но прекратить выполнение секретного кода - запросто. Для этого мы будем использовать API функцию IsDebuggerPresent.
Теперь посмотрим как эту функцию реализовать в Delphi:


Код:
function DebuggerPresent: boolean; 
type 
  TDebugProc = function: boolean; stdcall; 
var 
Kernel32: HMODULE; 
DebugProc: TDebugProc; 
begin
  Result := False; 
  Kernel32 := GetModuleHandle('kernel32.dll'); 
    if Kernel32 <> 0 then 
      begin 
        @DebugProc := GetProcAddress(Kernel32, 'IsDebuggerPresent'); 
        if Assigned(DebugProc) then 
        Result := DebugProc; 
      end; 
end;
комментарии?

Последний раз редактировалось Pcrepair, 07.06.2013 в 23:21.
Ответить с цитированием
  #12  
Старый 07.06.2013, 23:17
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Ну суть защиты и заключается в массивности геморроя, который словит крякер (кулхацкеры в основном другим занимаются), которого заинтересует ваш софт, но так как софт это не Skype и врятли будет так популярен, то скорее всего, врятли его будут ломать мега крякеры.

Также можно часть данных спрятать заюзав алго стеганографии (вроде так как то называется) и альтернативные файловые потоки, данные передавать юзая закрытые и открытые ключи...
Ответить с цитированием
  #13  
Старый 08.06.2013, 08:00
Аватар для 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
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Pcrepair
данный способ не сможет полностью защитить Ваш программный продукт от взлома, но прекратить выполнение секретного кода - запросто. Для этого мы будем использовать API функцию IsDebuggerPresent.
Теперь посмотрим как эту функцию реализовать в Delphi:


Весится хук на эту ф-ю и в ней eax устанавливается в 0, вся заSHITа опять коту под хвост.

З.Ы. Ощущение, что мои предыдущие посты невидимые.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 08.06.2013 в 08:03.
Ответить с цитированием
  #14  
Старый 08.06.2013, 09:27
Pcrepair
 
Сообщения: n/a
По умолчанию

они видимые но неприемлимо пессемистичные
больше оптимизьму, не бывает нерешаемых задач
Ответить с цитированием
  #15  
Старый 08.06.2013, 09:51
Аватар для 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, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter