![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зашитые в код строковые константы- как защитить их от просмотра?
roadster © (2009-05-20 10:47:00)Всем привет!
Имеется программа, которая, грубо говоря, читает из инишника зашифрованную с ключом строку, расшифровывает ее, использует, при необходимости делает обратную операцию.
С зашифровкой/расшифровкой все понятно.
Дело в том, что ключ шифрования не будет вводиться вручную пользователем (это служба архивации, вертится на сервере). Хранить ключ во внешнем файле- все равно что не шифровать вовсе.
Интересует вариант объявления этого ключа в коде программы.
Если объявить константой- этот ключ видно даже в ФАРе :).
Если объявить ресурсстрингом- вроде не видно.
То есть задача: каким-то образом объявить строку, но чтобы декомпилятором/дизассемблером и ничем иным ее в файле ехе-шника нельзя было посмотреть.
Dennis I. Komarov (2009-05-20 15:34:00) [1]
> Ega23 © (20.05.09 13:17) [36]
> Rouse_ © (20.05.09 13:19) [37]
О чем вы??? Тут мы "Капшен окна" читаем пока...
Rouse_ (2009-05-20 13:19:00) [2]
> Не поможет, у него как декодирование, так и декодирование
> используется
А не нужно кодирование - кодирование должно производиться со стороны разработчика приватным ключом, а авторизацию на сервере и запрос новой порции данных производить опять-же на основе приват-паблик ключей, интеренет хорошо помогает в таких условиях ;)
Ega23 (2009-05-20 13:17:00) [3]
> даю подсказку, асинхронные алгоритмы шифрования
Не поможет, у него как декодирование, так и декодирование используется (по крайней мере в [0] так написано, что обратные действия тоже нужны)
Rouse_ (2009-05-20 13:14:00) [4]
> Куда ж тады ключ запрятать?
Никуда не прятать - даю подсказку, асинхронные алгоритмы шифрования в которых компрометация одного из ключей ничего не даст взломщику.
roadster (2009-05-20 13:12:00) [5]
> Если ключ находиться в исполняемом файле - то поставленная
> задача невыполнима. Собственно даже если ключа там тоже
> нет - невыполнимо т.к. код, распаковывающий заранее известную
> строку детектируюется банальным бряком на чтение области
> памяти с самой зашифрованной строкой, после чего небольшая
> трассировка (для большинства таких защит и наличии опыта
> достаточно в статике глазками проанализировать) и ключ извлекается
> за ушко и на солнышко.
Понятно...
Куда ж тады ключ запрятать? В реестр, наверно, не покатит, наверняка можно проследить в какую ветку программа лезет...
roadster (2009-05-20 13:08:00) [6]
> Зато пионером.
Может тогда член партии с 18ХХ года подскажет что-нибудь?
Rouse_ (2009-05-20 13:06:00) [7]Если ключ находиться в исполняемом файле - то поставленная задача невыполнима. Собственно даже если ключа там тоже нет - невыполнимо т.к. код, распаковывающий заранее известную строку детектируюется банальным бряком на чтение области памяти с самой зашифрованной строкой, после чего небольшая трассировка (для большинства таких защит и наличии опыта достаточно в статике глазками проанализировать) и ключ извлекается за ушко и на солнышко.
Anatoly Podgoretsky (2009-05-20 12:57:00) [8]
> Ибо не против пионеров задумывается.
Зато пионером.
roadster (2009-05-20 12:38:00) [9]
> Можно и ничего не генерить, и ничего не переставлять. Тут
> ключ вообще не обязателен. Клиент получает от сервера зашифрованный
> пароль и расшифровывает его известным ему алгоритмом без
> всякого ключа.
С ключом понадежнее будет. А сдвиг/перестановка/замена проще ломается...
roadster (2009-05-20 12:34:00) [10]
> как вариант: читай разные байты СВОЕЙ программы по нужному
> алгритму)
Тогда ключ будет зависеть от версии. Перекомпилял- и вот тебе новый ключ.
Не уследишь ни фига...
roadster (2009-05-20 12:32:00) [11]
> Логику включить не пробовал, как ты собираешься узнавать
> какой из "бессмысленным набором байт" в exe является необходимым
> ключём.
А бессмысленный набор символов в строковой константе не является бессмысленным набором байт? :) Ты ж не конкретизировал в посте, что за набор...
Плохиш (2009-05-20 12:26:00) [12]
> roadster © (20.05.09 12:14) [21]
>
>
> > Кстати, если речь идет о хранении ключа, то быть осмысленной
> > строкой он вовсе не обязан. Никто не мешает сделать его
> > бессмысленным набором байт, включая и непечатные коды.
>
>
> Эт понятно. Но ках лучше описать?
Логику включить не пробовал, как ты собираешься узнавать какой из "бессмысленным набором байт" в exe является необходимым ключём.
> переменной, константой, ресурсстрингом?
Хотя, что это я про логику, тут со знаниями проблема.
Юрий Зотов (2009-05-20 12:24:00) [13]> roadster © (20.05.09 12:20) [23]
Можно и ничего не генерить, и ничего не переставлять. Тут ключ вообще не обязателен. Клиент получает от сервера зашифрованный пароль и расшифровывает его известным ему алгоритмом без всякого ключа.
brother (2009-05-20 12:22:00) [14]> Типа, первый символ кэпшна окна главной формы в нижнем регистре
> плюс восьмой в верхнем плюс результат перестановки символов
> какой-нибудь константы плюс еще чего...
разошелся ;)
как вариант: читай разные байты СВОЕЙ программы по нужному алгритму)
Юрий Зотов (2009-05-20 12:21:00) [15]> roadster © (20.05.09 12:12) [19]
> А зашитый код расшифровки- насколько проблематичнее получить из
> екзехи?
При наличии отладчика и соответствующего навыка - просто (если это простой статический код). Но можно усложнить. Например, САМ машинный код расшифровки можно хранить в зашифрованном виде в секции данных, "на ходу" его расшифровывать и исполнять в стеке.
Можно использовать полиморфный код. Можно еще кучу всего напридумывать (кстати, статей в Сети полно) - но защиты от серьезногохакера все равно нет. Весь вопрос лишь в рентабельности взлома - стоит ли его результат затраченных на него ресурсов?
roadster (2009-05-20 12:20:00) [16]О! мож, ключ шифрования генерить? Типа, первый символ кэпшна окна главной формы в нижнем регистре плюс восьмой в верхнем плюс результат перестановки символов какой-нибудь константы плюс еще чего...
roadster (2009-05-20 12:15:00) [17]
> Еще кстати - а зачем вообще тут нужен ключ? Можно и без
> него.
Простые перестановочные алгоритмы?
roadster (2009-05-20 12:14:00) [18]
> Кстати, если речь идет о хранении ключа, то быть осмысленной
> строкой он вовсе не обязан. Никто не мешает сделать его
> бессмысленным набором байт, включая и непечатные коды.
Эт понятно. Но ках лучше описать? переменной, константой, ресурсстрингом?
Пусть даже если и код расшифровки зашить?
Юрий Зотов (2009-05-20 12:13:00) [19]Еще кстати - а зачем вообще тут нужен ключ? Можно и без него.
roadster (2009-05-20 12:12:00) [20]
> 4. А для защиты от юных пионеров с гордо загнутыми пальцами
> вполне можно хранить зашифрованную строку, а код ее расшифровки
> вшить прямо в тело программы.
А зашитый код расшифровки- насколько проблематичнее получить из екзехи? Ибо не против пионеров задумывается. Тривиальное перестановочное шифрование не подойдет...