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

Вниз

О декомпиляции, клонировании, Dephi и Java   Найти похожие ветки 

 
IMHO ©   (2007-06-23 11:11) [0]

Господа, поправьте, если неправ.

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

А как обстоят подобные делаю с Джавой? Что получаем на выходе? JAR-файл, в который можно залезть и изменить его.

Слышал про какие-то обфускаторы... Насколько они действенны?


 
Инс ©   (2007-06-23 11:18) [1]


> изменит ряд авторских и прочих данных, склонирует и выложит
> под своим именем.

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


 
IMHO ©   (2007-06-23 11:29) [2]


> так от этого существуют специальные методы защиты.


Для Java существуют методы защиты?


 
KSergey ©   (2007-06-23 11:57) [3]

> IMHO ©   (23.06.07 11:29) [2]
> Для Java существуют методы защиты?

Зашить небольшую, но критическую часть логики во внешний бинарный модуль?


 
Инс ©   (2007-06-23 11:57) [4]

Да, с Java есть проблема, она связана с тем, что полученный исполняемый файл представляет собой не готовый к исполнению машинный код, а нечто, что еще будет транслироваться. Поэтому для Java существуют декомпиляторы, которые позволяют достаточно успешно получить исходный код Java из промежуточного байт-кода. Исполняемый файл, собранный в Delphi же, представляет собой полноценный готовый к исполнению PE-модуль, полностью декомпилировать его назад в код на Delphi невозможно. Частично конечно можно повытаскивать RTTI, еще что-нибудь, но не более того. Можно дизассемблировать - получить код на ассемблере. Именно так взломщики и поступают, но как я уже сказал, есть методы защиты. Самый мощный (ИМХО) - шифрование кода. Думаю, для Java существуют какие-либо методы защиты от модификации, но тут я не компетентен.


 
KSergey ©   (2007-06-23 12:08) [5]

> Инс ©   (23.06.07 11:57) [4]
> Самый мощный (ИМХО) - шифрование кода.

А по-моему - довольно бестолковый, т.к. в любом зшифрованной коде будет обязательно присутсвовать нешифрованный расшифровщик.


 
Инс ©   (2007-06-23 12:16) [6]


> А по-моему - довольно бестолковый, т.к. в любом зшифрованной
> коде будет обязательно присутсвовать нешифрованный расшифровщик.


Алгоритм шифрования не нужно ни от кого скрывать. Секретным должен быть ключ. Если защита построена на том, что алгоритм никто не знает - это плохая защита. Алгоритмы рекомендую использовать стандартные, всем известные - DES, 3DES, RC2, RC4, RC6 и другие. А ключ нужно генерить с помощью ассиметричных алгоритвом (RSA, например). Могу привести полную схему защиты, буду рад, если вы укажите на узкие места, о которых я не знаю.


 
KSergey ©   (2007-06-23 12:20) [7]

> Инс ©   (23.06.07 12:16) [6]
> Могу привести полную схему защиты,
>  буду рад, если вы укажите на узкие места, о которых я не  знаю.

Самому думать лень  -так что было бы интересно


 
DrPass ©   (2007-06-23 12:23) [8]


> Инс ©   (23.06.07 12:16) [6]


> Алгоритм шифрования не нужно ни от кого скрывать. Секретным
> должен быть ключ

А каким образом ключ будет секретным, если для выполнения "зашифрованного" кода он все равно должен присутствовать в исполняемом файле?


 
KSergey ©   (2007-06-23 12:27) [9]

> DrPass ©   (23.06.07 12:23) [8]
> А каким образом ключ будет секретным, если для выполнения
> "зашифрованного" кода он все равно должен присутствовать
> в исполняемом файле?

зачем торопиться с вопросами? пусть раскажет.
именно ответ на этот вопрос я и хотел увидеть ответ :)


 
Инс ©   (2007-06-23 12:28) [10]

Здесь я приводил схему:

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=51289


 
Инс ©   (2007-06-23 12:30) [11]


> А каким образом ключ будет секретным


А таким, что ключ не нужно давать кому попало, а только тому, кто за него заплатил ;)


 
DrPass ©   (2007-06-23 12:34) [12]


> А таким, что ключ не нужно давать кому попало, а только
> тому, кто за него заплатил ;)

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


 
Инс ©   (2007-06-23 12:36) [13]

Не вместе, а раздельно. Никогда не приобретали ПО через интернет? Скачиваем триальную версию, юзаем 30 дней, понравилось - платим деньги - получаем ключ.


 
DrPass ©   (2007-06-23 12:43) [14]


> Инс ©   (23.06.07 12:36) [13]

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


 
Инс ©   (2007-06-23 12:46) [15]


> Автор темы сформулировал вполне конкретную задачу - как
> защитить свой Java-код от декомпиляции?


Я же сказал - шифрование кода. Убивает дизассемблер наповал. А вы мне пытаетесь доказать, что этот метод неэффективен. Пока не убедили.


> твой, кстати, ничем не лучше других... только геморроя с
> ним намного больше


А это не мой, это вполне стандартный и общеизвестный ;)


 
Инс ©   (2007-06-23 12:49) [16]


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


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


 
Инс ©   (2007-06-23 12:51) [17]

Только, опять таки, к Java это не относится, я говорил про Delphi, впрочем, об этом я тоже писал.


 
DrPass ©   (2007-06-23 12:57) [18]


> Я же сказал - шифрование кода. Убивает дизассемблер наповал.
>  А вы мне пытаетесь доказать, что этот метод неэффективен.
>  Пока не убедили


> Наезд я услышал, а теперь, хотелось бы, чтобы Вы в подтверждение
> своих слов привели аргументы

Без проблем. Итак, разработчик А выпускает Java-продукт, в котором применяем свою крутую авторскую технологию. Алгоритм он шифрует, а ключ для дешифровки даже не распространяет в открытом виде, а для пущей крутизны помещает на eToken и продает эту железку только лицензированным пользователям
Разработчик В заинтересован в крутой авторской технологии. Поэтому он покупает лицензионную копию (1 шт), получает eToken в свое распоряжение. Дальше он дизассемблирует приложение (к Java-софту термин "дизассемблирование" не особо клеится, но ладно, оставим его)... находит зашифрованный участок, выясняет чем шифровалось (DES, 3DES, RSA - больше eToken аппаратно ничего не поддерживает)... ну а потом пишет простую утилитку, которая работает с eToken, подсовывает ей зашифрованный код и своим же ключиком и расшифровывает. И все. А дальше он может подарить всем своим друзьям уже исправленное расшифрованное приложение (оно ведь от ключика уже отвязано - попробуй выясни, от какого клиента была утечка информации). И использовать ту самую крутую авторскую технологию в своем софте и т.д.
Так как твой метод поможет скрыть алгоритм от профессионала?


 
Virgo_Style ©   (2007-06-23 13:04) [19]

Инс ©   (23.06.07 12:49) [16]
укажите на слабые места


Забить в Readme.txt вместо одной строки
S/N: AAAA-BBBB-CCCC-DDD
две
UserName: ABCDEF
S/N: AAAA-BBBB-CCCC-DDD

не намного сложнее, по-моему.


 
Инс ©   (2007-06-23 13:17) [20]


> [18] DrPass ©   (23.06.07 12:57)


Что ж, это верно. Если цена ключа меньше, чем полученная потом выгода от кражи алгоритма, то это действительно проблема. Тут уже нужен принципиально другой подход, а не программные извороты. Как быть уверенным, что продаешь продукт добропорядочному пользователю и как в случае чего его потом найти. Это действительно проблема.


 
Anatoly Podgoretsky ©   (2007-06-23 13:19) [21]

> Инс  (23.06.2007 12:36:13)  [13]

Да, да, крякеры так и поступают, оплачивают по ворованой кредитке и что интересно не ждут окончания 30 дневного срока, сразу покупают :-)


 
Anatoly Podgoretsky ©   (2007-06-23 13:19) [22]

> DrPass  (23.06.2007 12:23:08)  [8]

Цифровая подпись, распространяется только открытый ключ


 
KSergey ©   (2007-06-23 13:22) [23]

> Инс ©   (23.06.07 12:30) [11]
>
> > А каким образом ключ будет секретным
>
>
> А таким, что ключ не нужно давать кому попало, а только
> тому, кто за него заплатил ;)

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

PS
Хотя вру.
Я участвовал в одной раздаче: Windows Server 2000, пробная версия. Серийник был на всех дисках одинаковый, однако он подходил и к полной версии, чем пираты и воспользовались немного позднее.


 
Anatoly Podgoretsky ©   (2007-06-23 13:22) [24]

> Инс  (23.06.2007 12:46:15)  [15]

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

Ты пока мыслишь по ламерски, не с точки зрения хакера и поэтому тебе кажется что все ОК.


 
Инс ©   (2007-06-23 13:23) [25]


> [21] Anatoly Podgoretsky ©   (23.06.07 13:19)


Ну так не защищайте свои программные продукты вообще никак. Идеальной защиты нет и быть не может, мы лишь можем уменьшить процент потерь из-за краж. Либо идите по другому пути - программа бесплатная, платная техническая поддержка. Для сложных инженерных приложений это будет работать.


 
Anatoly Podgoretsky ©   (2007-06-23 13:26) [26]

> DrPass  (23.06.2007 12:57:18)  [18]

Вот это грамотный подход, крякерский, а не ламерский.
Главное зачем самому то расшифровывать, если все необходимое для этого уже содержится в самой программе.
Без ВЕБ сервисов надежной защиты не существует, а веб сервисы часто совмещают с онлайн информацией, правда там и защищать уже как бы не надо, просто отключают пользователя и все и как правило там подписка, а не пользование.


 
Anatoly Podgoretsky ©   (2007-06-23 13:33) [27]

> Инс  (23.06.2007 13:17:20)  [20]

Переходить на промышленные маштабы, например про WinZip наверно слышал?
Про маштабы его воровства наверно тоже знаешь, но это не мешало автору получать порядка миллиона долларов в месяц или в неделю (не помню точно).


 
DrPass ©   (2007-06-23 13:38) [28]


> Инс ©   (23.06.07 13:23) [25]

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


 
Инс ©   (2007-06-23 13:40) [29]


> Переходить на промышленные маштабы, например про WinZip
> наверно слышал?


Да и Windows сюда тоже подходит :) Некоторые еще делают программные продукты бесплатными для ExUSSR, в расчете на то, что большинство взломщиков как раз оттуда, чтобы отбить интерес ко взлому. А продают пользователям из тех стран, где в общем-то покупать, а не воровать, общепринято. Некоторые еще и прилагают к программе подробную инструкцию по взлому - с той же самой целью, отбить спортивный интерес. Но это мы отошли от темы, действительно, вопрос был как скрыть код. Решение с ВЕБ-сервисами надежно, но не всегда удобно для пользователя.


 
Инс ©   (2007-06-23 13:45) [30]


> Но потраченное время, усилия и средства на разработку защиты
> должны, скажем так, себя оправдывать.


Мне это говорить не нужно, я в курсе. В той ссылке, что я вам дал я об этом говорил. Защита - это многоярусная система и в каждом конкретном случае нужно выбирать свой подход. Пока мы тут просто набрасываем версии. Давайте все же определимся, о каком случае мы говорим, тогда можно будет подумать, как в данном случае лучше поступить.


 
Anatoly Podgoretsky ©   (2007-06-23 13:45) [31]

> Инс  (23.06.2007 13:40:29)  [29]

Ты это скажи взломщикам FAR :-)
Веб сервисы конечно надежны, но и применимость ниже


 
Инс ©   (2007-06-23 13:48) [32]


> Ты это скажи взломщикам FAR :-)


Я не могу судить насколько это эффективно. Я лишь констатировал факт, что некоторые так делают из расчета на снижение кряков.


 
DrPass ©   (2007-06-23 13:50) [33]


> Давайте все же определимся, о каком случае мы говорим, тогда
> можно будет подумать, как в данном случае лучше поступить.
>

Это как бы уже давно определено и без нас. Не секрет, что правило

> цена ключа меньше, чем полученная потом выгода от кражи
> алгоритма

для крупнотиражного массового ПО (того, где действительно применяются уникальные алгоритмы) действует почти всегда
Крупные промышленные системы (типа SAP R3, ITM и т.д.) не воруют :)
А вот сегмент специализированного "наукоемкого" ПО действительно может нуждаться в такой защите. Это всякие конструкторские, математические и т.п. приложения, которые стоят тысячи/десятки тысяч у.е. и продаются небольшими тиражами.


 
IMHO ©   (2007-06-23 14:02) [34]

Я вот что имел в виду, когда создавал тему.
Вы, господа, сразу увлеклись темой shareware, покупкой по ворованным картам и отошли от главного.

Давайте поговорим о FREEWARE. Допустим, я не желаю, чтобы мой продукт декомпилировали, а потом успешно клонировали. Пользуйтесь бесплатно на здоровье, это freeware, но я не хочу делать доступными некоторые реализации, имею на то право как автор.

Делая EXE-бинарник, я могу быть относительно спокоен в этом, но делая JAR - где гарантия???


 
isasa ©   (2007-06-23 14:06) [35]

DrPass ©   (23.06.07 13:50) [33]
Ну в таком случае, мы тихо подходим к мысли о том, что такой код размещается в отдельном маленьком дивайсе, продаваемом индивидуально заказчику. Ключ.


 
IMHO ©   (2007-06-23 14:07) [36]

А даже если говорить о shareware.
Продавая ключик (за полнофункциональный EXE), я всего лишь даю возможность пользоваться программой неограниченно, а не возможность рыться в ней.


 
IMHO ©   (2007-06-23 14:11) [37]

Интересно мнение Юрия Зотова в этом вопросе. Ведь он (дельфист до мозга костей) перешел на Java и Eclipse.


 
KSergey ©   (2007-06-23 14:46) [38]

> IMHO ©   (23.06.07 14:02) [34]
>  но я не
> хочу делать доступными некоторые реализации, имею на то
> право как автор.

Мдя...
Очевидно алгоритмы в моих программах столь тривиальны (и сделуны на всем доступных источниках), что такая мысль мне даже в олову не приходила... :(
Жалею о бесцельно прожитых годах :(

(это лишь мысли вслух, это не относится к кому-либо. Просто мне действительно никогда даже не приходило такое в голову.)


 
DrPass ©   (2007-06-23 16:39) [39]


> IMHO ©   (23.06.07 14:02) [34]


> но делая JAR - где гарантия???

Гарантии нет, но обфускатор более-менее защитит. По крайней мере, разобрать кашу из кода не намного проще, чем исполняемый файл


 
P   (2007-06-23 20:02) [40]


>
> IMHO ©   (23.06.07 11:11)
> А как обстоят подобные делаю с Джавой? Что получаем на выходе?
>  JAR-файл, в который можно залезть и изменить его.
>
> Слышал про какие-то обфускаторы... Насколько они действенны?


например просто понять такой код:
jksdjkds754 += rer43438943 -(dfjdfl5 + rrrttr474)/rthewrjwk493;
for(trjrtjk3443 = 10; trjrtjk3443 < 34; trjrtjk3443++){};

Ну и тому подобное. Имеем полное запутывание имен переменных.


 
Anatoly Podgoretsky ©   (2007-06-23 20:47) [41]

> P  (23.06.2007 20:02:40)  [40]

> for(trjrtjk3443 = 10; trjrtjk3443 < 34; trjrtjk3443++){};

Чего сложного

for(i = 10; i < 34; i++){};


 
iZEN ©   (2007-06-23 20:53) [42]


> IMHO ©   (23.06.07 14:02) [34]
>
> Делая EXE-бинарник, я могу быть относительно спокоен в этом,
>  но делая JAR - где гарантия???

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

Один из известных свободный обфускаторов для Java-кода — ProGuard: http://proguard.sourceforge.net/


 
P   (2007-06-23 22:01) [43]


> Anatoly Podgoretsky ©   (23.06.07 20:47) [41]
>
> > P  (23.06.2007 20:02:40)  [40]
>
> > for(trjrtjk3443 = 10; trjrtjk3443 < 34; trjrtjk3443++){};
>
> Чего сложного
>
> for(i = 10; i < 34; i++){};


Только данный код проще написать самому чем разгребать подобное.


 
Panel   (2007-06-24 00:41) [44]

Только данный код проще написать самому чем разгребать подобное.

Средства рефакторинга в руки... и не надо ничего разгребать.


 
Иа   (2007-06-24 06:45) [45]

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


 
iZEN ©   (2007-06-24 07:42) [46]


> Иа   (24.06.07 06:45) [45]

Э...
Не надо переносить понимание проблем .Net на Яву.
Там несколько всё по-другому.


 
Иа   (2007-06-24 10:42) [47]


> iZEN ©   (24.06.07 07:42) [46]
>
> > Иа   (24.06.07 06:45) [45]
>
> Э...
> Не надо переносить понимание проблем .Net на Яву.
> Там несколько всё по-другому.


Во-первых, я не считаю это проблемой. Во-вторых, не могли бы вы озвучить отличие Java VM от .NET CLR в возможностях и механизмах обфускации кода?


 
iZEN ©   (2007-06-24 22:16) [48]


> Иа   (24.06.07 10:42) [47]
>
> Во-первых, я не считаю это проблемой. Во-вторых, не могли
> бы вы озвучить отличие Java VM от .NET CLR в возможностях
> и механизмах обфускации кода?

В Java исполняемой единицей является .class-файл. В .Net исполняемой единицей является сборка. Сборка .Net содержит несколько типов и код исполнения, но из неё не удастся выделить отдельные типы (классы) и сохранить их в отдельных файлах для последующей обработки обфускатором и построения из них новой сборки.

В .class-файле Java:
имена переменных и методов хранятся в том виде, каком их определил программист (подмножество ASCII, допустимы имена членов на национальном языке, коды символов которого имеют отображение в ASCII-набор);
значения строковых типов хранятся в Unicode (UTF-8, UCS-2 и UCS-4 в Java 5.0);
class-файл имеет CRC-последовательность, подтверждающую корректность байткода файла.
Всё это и ещё куча вещей должны учитываться обфускатором. И это гораздо легче, чем работать с бинарной сборкой .Net.

Кроме того, Java VM каждый раз производит верификацию байткода загружаемого .class-файла. А .Net CLR верификацию делает(делает ли?) один раз при первоначальном запуске сборки и генерирует из неё бинарный нативный код, который кэширует GAC для будущего использования CLR.


 
Иа   (2007-06-25 02:21) [49]


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

Неверно

> В .class-файле Java:

То же самое, за исключением локальных переменных.

> Всё это и ещё куча вещей должны учитываться обфускатором.
>  И это гораздо легче, чем работать с бинарной сборкой .Net.

Не вижу как одно вытекает из другого

>А .Net CLR верификацию делает(делает ли?)

Задавая такой вопрос вы демонстрируете свое незнание в вопросе, который взялись осветить.

>один раз при первоначальном запуске сборки

Неверно.

>и генерирует
> из неё бинарный нативный код, который кэширует GAC для будущего
> использования CLR.

Неверно.


 
iZEN ©   (2007-06-25 03:07) [50]


> Иа   (25.06.07 02:21) [49]

Отвечая на ваш вопрос, основывался на выкладках, почерпнутых из книжки Пол Гиббонз "Платформа .NET для Java-программистов". Допускаю, что с тех пор многое в .Net переменилось -- не изучал вопрос досконально и не претендую на знание последней версии .Net CLR.


 
iZEN ©   (2007-06-25 03:25) [51]


> IMHO ©   (23.06.07 11:11)
>
>  JAR-файл, в который можно залезть и изменить его.

class-файлы можно защитить от реинжиниринга кода обфускацией. Ресурсы (текст, картинки, аудио, видео) невозможно проверить на достоверность кроме как использованием подписанного JAR-файла цифровой подписью со сверкой MD-5 и SHA-1 контрольных сумм файлов архива на этапе запуска приложения.


 
Иа   (2007-06-25 03:49) [52]


> как использованием подписанного JAR-файла цифровой подписью


Что изменится если я уберу цифровую подпись с чужого файла и подпишу его заново моим ключом? Предполагая, что в коде приложения нет специальной проверки на публичный ключ автора?


 
Иа   (2007-06-25 03:54) [53]


> > Иа   (25.06.07 02:21) [49]
>
> Отвечая на ваш вопрос, основывался на выкладках, почерпнутых
> из книжки Пол Гиббонз "Платформа .NET для Java-программистов".
>  Допускаю, что с тех пор многое в .Net переменилось -- не
> изучал вопрос досконально и не претендую на знание последней
> версии .Net CLR.


В нет пунктах которые вы затронули выше принципиальных изменений с 1.0- 2.0 не произошло. Предполагаю, что вы могли запутаться в терминологии или запоминили не то. К примеру, компиляцию в native и кэширование в GAC как вы описывали можно устроить с помощью ngen, при обычной работе такого не происходит.  Читать по CLR можно и нужно Рихтера.


 
Игорь Шевченко ©   (2007-06-25 12:30) [54]

Господа хорошие, говоря о защите о взлома, позаботьтесь об одном - чтобы ваша программа была хоть кому-то нужна...


 
Anatoly Podgoretsky ©   (2007-06-25 13:08) [55]

> Игорь Шевченко  (25.06.2007 12:30:54)  [54]

Ну можно же заплатить взломщику.


 
db2admin ©   (2007-06-25 14:11) [56]

Anatoly Podgoretsky ©   (25.06.07 13:08) [55]
ради спортивного интереса


 
Anatoly Podgoretsky ©   (2007-06-25 14:39) [57]

Ради того, что бы проявили интерес хотя бы за деньги.


 
iZEN ©   (2007-06-25 21:41) [58]


> Иа   (25.06.07 03:49) [52]
>
>
> > как использованием подписанного JAR-файла цифровой подписью
>
>
> Что изменится если я уберу цифровую подпись с чужого файла
> и подпишу его заново моим ключом? Предполагая, что в коде
> приложения нет специальной проверки на публичный ключ автора?
>

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


 
Petr V.Abramov   (2007-06-26 00:47) [59]

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


 
Иа   (2007-06-26 02:42) [60]


> Ничего, если ваш сертификат будет находится в хранилище
> сертификатов пользователя в списке доверенных.


Мой или родительский? Если мой, то каким образом происходит добавление моего сертификата легально - во время инсталляции? И как тогда делать xcopy deployment? Что произойдет если ресурс подписан самодельным сертификатом? А если файл с кодом?


 
iZEN ©   (2007-06-26 09:17) [61]

Вообще же, общие принципы описаны здесь:
http://khpi-iip.mipk.kharkiv.edu/library/extent/prog/jar/TOC.html

Более наглядно:
http://www.rudometov.com/security/03_01_26_Java_Crypto/Java_Crypto.html


> Иа   (26.06.07 02:42) [60]
> > Ничего, если ваш сертификат будет находится в хранилище
> > сертификатов пользователя в списке доверенных.
> Мой или родительский?
Ваш.


> Если мой, то каким образом происходит
> добавление моего сертификата легально - во время инсталляции?
Ну да.
Панель управления -> Java -> вкладка Security -> диалог Certificates -> добавляете сертификат производителя подписанного продукта в одну из категорий.


> И как тогда делать xcopy deployment?

Использовать утилиты jarsigner, keytool и средство автоматизации типа Ant или скриптов командного процессора операционной системы.

http://www.javaportal.ru/java/articles/jar.html


> Что произойдет если
> ресурс подписан самодельным сертификатом? А если файл с
> кодом?

Выброс java.security.DigestException или java.security.SignatureException -- в зависимости от ситуации. В общем случае -- потомок java.security.GeneralSecurityException.

Подробнее: http://java.sun.com/javase/reference/api.jsp


 
Иа   (2007-06-26 09:59) [62]


> Вообще же, общие принципы описаны здесь:
> http://khpi-iip.mipk.kharkiv.edu/library/extent/prog/jar/TOC.
> html


"А в версии 1.2 платформы Java подписанные приложения, вызываемые с опцией интерпретатора -jar, будут проверяться средой выполнения. "

? То есть если я не вызову с ключем, то не проверится? 8()


Более наглядно:
http://www.rudometov.com/security/03_01_26_Java_Crypto/Java_Crypto.html


А тут вообще про криптографию в принципе. Мне не надо объяснять как public/private ключи работают и что такое x509 сертификаты. Я, э, это знаю :) Меня интересует как цифровая подпись используется java vm, в сравнении с .NET. Первая ссылка с цитаой выше меня просто потрясла. Это афтар курил чего-то?


> > И как тогда делать xcopy deployment?
>
> Использовать утилиты jarsigner, keytool и средство автоматизации
> типа Ant или скриптов командного процессора операционной
> системы.


Ничего из вышеперечисленного к моему вопросу отношения не имеет.
Собственно, вы уверены что вы не java аплеты только имеете ввиду обобщая их на все java приложения? Потому как аплеты, так же как и .NET thin controls в IE живут своей особой жизнью.


 
Тульский ©   (2007-06-26 10:24) [63]

Можно воспользоваться компилятором Excelsior Jet и получить exe-шник.


 
iZEN ©   (2007-06-26 10:55) [64]


> Иа   (26.06.07 09:59) [62]
>
> "А в версии 1.2 платформы Java подписанные приложения, вызываемые
> с опцией интерпретатора -jar, будут проверяться средой выполнения.
>  "
> ? То есть если я не вызову с ключем, то не проверится? 8()

У вас что-то с логикой?
Опция "-jar" нужна для запуска jar-файла на выполнение ВООБЩЕ.

> Иа   (26.06.07 09:59) [62]
>
>
> Более наглядно:
> http://www.rudometov.com/security/03_01_26_Java_Crypto/Java_Crypto.
> html
>
>
> А тут вообще про криптографию в принципе. Мне не надо объяснять
> как public/private ключи работают и что такое x509 сертификаты.
>  Я, э, это знаю :) Меня интересует как цифровая подпись
> используется java vm, в сравнении с .NET. Первая ссылка
> с цитаой выше меня просто потрясла. Это афтар курил чего-
> то?

Там картинки. Всё ясно.

А причём здесь сравнение с .NET?


> Иа   (26.06.07 09:59) [62]
>
> > > И как тогда делать xcopy deployment?
> >
> > Использовать утилиты jarsigner, keytool и средство автоматизации
> > типа Ant или скриптов командного процессора операционной
> > системы.
>
> Ничего из вышеперечисленного к моему вопросу отношения не
> имеет.

К какому вопросу?


> Иа   (26.06.07 09:59) [62]
> Собственно, вы уверены что вы не java аплеты только имеете
> ввиду обобщая их на все java приложения? Потому как аплеты,
>  так же как и .NET thin controls в IE живут своей особой
> жизнью.

В Java одна и та же система безопасности для апплетов и приложений. Правда, модели безопасности Java v.1.1.x и Java v.2 отличаются.


 
iZEN ©   (2007-06-26 11:02) [65]

http://www.rudometov.com/security/03_01_26_Java_Crypto/Java_Crypto.html
Рисунки:
Рис. 3. Последовательность действий при подписи jar-архива.
и
Рис. 4. Последовательность действий при верификации полученного jar-архива.
Достаточно наглядны.


 
DiamondShark ©   (2007-06-26 12:04) [66]


> буду рад, если вы укажите на узкие места, о которых я не
> знаю.

Элементарно.
После дешифровки дешифрованная информация должна появиться где-нибудь в памяти в открытом виде.


 
Суслик ©   (2007-06-26 12:18) [67]


> После дешифровки дешифрованная информация должна появиться
> где-нибудь в памяти в открытом виде

говорят, что есть такие крипторы с вирт. машинами, где инфа никогда не появляется полностью в памяти.


 
Иа   (2007-06-26 16:37) [68]


> > Иа   (26.06.07 09:59) [62]
> >
> > "А в версии 1.2 платформы Java подписанные приложения,
>  вызываемые
> > с опцией интерпретатора -jar, будут проверяться средой
> выполнения.
> >  "
> > ? То есть если я не вызову с ключем, то не проверится?
>  8()
>
> У вас что-то с логикой?
> Опция "-jar" нужна для запуска jar-файла на выполнение ВООБЩЕ.
>


В той же ссылке рассказывается о JavaRunner классе. На мой взгляд никакой опции -jar там не видно. Будет ли выполнятся проверка при таком варианте запуска?


> Там картинки. Всё ясно.
>
> А причём здесь сравнение с .NET?


Вы говорили выше о то что в Java "немного не так". Вот я и пытаюсь выяснить, что именно. Кстати, вы говорили о .class как минимальной единице. Но подписать .class нельзя. Я правильно понимаю, что ограничить права для кода выполняемого не из .jar нельзя?


> > Иа   (26.06.07 09:59) [62]
> >
> > > > И как тогда делать xcopy deployment?

> К какому вопросу?


Теперь видите? Из ваших слов следовало что если моего сертификата нет в списке, код не запустится. Я пытаюсь выяснить у вас как тогда его распространять.


 
iZEN ©   (2007-06-26 18:05) [69]

Иа   (26.06.07 16:37) [68], такое ощущение, что я зря ссылки выкладывал.

Там же всё написано!


 
Mystic ©   (2007-06-26 19:03) [70]


> Делая EXE-бинарник, я могу быть относительно спокоен в этом,
>  но делая JAR - где гарантия???


Думаю, что даже делая EXE-бинарник быть спокойным нельзя, гарантии не даст никто. Можно немного усложнить процесс, но думаю, что лучшим средством защиты будет соответствующее лицензионное соглашение :)


 
oldman ©   (2007-06-26 19:08) [71]


> IMHO ©   (23.06.07 11:11)  
> вы не сильно беспокоитесь о том, что кто-то декомпилирует вашу программу


Флаг ему в руки! Несколько миллионов строк asm-кода...


 
Anatoly Podgoretsky ©   (2007-06-26 19:11) [72]

> oldman  (26.06.2007 19:08:11)  [71]

Из которых менее процента своего кода.


 
Иа   (2007-06-27 02:24) [73]


> Иа   (26.06.07 16:37) [68], такое ощущение, что я зря ссылки
> выкладывал.
>
> Там же всё написано!


Пока все что я понял о "security" в Java это

1) При запуске jar файла через networkloader и иже с ними никакой проверки не происходит
2) Никакой проверки на наличие сертификата в разрешенных не происходит если это не апплет. То есть по умолчанию.
3) Что бы распространить полиси с апплетов на запускаемое приложение надо сделать это ручками java -Djava.security.manager MyLoader
4) До 1.2 все было ГОРАЗДО хуже.

Вывод: правила безопасности на основе цифровой подписи в java по прочности в подметки не годятся .NET security policy.
Собственно, это меня и интересовало. Спасибо.


 
ferr ©   (2007-06-27 05:15) [74]

Возможность декомпиляция это очень большая проблема для таких программ.
В частности для .net есть утилита Lutz Roeder"s .NET Reflector которая для любой сборки генерирует очень даже неплохой код на любом из языков (c#, vb, delphi, c++). Для исследования стандартных классов это полезно, но ...

MS насколько помнится обещала принять меры, только что они хотели предпринять я уже не помню..


 
iZEN ©   (2007-06-27 13:50) [75]


> Иа   (27.06.07 02:24) [73]
> Пока все что я понял о "security" в Java это
>
> 1) При запуске jar файла через networkloader и иже с ними
> никакой проверки не происходит

Тем не менее, все class-файлы (кроме системных классов из пакетов java*), которые участвуют в загрузке, проходят верификацию. Процесс выполнения их кода контролируется диспетчером безопасности (java.lang.SecurityManager, java.security.AccessController) и регулируется текущей политикой безопасности (java.security.Policy). Всё очень гибко устроено так, что система управления доступом обеспечивает механизмы, которые используют права доступа и политики безопасности, чтобы разрешить или запретить доступ к определённым ресурсам от файлов на локальном диске до сетевых соединений (включая домены) и защищённых объектов среды выполнения.

> Иа   (27.06.07 02:24) [73]
> 2) Никакой проверки на наличие сертификата в разрешенных
> не происходит если это не апплет. То есть по умолчанию.
> 3) Что бы распространить полиси с апплетов на запускаемое
> приложение надо сделать это ручками java -Djava.security.
> manager MyLoader

Пока не определена новая политика безопасности в системе Java, используется базовая политика безопасности. В каталоге [JAVA_HOME]/lib/security/ находится файл java.security, в котором по мимо прочего есть две записи, указывающие, где находится файл политики безопасности. Пример:
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
Приведу так же содержимое стандартного файла политики [JAVA_HOME]/lib/security/java.policy:
// Standard extensions get all permissions by default

grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};

// default permissions granted to all domains

grant {
// Allows any thread to stop itself using the java.lang.Thread.stop()
// method that takes no argument.
// Note that this permission is granted by default only to remain
// backwards compatible.
// It is strongly recommended that you either remove this permission
// from this policy file or further restrict it to code sources
// that you specify, because Thread.stop() is potentially unsafe.
// See "http://java.sun.com/notes" for more information.
permission java.lang.RuntimePermission "stopThread";

// allows anyone to listen on un-privileged ports
permission java.net.SocketPermission "localhost:1024-", "listen";

// "standard" properies that can be read by anyone

permission java.util.PropertyPermission "java.version", "read";
permission java.util.PropertyPermission "java.vendor", "read";
permission java.util.PropertyPermission "java.vendor.url", "read";
permission java.util.PropertyPermission "java.class.version", "read";
permission java.util.PropertyPermission "os.name", "read";
permission java.util.PropertyPermission "os.version", "read";
permission java.util.PropertyPermission "os.arch", "read";
permission java.util.PropertyPermission "file.separator", "read";
permission java.util.PropertyPermission "path.separator", "read";
permission java.util.PropertyPermission "line.separator", "read";

permission java.util.PropertyPermission "java.specification.version", "read";
permission java.util.PropertyPermission "java.specification.vendor", "read";
permission java.util.PropertyPermission "java.specification.name", "read";

permission java.util.PropertyPermission "java.vm.specification.version", "read";
permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
permission java.util.PropertyPermission "java.vm.specification.name", "read";
permission java.util.PropertyPermission "java.vm.version", "read";
permission java.util.PropertyPermission "java.vm.vendor", "read";
permission java.util.PropertyPermission "java.vm.name", "read";
};

Вообще же, общий формат файла политики таков:
[keystore "URL_хранилища_ключей", "тип_хранилища";]
grant [SignedBy "список_подписавших"] [, CodeBase "URL_базы_кода"]
{
permission имя_класса_права_доступа ["имя_объекта"] [, "действие"] [, SignedBy "список_подписавших"];
....
}
(в именах допустимы шаблоны: ${user.home}, ${file.separator} и т.д.).
При задании новой политики для приложения можно определить: класс Провайдера политики безопасности, класс собственного Диспетчера безопасности, файл Политики безопасности или же оставить что-то из них по умолчанию. Всё это похоже на управление расширенным доступом на основе ACL в операционных системах UNIX.

> Иа   (27.06.07 02:24) [73]
> 4) До 1.2 все было ГОРАЗДО хуже.

Не надо абсолютизировать.
До v.1.2 нельзя было задать свою политику безопасности и права доступа для выполнения приложения в JVM. В Java 1.0.x всё походило на политику безопасности Microsoft для ActiveX (которые можно было либо вырубить, либо разрешить им всё) и EXE-приложения.  В Java 1.1: апплеты выполнялись в песочнице с максимальными ограничениями; подписанные апплеты имели определённые права и доступ к файловой системе (как приложения пользователя); приложения же были ничем не ограничены. Всё это было не очень гибко. Сейчас же (начиная с версии Java 1.2) всё гораздо гибче -- появилась возможность создания конфигурируемых прав доступа.

> Иа   (27.06.07 02:24) [73]
> Вывод: правила безопасности на основе цифровой подписи в
> java по прочности в подметки не годятся .NET security policy.

Если не хотите разбираться, что ж, думайте так и дальше. :))

> Иа   (27.06.07 02:24) [73]
> Собственно, это меня и интересовало. Спасибо.

Пожалуйста.

P.S.
Сертификаты служат для идентификации производителя продукта и определения принадлежности продукта конкретному производителю. Дайджест (MD-5, SHA-1) удостоверяет целостность продукта. Напоминаю, что в данной теме разговор ведётся именно о защите контента от дизассемблирования и обеспечения его целостности -- о защите от модификации.



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

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

Наверх




Память: 0.73 MB
Время: 0.054 c
2-1183596441
Abcdef123
2007-07-05 04:47
2007.07.29
Delphi перестала открывать проекты, почему?


15-1183564890
biluk
2007-07-04 20:01
2007.07.29
Вопрос на засыпку


15-1182861256
de.
2007-06-26 16:34
2007.07.29
О Delphimaster


8-1161842358
delphim
2006-10-26 09:59
2007.07.29
доступ нескольких пользователей с данным


6-1166771717
fishka
2006-12-22 10:15
2007.07.29
IdTelnet и получение ответов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский