Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
roadster ©   (2009-05-20 10:47) [0]

Всем привет!
Имеется программа, которая, грубо говоря, читает из инишника зашифрованную с ключом строку, расшифровывает ее, использует, при необходимости делает обратную операцию.
С зашифровкой/расшифровкой все понятно.
Дело в том, что ключ шифрования не будет вводиться вручную пользователем (это служба архивации, вертится на сервере). Хранить ключ во внешнем файле- все равно что не шифровать вовсе.
Интересует вариант объявления этого ключа в коде программы.
Если объявить константой- этот ключ видно даже в ФАРе :).
Если объявить ресурсстрингом- вроде не видно.
То есть задача: каким-то образом объявить строку, но чтобы декомпилятором/дизассемблером и ничем иным ее в файле ехе-шника нельзя было посмотреть.


 
brother ©   (2009-05-20 10:51) [1]

использовать шифрование и записывать в string уже шифрованную строку...


 
roadster ©   (2009-05-20 10:53) [2]

Ага, а ключ для расшифровки зашифрованной в стринг строки где хранить?
:)


 
brother ©   (2009-05-20 10:54) [3]

> Ага, а ключ для расшифровки зашифрованной в стринг строки
> где хранить?

ключ не нужен, храни алгоритм расшифровки...


 
Плохиш ©   (2009-05-20 10:55) [4]


> Интересует вариант объявления этого ключа в коде программы.

Ключ должен состоять из нечитаемого набора символов. А ещё можно и чередовать объявления константных символов.

> Если объявить ресурсстрингом- вроде не видно.

Рыдал, зачем тратить время на "защиту" от полных идиотов?


 
brother ©   (2009-05-20 10:57) [5]

> Рыдал, зачем тратить время на "защиту" от полных идиотов?

ну очередной велосипед для молодых.


 
brother ©   (2009-05-20 10:58) [6]

res:="Всем привет";
res2:="";

for i:= 1 to length(res) do
 res2:=res2 + chr(ord(res[i])+i);
showmessage(res2);

типа так ;)


 
roadster ©   (2009-05-20 11:22) [7]


> ну очередной велосипед для молодых.

Тоже мне, старичок нашелся...
Абстрагируемся от всего, кроме "каким-то образом объявить строку, но чтобы декомпилятором/дизассемблером и ничем иным ее в файле ехе-шника нельзя было посмотреть".- по этому поводу есть еще мысли?


 
brother ©   (2009-05-20 11:26) [8]

> но чтобы декомпилятором/дизассемблером и ничем иным ее в
> файле ехе-шника нельзя было посмотреть

только железный ключ тогда...


 
roadster ©   (2009-05-20 11:27) [9]


> только железный ключ тогда...

Не...
А ежли екзеху упаковщиком каким сжать?


 
brother ©   (2009-05-20 11:46) [10]

> А ежли екзеху упаковщиком каким сжать?

ну если уж будут смотреть:

> декомпилятором/дизассемблером и ничем иным ее в файле ехе-
> шника нельзя было посмотреть

то тут уже ничего не спасет)


 
brother ©   (2009-05-20 11:47) [11]

зы зачем такие сложности? от кого защищаем в итоге? мой пример не катит?


 
roadster ©   (2009-05-20 11:57) [12]


> зы зачем такие сложности? от кого защищаем в итоге? мой
> пример не катит?

Система резервного копирования.
Зипуху надо запаролить.
Пароль в инишнике в открытом виде держать не стоит.
Хочу ентот пароль зашифровать с ключом.

Клиент просит у сервера параметры архивации. Сервер их ему дает. Среди параметров- пароль на архив. Ессно, зашифрованный с ключом.
Клиент принимает параметры и архивирует в запароленный архив. Для этого ему надо полученный от сервера пароль расшифровать по ключу, а потом зазиповать данные в архив с паролем.

Хотел ключ для расшифровки прошить в екзехе так, чтобы хекс-едитором этот ключ нельзя было посмотреть.


 
brother ©   (2009-05-20 11:59) [13]

> Хотел ключ для расшифровки прошить в екзехе так, чтобы хекс-
> едитором
этот ключ нельзя было посмотреть.

так это же не

> декомпилятором/дизассемблером и ничем иным

;) Просто оч. строгие рамки ты поставил, тебе подойдет мой вариант


 
roadster ©   (2009-05-20 12:01) [14]

Не, эт я немного недописал...
Я хотел сказать, чтобы прошитый ключ НИЧЕМ нельзя было достать...


 
brother ©   (2009-05-20 12:02) [15]

> Я хотел сказать, чтобы прошитый ключ НИЧЕМ нельзя было достать...

это не реально!
Вы даете не реальные планы, это как его - валюнтаризм (с) Приключения Шурика


 
Юрий Зотов ©   (2009-05-20 12:05) [16]

> roadster ©   (20.05.09 10:53) [2]

1. На каждый паковщик есть свой распаковщик.

2. Защиты от серьезного хакера не существует.

3. Непросто написать программу, взлом которой заинтересовал бы  серьезного хакера. Поэтому стоит подумать - а станет ли серьезный хакер вообще Вашей программой заниматься? Она представляет для него хоть какой-нибудь интерес?
 
4. А для защиты от юных пионеров с гордо загнутыми пальцами вполне можно хранить зашифрованную строку, а код ее расшифровки вшить прямо в тело программы.

5. Если существует некий проверочный оператор
if <условие> then <работаем> else <не _работаем>
то это самое уязвимое место и о нем стоит подумать в первую очередь.


 
brother ©   (2009-05-20 12:06) [17]

> 4. А для защиты от юных пионеров с гордо загнутыми пальцами
> вполне можно хранить зашифрованную строку, а код ее расшифровки
> вшить прямо в тело программы.

я про [6] автору уже сколько говорю ;)


 
Юрий Зотов ©   (2009-05-20 12:12) [18]

Кстати, если речь идет о хранении ключа, то быть осмысленной строкой он вовсе не обязан. Никто не мешает сделать его бессмысленным набором байт, включая и непечатные коды.


 
roadster ©   (2009-05-20 12:12) [19]


> 4. А для защиты от юных пионеров с гордо загнутыми пальцами
> вполне можно хранить зашифрованную строку, а код ее расшифровки
> вшить прямо в тело программы.

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


 
Юрий Зотов ©   (2009-05-20 12:13) [20]

Еще кстати - а зачем вообще тут нужен ключ? Можно и без него.


 
roadster ©   (2009-05-20 12:14) [21]


> Кстати, если речь идет о хранении ключа, то быть осмысленной
> строкой он вовсе не обязан. Никто не мешает сделать его
> бессмысленным набором байт, включая и непечатные коды.

Эт понятно. Но ках лучше описать? переменной, константой, ресурсстрингом?
Пусть даже если и код расшифровки зашить?


 
roadster ©   (2009-05-20 12:15) [22]


> Еще кстати - а зачем вообще тут нужен ключ? Можно и без
> него.

Простые перестановочные алгоритмы?


 
roadster ©   (2009-05-20 12:20) [23]

О! мож, ключ шифрования генерить? Типа, первый символ кэпшна окна главной формы в нижнем регистре плюс восьмой в верхнем плюс результат перестановки символов какой-нибудь константы плюс еще чего...


 
Юрий Зотов ©   (2009-05-20 12:21) [24]

> roadster ©   (20.05.09 12:12) [19]

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

При наличии отладчика и соответствующего навыка - просто (если это простой статический код). Но можно усложнить. Например, САМ машинный код расшифровки можно хранить в зашифрованном виде в секции данных, "на ходу" его расшифровывать и  исполнять в стеке.

Можно использовать полиморфный код. Можно еще кучу всего напридумывать (кстати, статей в Сети полно) - но защиты от серьезного хакера все равно нет. Весь вопрос лишь в рентабельности взлома - стоит ли его результат затраченных на него ресурсов?


 
brother ©   (2009-05-20 12:22) [25]

> Типа, первый символ кэпшна окна главной формы в нижнем регистре
> плюс восьмой в верхнем плюс результат перестановки символов
> какой-нибудь константы плюс еще чего...

разошелся ;)
как вариант: читай разные байты СВОЕЙ программы по нужному алгритму)


 
Юрий Зотов ©   (2009-05-20 12:24) [26]

> roadster ©   (20.05.09 12:20) [23]

