Защита исходного кода Java от доступа

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

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

String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64

Можете ли вы придумать несколько других способов?

Ответ 1

У меня была такая же проблема, как у вас давным-давно. У нас были машины Windows 2000 и загруженные файлы в новую сетевую папку, которую все могли видеть. Я использовал несколько трюков, чтобы победить даже лучших воров: пробелы водяных знаков; водяные знаки метаданных; необычные персонажи; надежная временная привязка; modus operandi. Здесь их по порядку.

Пробел водяного знака:

Это мой оригинальный вклад в водяной знак. Мне нужен невидимый водяной знак, который работал в текстовых файлах. Трюк, который я придумал, заключался в том, чтобы задать конкретную схему пробелов между инструкциями программирования (или параграфами). Файл выглядел одинаково для них: некоторые заявления о программировании и разрывы строк. При правильном выборе текста будет отображаться пробел. Каждая пустая строка будет содержать определенное количество пробелов, которые, очевидно, не являются случайными или случайными. (например, 17). На практике этот метод сделал для меня работу, потому что они не могли понять, что я вкладываю в документы.

Метаданные водяного знака

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

Необычные символы

Я брошу это только для ударов. Старый трюк для олицетворения IRC состоял в том, чтобы сделать имя с буквами, которые похожи на имя другого человека. Вы можете использовать это в водяных знаках. Карта символов в Windows даст вам много необычных символов, которые похожи, но не являются буквой или номером, который вы можете использовать в своем исходном коде. Эти проявления в определенном месте в чьей-то работе не могут быть случайными.

Доверенная отметка времени

Вкратце, вы отправляете файл (или его хэш) третьей стороне, которая затем добавляет к ней временную метку и подписывает ее с помощью закрытого ключа. Любой, кто хочет доказать, когда вы создали документ, может обратиться к доверенной третьей стороне, часто к веб-сайту, для проверки вашего доказательства времени создания. Они использовались в судебных делах по спорам в области интеллектуальной собственности, поэтому они являются очень сильной формой доказательств. Они - стандартный способ выполнить доказательство, которое вы ищете. (Я включил других в первую очередь b/c, они легки, они веселее и, вероятно, будут работать.)

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

Modus operandi

Итак, вы что-то сделали, и теперь у вас есть доказательство? Нет, студенты все еще могут сказать, что вы украли у них идею или какую-то другую чушь. Мое решение для этого состояло в том, чтобы, наедине, установить один или несколько моих методов с моим инструктором. Я говорю инструктору искать пробелы, искать определенные символы и т.д., Но никогда не рассказывать другим, что такое водяной знак. Если инструктор согласится сохранить ваши простые методы в секрете, они, вероятно, будут продолжать работать нормально. Если нет, всегда есть надежная метка времени.;)

Ответ 2

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

EDIT: PGP позволит вам зашифровать/подписать, не раскрывая ваш ключ, но вы не можете обойти упрощенную простоту Zip файла с паролем, поэтому просто выбирайте новый ключ для каждого домашнего задания. Красота в простоте:)

Ответ 3

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

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

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

Ответ 4

Это случилось с парой моих учеников, которые жили в одной квартире. Один украл исходный код с диска, оставленного в ящике стола.

Вор слегка изменил украденный источник, так что это было бы не очевидно. В любом случае я заметил сходство кода и изучил источник в редакторе. Некоторые из линий имели дополнительные места на концах. У каждого студенческого источника было такое же количество дополнительных пробелов.

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

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

EDIT:

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

ИЗМЕНИТЬ 2:

"Пространственная стеганография" - это термин для скрытия сообщений в пробеле. Googling this показывает эту реализацию с открытым исходным кодом, начиная с 90-х годов, используя кодировку Хаффмана вместо кода Морзе.

Ответ 5

Мне кажется, что это проблема ИТ-администрирования. У каждого ученика должна быть собственная область загрузки, к которой другие пользователи не могут получить доступ.

Учитель будет на более высоком уровне, имея доступ к каждой папке загрузки студентов. Если это невозможно, обратитесь к @exabrial answer, поскольку это самое простое решение.

Ответ 6

Лучшее, что вы можете сделать, это просто закрепить исходный код паролем и отправить ему по электронной почте пароль.

Проблема решена.

Ответ 7

Используйте распределенную (= автономную) систему управления версиями, например git. Также может быть полезно.

История версий с вашим именем и датами может быть достаточно убедительной.

Ответ 8

Что было украдено?

  • Источник? Вы можете помещать в него случайные строки (но его можно изменить). Вы также можете попытаться добавить специальное поведение, известное только от вас (специальное нажатие клавиши изменит цветную строку), вы можете попросить учителя "другие знают эту специальную комбо?". Лучшим способом будет сбой программы, если пустой пустой бесполезный файл не будет присутствовать в архиве через 5 минут активности, ваши школьные товарищи будут слишком ленивы ждать этого времени.

  • Двоичный? Просто сравнить контрольную сумму для каждого .class будет достаточно (ваши школьные товарищи слишком ленивы, чтобы переписать файлы классов)

Ответ 9

Просто отправьте свое решение в последнюю минуту. Это не даст времени кому-либо скопировать его.

И отправьте отзыв администратору, чтобы запретить студентам видеть другие задания учеников.

Ответ 10

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

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

Также возможно обфускать script так, чтобы он имел document.write( "Эта страница была написана ххххх" ), заставляя всех, кто копирует вашу работу, не удалять кредит, если только они не расшифруют его, Но реальный ответ заключается в том, что ваша школа должна предоставить каждому из своих учеников свои пароли, защищенные паролем.

Ответ 11

В моем случае мои учителя пришли с лучшим подходом. Вопросы, которые они задают, имеют отношение к нашему регистрационному номеру. Пример:

Ввод функции/теории - это наш регистрационный номер, который разные для каждого ученика

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

Hope your lecturer will read this thread before his next tutorial :D