Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зашитые в код строковые константы- как защитить их от просмотра?


Страницы:   1 2

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. А для защиты от юных пионеров с гордо загнутыми пальцами
> вполне можно хранить зашифрованную строку, а код ее расшифровки
> вшить прямо в тело программы.

А зашитый код расшифровки- насколько проблематичнее получить из екзехи? Ибо не против пионеров задумывается. Тривиальное перестановочное шифрование не подойдет...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо