0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 55
|
|
1 | |
Немного о защите и шифровании09.01.2020, 12:38. Показов 1355. Ответов 32
Метки нет (Все метки)
c++ клиент-сервер (мой dll это дополнение для чужого dll, а этот чужой dll подключается к чужому .exe).
A Приходит момент, когда мы делаем САМЫЙ ПЕРВЫЙ запрос к серверу (php сайт) с помощью libcurl. Логика говорит, что чтобы зашифровать строку этого самого первого запроса, алгоритм шифрования и ключ должны быть внутри моей программы, ну или лежать где-то на компе, где запускается программа, а это значит, что они видны взломщику. Хочется услышать полезные советы по шифрованию этого самого первого запроса. Проблема в том, что алгоритм виден взломщику. Виртуальный сервер - для меня это пока как-то сложно и не хватает терпения. VM Protect - по идее он влияет на производительность + скорее всего есть распаковщики. xor - он же по идее слабый да. Допустим очевидно что первый символ это 'h', т.к. к https обращение, хотя очевидную часть запроса можно проксорить одним ключом, а тайную другим. Из полезного, что есть в моих мыслях по этому поводу на данный момент, это создать МНОГО функций с какими-то арифметическими операциями, одна функция перенаправляет на другую и тд - смысл в том, что чтобы узнать результат, нужно проделать много ручной работы. И это не простые вызовы функций, а через указатель со смещением, которое желательно тоже зашифровать (но проблема та же, нам пока не чем) + небольшая обфускация кода в этих функциях. B Я понимаю что есть чертова отладка, инъекция и вызов функций, и с этим адом я тоже буду пытаться бороться. Но пока пропустим эту часть и допустим что или их нет или получилось обойти =) Чтение значения из памяти: Допустим сервер вернул результат какого-то вычисления и этот результат нам нужен довольно часто. Логично, что нужно этот результат где-то сохранить, потому что делать часто запрос и получать тот же результат не лучшая идея. Это создаёт проблему чтения этого результата из памяти верно? Про переменные я читал, что после работы с ними, желательно сразу же их очистить и удалить. Но глобальная переменная же нам нужна, как и её значение, хотя что если её очистить и таймером вернуть значение. Еще по идее сервер может вернуть смещение и мы как-бы можем неявно изменить переменную. Хочу услышать советы по этому поводу, как усложнить например чтение const char *, который был сохранён в классе.
0
|
09.01.2020, 12:38 | |
Ответы с готовыми решениями:
32
Что должны делать муниципальные предприятия по защите персональных данных и защите информации В наушник попало немного воды и он стал немного тише играть ошибка в шифровании ошибка в шифровании |
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 12:55 | 2 |
кстати интересная тема , а как работает шифрование вообще на клиент-сервер приложениях? если что-то шифруется то всегда должен быть ключ чтобы расшифровать это, но ключ же можно перехватить ,тогда какой толк в шифровании?
0
|
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 55
|
|
09.01.2020, 13:03 [ТС] | 3 |
Ключ расшифровки не отправляется клиенту, он всегда на сервере.
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 13:11 | 4 |
stas39, тогда как клиент может шифровать сообщения к серверу без ключа шифрования?
0
|
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 55
|
|
09.01.2020, 13:27 [ТС] | 5 |
Ключ шифрования рандомный, сервер дает его клиенту, клиент шифрит и делает запрос, сервер расшифровывает другим (наверно тоже рандомным) ключом и возвращает результат и наверно новый шифр-ключ, как-то так.
Добавлено через 2 минуты + https же шифрует. Но меня все еще беспокоят моменты, когда все эти результаты запросов (ответы) поймают и в итоге добьются того что их уже и делать не придётся, но это другая тема. Добавлено через 5 минут Хотя не другая, это мой вопрос, как усложнить чтение const char *, в котором будет храниться ответ сервера.
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 13:36 | 6 |
stas39, что значит
?
Зачем его усложнять? Вы себе хотите усложнить чтение? Добавлено через 6 минут stas39, "взломщику" они видны не будут если это все будет находится только в виртуальном адресном пространстве процесса и если Вы их не будете хранить в файлах, в данном случае "взломщик" должен будет тыкать пальцем в небо чтобы найти зашифрованную строку в адресах памяти вашей системы, если Вы будете хранить ключ и строку в файлах то "взломщик" должен будет знать где эти файлы хранятся , а сами файлы Вы уже можете зашифровать ключом который будет только у Вас в голове к примеру
0
|
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 55
|
|
09.01.2020, 13:40 [ТС] | 7 |
С такой логикой, зачем вообще тогда защищать программу..
stop spam pls. Меня интересует как скрыть самый первый ключ для шифра, который вынужден быть внутри программы, ну и алгоритм шифровки если возможно. И как запретить читать/дампить/перехватывать ответы, которые сервер возвращает, которые я сохранил в глобальных переменных..
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||||
09.01.2020, 13:43 | 8 | |||||
Если кратко то у Вас есть программа(процесс) которая работает и вот все переменные и функции которые в ней внутри занимают какую-то область памяти которая в системе разделяется на много кусков памяти меньше и даже Вы (насколько мне известно) не можете узнать в какой ячейке физической памяти находится к примеру Ваша переменная
Добавлено через 1 минуту stas39, с чего Вы взяли что кто-то(кроме самой ОС) может вообще читать то что сохранено в переменных Вашей программы?
0
|
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 55
|
|
09.01.2020, 13:49 [ТС] | 9 |
Ну пошаговая отладка..
Видны значения регистров и тд. Плюс могут вызвать функцию и увидеть что вернулось. Плюс если нашли адрес, где хранится значение переменной, то и узнать значение разве сложно? Я не знаю всех деталей взлома и много чего не знаю, я лишь вижу сомнительные моменты, которые меня беспокоят, и я попросил опытных людей дать советы, которых я пока не увидел =\
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 13:50 | 10 |
stas39, почитайте о виртуальной памяти
например вот https://habr.com/ru/company/embox/blog/256191/
0
|
18828 / 9831 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
09.01.2020, 13:58 | 11 |
В целом - никак.
Но вам в большой степени поможет асимметричное шифрование, т.к. использует другой подход, когда перехват содержимого пакетов и знание алгоритма шифрования не играют роли.
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 14:00 | 12 |
DrOffset, разве возможно как-то прочитать данные которые находятся внутри адрессного пространства процесса во время его выполнения? чтобы эти данные еще распознать можно было , к примеру что здесь находится переменная a , там b и тд?
0
|
18828 / 9831 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
09.01.2020, 14:05 | 13 |
Можно конечно. Любой отладчик это умеет.
Это элементарно делается при наличии отладочной информации. Если такой информации нет, то читать можно будет только ассемблер. Однако это не проблема для профессионала с серьезным инструментом в руках.
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 14:12 | 14 |
DrOffset, ну а как же виртуальная память? разве как-то можно получить доступ к физической памяти?
0
|
18828 / 9831 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
09.01.2020, 14:23 | 15 |
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 14:25 | 16 |
DrOffset, тоесть вот так просто можно вторгнуться в виртуальное адресное пространство процесса?
0
|
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 55
|
|
09.01.2020, 14:36 [ТС] | 17 |
https же так и работает, сайт вернул мой ответ и ssl сертификат как-бы гарантировал, что в этот процесс никто не вмешивался (не факт), и теперь этот ответ от сайта хранится в глобальной переменной char *result в проге. Мне интересно что я могу сделать, чтобы усложнить посторонней программе узнать, что хранится в моей result переменной, должны же быть какие-то хитрости.
Например result я вернул зашифрованным, но наступает момент когда он мне нужен в чистом виде и я его расшифровываю и тут видно становится чему он равен - но такое наверно возможно только при помощи отладки, поэтому если я придумаю детект отладки и как-то хитро на неё среагирую, то это может быть нормально. Хм, значит я пока пришел к выводу, что нужно в глобальных переменных хранить зашифрованное значение и расшифровывать перед использованием, но перед этим убедиться, что в этот момент никто не подсматривает =) Вот только раз я часто обращаюсь к переменной, то мучать сервер запросами не лучшая идея, придется хранить ключ и метод расшифровки в проге, ну а этот ключ конечно вернул сервер. Я вот для теста сейчас в переменной "abcd" сохранил. IDA сразу мочит и говорит что это dword dd 64636261h, а 64 63 62 61 это мои перевернутые "dcba". И наверно стоит обращаться к моей переменной через указатель со смещением. В общем буду тестировать, смотреть в иду и тд. Но тут по-любому немало человек есть, которые знают какие-то мне неизвестные хитрости, которые бы мне помогли =)
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
09.01.2020, 14:44 | 19 |
DrOffset, а что насчет линукс?
Добавлено через 1 минуту DrOffset, и в чем плюсы отладчиков ядра по сравнению с отладчиками приложения? Добавлено через 5 минут и если есть отладчики значит процесс должен же как-то распознавать в режиме отладки находится он , или нет , если да то к примеру крашится и тд
0
|
18828 / 9831 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
|
|
09.01.2020, 14:47 | 20 |
Например: https://en.wikipedia.org/wiki/Self-modifying_code
Про упаковщики-криптеры вы сами выще сказали. https://docs.microsoft.com/ru-... dfrom=MSDN Это все ерунда, никак не поможет. Для того, чтобы хорошо защитить программу, я думаю, надо знать какие бывают методы взлома. Вот книжка довольно хорошая на этот счет. У Криса Касперски еще были книги по этой теме, если нужно на русском. Добавлено через 1 минуту Да все тоже самое там. API другое, суть такая же. Там по ссылке все есть.
2
|
09.01.2020, 14:47 | |
09.01.2020, 14:47 | |
Помогаю со студенческими работами здесь
20
Интересный вопрос о шифровании.. Ошибка при шифровании Роль ключа в шифровании файла Ещё раз о шифровании/дешифровании Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |