Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Защита данных от хака


Автор: Pcrepair 7.6.2013, 19:14
Добрый день. Есть необходимость защитить данные типа строка(HTML-код) от удаления или подмены

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

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

Вопрос: в достаточной ли мере подобный подход затруднит работу взломщиков? и вообще

Автор: kami 7.6.2013, 19:49
Цитата(Pcrepair @  7.6.2013,  19:14 Найти цитируемый пост)
если хеш1 = хеш2 тогда

взломщик меняет на <> (или вообще убирает сравнение) и не парится

Добавлено через 4 минуты и 44 секунды
хотя... если шифровать асимметричным ключем...

Добавлено через 5 минут и 52 секунды
но в любом случае - это сравнение лишнее. Если строка неправильно расшифровывается - да пусть функции, использующие ее начинают валиться где угодно.

Автор: Pcrepair 7.6.2013, 20:21
так ведь сравнение двух хешей и определяет, что дальше делать программе? или что?

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

насколько такое реально?

Автор: kami 7.6.2013, 20:41
Не считайте взломщика идиотом, это далеко не так smile
Не будет он так извращаться. Даже если действительно заинтересуется вашей программой (это, кстати, самый большой вопрос - нужно ли будет ее кому-то ломать).

Цитата(Pcrepair @  7.6.2013,  20:21 Найти цитируемый пост)
- проходит мимо ГлобПерем, поскольку он ее и не ищет

блаженны верующие smile А ничего, что у вас в куче методов будет прописано "если Глобальная Переменная, то..."

Цитата(Pcrepair @  7.6.2013,  20:21 Найти цитируемый пост)
долго думает чего оно делает

Зачем долго думать, если можно просто получить результат?
Цитата(Pcrepair @  7.6.2013,  20:21 Найти цитируемый пост)
находит всетаки ключ с помощью которого функция расшифровывает константа1?????? если это возможно

А чего невозможного, если ключ прописан в константе?
Цитата(Pcrepair @  7.6.2013,  20:21 Найти цитируемый пост)
но код спец.функции дизаассемблировать нельзя,

Почему?
Цитата(Pcrepair @  7.6.2013,  20:21 Найти цитируемый пост)
создает свою константу1 и влеивает ее в файл

Если бы я занимался взломом, то поступил бы как-то так:
1. Из "спец.функции" выкидывается напрочь весь код расшифровки (ну, не выкидывается, а вставляются джампы, где необходимо), оставляются только положительные результаты работы всех этих проверок и дешифровок.
2. Вместо "зашифрованной строки" вставляется своя, незашифрованная
3. Ввиду того, что код расшифровки выброшен, то измененная строка без проблем кочует в результат спец.функии и далее.

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

Автор: kami 7.6.2013, 20:55
тогда - пойдет.
Но если какая-либо из функций может привести к исключению (либо ошибке в вычислениях), если строка "не родная", то стоит (даже очень стОит) убрать проверки "если ГлобальнаяПеременная то". И вообще тогда убрать эту глобальную переменную. Неявное возникновение ошибки (неправильного результата) будет гораздо предпочтительнее.

Автор: БелАмор 7.6.2013, 22:17
Цитата(kami @  7.6.2013,  21:55 Найти цитируемый пост)
Но если какая-либо из функций может привести к исключению (либо ошибке в вычислениях), если строка "не родная", то стоит (даже очень стОит) убрать проверки "если ГлобальнаяПеременная то". И вообще тогда убрать эту глобальную переменную. Неявное возникновение ошибки (неправильного результата) будет гораздо предпочтительнее.


Хотел бы обратить внимание на то, что ни при каких обстоятельствах, что бы там ни подумала программа по поводу своего взлома, она не должна выдавать неправильные результаты, которые могут быть приняты за правильные. Она может вылетать с ошибкой, виснуть, разводить руками со словами "Обнаружена неизвестная ошибка", но ни при каких обстоятельствах не должна преднамеренно гадить.

Автор: Pcrepair 7.6.2013, 22:23
программа вообщето бесплатная, так что принцип "как есть" торжествует в полной мере

Автор: БелАмор 7.6.2013, 22:48
Цитата(Pcrepair @  7.6.2013,  23:23 Найти цитируемый пост)
программа вообщето бесплатная, так что принцип "как есть" торжествует в полной мере 

Если человек скопировал хоть платную, хоть бесплатную программу со столетней флешки, в результате чего она скопировалась с ошибками, если на диске пользователя порезвился вирус, пишущий пару случайных байт в случайные места случайных файлов, то вы готовы ему устроить страшную мстю, только потому, что вы - Д'Артаньян, раздающий программы "как есть", а он - чудак, ломающий, по вашему мнению, вашу замечательную программу? Я думаю, что в таком случае - всё как раз наоборот - автор такой программы - не Д'Артаньян, а обыкновенный чудак...

Автор: northener 8.6.2013, 01:38
Цитата(Pcrepair @  7.6.2013,  20:52 Найти цитируемый пост)
ну все зависит от уровня взломщика
задача - обломать 99% кулхацкеров в попытке что то изменить в программе

Вопрос в том, кого ты считаешь "кулхацкерами", а кого "реальными хакерами".
Общий принцип при защите таков - ты имеешь все шансы защитить ПО от того, кто имеет явно более низкие общие знания. Ты можешь заставить несколько помучиться того, кто имеет примерно твой уровень общих знаний. И у тебя нет никаких шансов защитить своё ПО от того, кто имеет более высокий уровень общих знаний.

P.S.
Про уровень "специальных" знаний я уже молчу. Ибо после прочтения:
Цитата(Pcrepair @  7.6.2013,  19:14 Найти цитируемый пост)
если хеш1 = хеш2 тогда

и 
Цитата(Pcrepair @  7.6.2013,  20:21 Найти цитируемый пост)
так ведь сравнение двух хешей и определяет, что дальше делать программе?

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)