Защита исходного кода Java от доступа [закрыто]
на прошлой неделе мне пришлось создать небольшой графический интерфейс для домашней работы. Никто из моих одноклассников делал. Они украли мой, откуда мы должны были загрузить его, а затем они загрузили его снова как свои. Когда я сказал своему учителю, что это все моя работа, он мне не поверил.
поэтому я подумал о том, чтобы положить бесполезный метод или что-то внутри с доказательством того, что я его закодировал. Я подумал о шифровании. Моя лучшая идея до сих пор:
String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64
можете ли вы придумать другие лучшие способы?
11 ответов:
У меня была такая же проблема, как вы давным-давно. У нас были машины Windows 2000 и загруженные файлы в новую сетевую папку, которую все могли видеть. Я использовал несколько трюков, чтобы победить даже лучших воров: водяные знаки пробелов; водяные знаки метаданных; необычные персонажи; доверенные временные метки; modus operandi. Вот они по порядку.
пробелы водяные знаки:
Это мой первоначальный вклад в водяные знаки. Мне нужен был невидимый водяной знак, который работал в тексте файлы. Трюк, который я придумал, заключался в том, чтобы поместить определенный шаблон пробелов между программными инструкциями (или абзацами). Файл выглядел для них одинаково: некоторые программные операторы и разрывы строк. При тщательном выборе текста будут показаны пробелы. Каждая пустая строка будет содержать определенное количество пробелов, которые, очевидно, не являются случайными или случайными. (например, 17) на практике этот метод сделал работу для меня, потому что они не могли понять, что я встраивал в документы.
водяные знаки метаданных
здесь вы изменяете метаданные файла, чтобы они содержали информацию. Вы можете вставлять свое имя, хэш и т. д. в невидимой части файла, особенно EXE-файлы. В NT времена, альтернативные потоки данных были популярны.
необычные символы
Я брошу это только для удовольствия. Старый трюк олицетворения IRC состоял в том, чтобы сделать имя с буквами, которые выглядят похожими на имя другого человека. Вы можете использовать это в водяных знаках. Этот Карта символов в Windows даст вам много необычных символов, которые выглядят похожими, но не являются буквой или цифрой, которые вы можете использовать в своем исходном коде. Они появляются в определенном месте в чьей-то работе не могут быть случайными.
Доверенная Временная Метка
короче говоря, вы отправляете файл (или его хэш) третьей стороне, которая затем добавляет к нему метку времени и подписывает его закрытым ключом. Любой, кто хочет подтвердить, когда вы создали документ, может перейти к доверенному третьему партия, часто веб-сайт, чтобы проверить ваше доказательство времени создания. Они использовались в судебных делах по спорам об интеллектуальной собственности, поэтому они являются очень сильной формой доказательств. Они-стандартный способ выполнить доказательство, которое вы ищете. (Я включил другие первые b / c они легки, они веселее и, вероятно, будут работать.)
эта статья в Википедии может помочь ваш преподаватель поймет ваши доказательства и раздел внешних ссылок имеет много поставщиков, в том числе и бесплатные. Я запускал тестовые файлы через бесплатные в течение нескольких дней, прежде чем использовать их для чего-то важного.
Modus operandi
Итак, вы что-то сделали, и теперь у вас есть доказательства? Нет, студенты все еще могут сказать, что вы украли у них идею или какую-то другую ерунду. Мое решение для этого состояло в том, чтобы в частном порядке установить один или несколько моих методов с моим инструктором. Я говорю инструктору искать пробелы, искать определенные символы и т. д. но никогда не скажет другие, что водяной знак был. Если инструктор согласится держать ваши простые техники в секрете, они, вероятно, продолжат работать нормально. Если нет, всегда есть надежная временная метка. ;)
Если ваши одноклассники украли ваш код с сайта загрузки, я бы зашифровал вашу домашнюю работу и отправил ключ по электронной почте учителю. Вы можете сделать это с помощью PGP, если хотите быть сложным, или что-то такое же простое, как Zip-файл с паролем.
изменить: PGP позволит вам шифровать / подписывать, не раскрывая свой ключ, но вы не можете победить простоту сдвига Zip-файла с паролем, поэтому просто выберите новый ключ каждое домашнее задание. Красота в простоте :)
Если вы даете исходный код учителю, то просто добавьте
serialVersionUID
к одному из ваших файлов класса, который является зашифрованной версией вашего имени. Вы можете расшифровать его самому Учителю.Это ничего не значит для других, только для вас. Вы можете сказать, что это сгенерированный код, если они его крадут, вероятно, не потрудятся его изменить вообще.
Если вы хотите сделать это стильно, вы можете использовать этот трюк, если вы найдете случайно семя, которое производит ваше имя. :) Это было бы код тогда, и где бы он ни появился, это доказывало бы, что это было вы кто сделал этот код.
Это случилось с парой моих студентов, которые жили в одной квартире. Один украл исходный код с диска, оставленного в ящике стола.
вор слегка изменил украденный источник, чтобы это не было очевидно. Я все равно заметил сходство кода и изучил источник в Редакторе. Некоторые линии имели дополнительные пробелы на концах. Источник каждого студента имел одинаковое количество дополнительных пробелов.
вы можете использовать это для кодирования информации не делая его видимым. Вы можете закодировать свои инициалы или свой студенческий билет в конце некоторых строк, с пробелами.
вор, скорее всего, внесет косметические изменения в видимый код, но может пропустить невидимые символы.
EDIT:
думая об этом немного больше, вы могли бы использовать пробелы и вкладки в качестве азбуки Морзе и dahs, и поставить свое имя в конце нескольких строк. Вор может удалить, изменить порядок или перепечатать некоторые строки без разрушает вашу личность.
EDIT 2:
"стеганография пробелов" - это термин для сокрытия сообщений в пробелах. Гуглить он показывает это реализация с открытым исходным кодом начиная с 90-х годов, используя кодировку Хаффмана вместо кода Морзе.
Мне кажется, что это проблема администрирования ИТ. Каждый студент должен иметь там собственную область загрузки, к которой не могут получить доступ другие студенты.
учитель будет на более высоком уровне, имея возможность получить доступ к каждой папке Загрузки студента. Если это невозможно пойти с @exabrial ответ, как это самое простое решение.
лучшее, что вы можете сделать, это просто почтовый исходный код с паролем и по электронной почте пароль к учителю.
решена.
использовать распределенный (=автономный) система контроля версий, как git. Это тоже может быть полезно.
история версий с вашим именем и датами может быть достаточно убедительной.
Что было украдено ?
источник ? Вы можете поместить в него случайные строки (но его можно изменить). Вы также можете попробовать добавить специальное поведение, известное только от вас (специальное нажатие клавиши изменит цветовую строку), затем вы можете спросить учителя "другие знают эту специальную комбинацию ?". Лучшим способом будет сбой программы если пустой бесполезный файл не присутствует в архиве после 5 минут активности, вашим одноклассникам будет лень ждать этого количества время.
бинарный ? Просто сравнивая контрольную сумму каждого .класс будет достаточно (ваши одноклассники слишком ленивы, чтобы переписать файлы класса)
просто опубликуйте свое решение в последнюю минуту. Это не даст никому времени, чтобы скопировать его.
и отправить отзыв администратору, чтобы запретить студентам видеть другие задания студентов.
Если вы загружаете файл в a .zip с шифрованием пароля, любой может взломать пароль при загрузке .zip-файл и их процессор запускают миллион запросов на него, если они настолько велики, что обманывают вора. К сожалению, некоторые из них и это легко сделать.
ваш источник может быть просмотрен на общем сервере другими студентами. Учитель действительно должен дать вам свой собственный зашифрованный каталог паролей для загрузки. Это можно легко сделать, просто добавив поддомены. Но, возможно, учитель может позволить вам загрузить файлы на свой собственный сервер, чтобы он мог получить к ним доступ.
также можно запутать сценарий, чтобы он имел документ.напишите ('эта страница была написана xxxxx'), заставляя всех, кто копирует вашу работу, не иметь возможности удалить кредит, если они сначала не расшифруют его. Но реальный ответ заключается в том, что ваша школа должна дать каждому из своих учеников свои собственные защищенные паролем каталоги.
в моем случае, мои учителя пришли с лучшим подходом. Вопросы, которые они предоставили, имеют какое-то отношение к нашему регистрационному номеру. Например:
вход в функцию / теорию - это наш регистрационный номер, который является разные для каждого студента
Итак, ответ или подход к решению существенно отличаются от каждого студента.Это делает обязательно всех студентов должен делать свою домашнюю работу самостоятельно, или по крайней мере узнать, как взломать подход с собственной регистрацией[это может быть сложнее, чем изучение lession ;)].
Hope your lecturer will read this thread before his next tutorial :D