Можно и ничего не генерить, и ничего не переставлять. Тут ключ вообще не обязателен. Клиент получает от сервера зашифрованный пароль и расшифровывает его известным ему алгоритмом без всякого ключа.


 
Плохиш ©   (2009-05-20 12:26) [27]


> roadster ©   (20.05.09 12:14) [21]
>
>
> > Кстати, если речь идет о хранении ключа, то быть осмысленной
> > строкой он вовсе не обязан. Никто не мешает сделать его
> > бессмысленным набором байт, включая и непечатные коды.
>
>
> Эт понятно. Но ках лучше описать?

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

> переменной, константой, ресурсстрингом?

Хотя, что это я про логику, тут со знаниями проблема.


 
roadster ©   (2009-05-20 12:32) [28]


> Логику включить не пробовал, как ты собираешься узнавать
> какой из "бессмысленным набором байт" в exe является необходимым
> ключём.

А бессмысленный набор символов в строковой константе не является бессмысленным набором байт? :) Ты ж не конкретизировал в посте, что за набор...


 
roadster ©   (2009-05-20 12:34) [29]


> как вариант: читай разные байты СВОЕЙ программы по нужному
> алгритму)

Тогда ключ будет зависеть от версии. Перекомпилял- и вот тебе новый ключ.
Не уследишь ни фига...


 
roadster ©   (2009-05-20 12:38) [30]


> Можно и ничего не генерить, и ничего не переставлять. Тут
> ключ вообще не обязателен. Клиент получает от сервера зашифрованный
> пароль и расшифровывает его известным ему алгоритмом без
> всякого ключа.

С ключом понадежнее будет. А сдвиг/перестановка/замена проще ломается...


 
Anatoly Podgoretsky ©   (2009-05-20 12:57) [31]


> Ибо не против пионеров задумывается.

Зато пионером.


 
Rouse_ ©   (2009-05-20 13:06) [32]

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


 
roadster ©   (2009-05-20 13:08) [33]


> Зато пионером.

Может тогда член партии с 18ХХ года подскажет что-нибудь?


 
roadster ©   (2009-05-20 13:12) [34]


> Если ключ находиться в исполняемом файле - то поставленная
> задача невыполнима. Собственно даже если ключа там тоже
> нет - невыполнимо т.к. код, распаковывающий заранее известную
> строку детектируюется банальным бряком на чтение области
> памяти с самой зашифрованной строкой, после чего небольшая
> трассировка (для большинства таких защит и наличии опыта
> достаточно в статике глазками проанализировать) и ключ извлекается
> за ушко и на солнышко.

Понятно...
Куда ж тады ключ запрятать? В реестр, наверно, не покатит, наверняка можно проследить в какую ветку программа лезет...


 
Rouse_ ©   (2009-05-20 13:14) [35]


> Куда ж тады ключ запрятать?

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


 
Ega23 ©   (2009-05-20 13:17) [36]


> даю подсказку, асинхронные алгоритмы шифрования


Не поможет, у него как декодирование, так и декодирование используется (по крайней мере в [0] так написано, что обратные действия тоже нужны)


 
Rouse_ ©   (2009-05-20 13:19) [37]


> Не поможет, у него как декодирование, так и декодирование
> используется

А не нужно кодирование - кодирование должно производиться со стороны разработчика приватным ключом, а авторизацию на сервере и запрос новой порции данных производить опять-же на основе приват-паблик ключей, интеренет хорошо помогает в таких условиях ;)


 
Dennis I. Komarov ©   (2009-05-20 15:34) [38]


> Ega23 ©   (20.05.09 13:17) [36]
> Rouse_ ©   (20.05.09 13:19) [37]

О чем вы??? Тут мы "Капшен окна" читаем пока...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.005 c
15-1241970208
Pavia
2009-05-10 19:43
2009.07.12
IPv6 и Vista


4-1212241407
hub00
2008-05-31 17:43
2009.07.12
Cобытия курсора мышки.


15-1241861566
xayam
2009-05-09 13:32
2009.07.12
ExtJS и форматированный вывод


6-1204586032
Квэнди
2008-03-04 02:13
2009.07.12
Indy 9 и ограничение скорости


15-1241787570
Nil
2009-05-08 16:59
2009.07.12
Подскажите компонент прогресс в стиле vista





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский