액세스로부터 자바 소스 코드 보호
지난주에 저는 숙제를위한 작은 GUI를 만들어야했습니다. 학교 동료 중 누구도 그렇게하지 않았습니다. 그들은 우리가 그것을 업로드해야했던 곳에서 내 파일을 훔친 다음 다시 자신의 것으로 업로드했습니다. 내가 선생님에게 모든 일이 내 일이라고 말했을 때 그는 나를 믿지 않았습니다.
그래서 쓸모없는 방법이나 내가 그것을 코딩했다는 증거와 함께 내부에 넣는 것을 생각했습니다. 나는 암호화를 생각했다. 지금까지 내 최고의 아이디어 :
String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64
다른 더 나은 방법을 생각할 수 있습니까?
나는 오래 전에 당신과 같은 문제를 겪었습니다. 우리는 Windows 2000 컴퓨터를 가지고 있었고 모든 사람이 볼 수있는 Novel 네트워크 폴더에 파일을 업로드했습니다. 나는 최고의 도둑을 물리 치기 위해 몇 가지 트릭을 사용했다 : 공백 워터 마킹; 메타 데이터 워터 마킹; 특이한 캐릭터; 신뢰할 수있는 타임 스탬프 운영 방식. 여기에 순서대로 있습니다.
공백 워터 마킹 :
이것은 워터 마킹에 대한 저의 원래 기여입니다. 텍스트 파일에서 작동하는 보이지 않는 워터 마크가 필요했습니다. 내가 생각 해낸 비결은 프로그래밍 문 (또는 문단) 사이에 특정 공백 패턴을 넣는 것이 었습니다. 파일은 그들에게 똑같이 보였습니다 : 일부 프로그래밍 문과 줄 바꿈. 텍스트를 신중하게 선택하면 공백이 표시됩니다. 각 빈 줄에는 분명히 무작위 또는 우연이 아닌 특정 수의 공백이 포함됩니다. (예 17) 실제로이 방법은 문서에 포함 된 내용을 파악할 수 없었기 때문에 저에게 효과적이었습니다.
메타 데이터 워터 마킹
여기에서 정보를 포함하도록 파일의 메타 데이터를 변경합니다. 파일의 보이지 않는 부분, 특히 EXE에 이름, 해시 등을 포함 할 수 있습니다. NT 일에는 대체 데이터 스트림이 인기가있었습니다.
특이한 캐릭터
나는 단지 킥을 위해 이것을 던질 것입니다. 오래된 IRC 명의 도용 트릭은 다른 사람의 이름과 비슷한 글자로 이름을 만드는 것이 었습니다. 워터 마킹에 사용할 수 있습니다. Windows의 문자표는 소스 코드에서 사용할 수있는 문자 또는 숫자와 비슷해 보이지만 그렇지 않은 많은 특이한 문자를 제공합니다. 다른 사람의 작업에서 특정 지점에 표시되는 것은 우연이 아닙니다.
신뢰할 수있는 타임 스탬프
간단히 말해서, 파일 (또는 해시)을 제 3 자에게 보낸 다음 여기에 타임 스탬프를 추가하고 개인 키로 서명합니다. 문서를 언제 만들 었는지 증명을 원하는 사람은 누구나 신뢰할 수있는 제 3 자 (주로 웹 사이트)를 방문하여 생성 시간 증명을 확인할 수 있습니다. 이들은 지적 재산권 분쟁에 대한 법원 소송에서 사용되었으므로 매우 강력한 형태의 증거입니다. 그들은 당신이 찾고있는 증거를 성취하는 표준 방법입니다. (나는 다른 사람들을 먼저 포함 시켰습니다. 그들은 쉬우 며, 더 재미 있고 아마도 작동 할 것입니다.)
이 Wikipedia 기사 는 강사가 증거를 이해하는 데 도움 이 될 수 있으며 외부 링크 섹션에는 무료 제공 업체를 포함하여 많은 제공 업체가 있습니다. 중요한 일에 사용하기 전에 며칠 동안 무료 파일을 통해 테스트 파일을 실행했습니다.
운영 방식
그래서, 당신은 뭔가를했고 이제 당신은 증거를 가지고 있습니까? 아니요, 학생들은 여전히 당신이 그들에게서 아이디어를 훔쳤거나 다른 말도 안된다고 말할 수 있습니다. 이것에 대한 나의 해결책은 개인적으로 강사와 함께 나의 방법 중 하나 이상을 설정하는 것이 었습니다. 나는 강사에게 공백과 특정 기호 등을 찾도록 지시하지만 워터 마크가 무엇인지 다른 사람에게는 절대 말하지 말라고합니다. 강사가 귀하의 간단한 기술을 비밀로 유지하는 데 동의하면 아마도 계속해서 잘 작동 할 것입니다. 그렇지 않은 경우 항상 신뢰할 수있는 타임 스탬프가 있습니다. ;)
반 친구들이 업로드 사이트에서 코드를 훔친 경우 숙제를 암호화하고 키를 교사에게 이메일로 보냅니다. 복잡하거나 암호가있는 Zip 파일처럼 간단한 작업을 원할 경우 PGP로이 작업을 수행 할 수 있습니다.
편집 : PGP를 사용하면 키를 공개하지 않고 암호화 / 서명 할 수 있지만 암호가있는 Zip 파일의 단순함을 이길 수는 없으므로 모든 숙제를 할당 할 때마다 새 키를 선택하기 만하면됩니다. 단순함의 아름다움 :)
교사에게 소스 코드를 제공하는 경우 serialVersionUID
이름의 암호화 된 버전 인 수업 파일 중 하나에를 추가하기 만하면 됩니다. 교사에게 직접 해독 할 수 있습니다.
그것은 다른 사람들에게 아무런 의미가 없습니다. 생성 된 코드라고 말할 수 있습니다. 그들이 훔친다면 아마 전혀 수정하지 않을 것입니다.
스타일리시하게하고 싶다면, 당신 의 이름을 생성하는 임의의 시드를 찾으면 이 트릭을 사용할 수 있습니다 . :) 그것은 당신의 번호 가 될 것이고 , 그것이 나타날 때마다 그 코드를 만든 것이 당신 이라는 것을 증명할 것입니다 .
이것은 같은 아파트에 살았던 한 쌍의 제자들에게 일어났습니다. 하나는 책상 서랍에 남겨진 디스크에서 소스 코드를 훔쳤습니다.
도둑은 훔친 출처를 약간 수정하여 분명하지 않게했습니다. 어쨌든 코드의 유사성을 발견하고 편집기에서 소스를 조사했습니다. 일부 줄에는 끝에 추가 공백이 있습니다. 각 학생의 소스에는 동일한 수의 추가 공간이 있습니다.
이를 악용하여 정보를 표시하지 않고 인코딩 할 수 있습니다. 이니셜이나 학생 ID를 공백으로 일부 줄 끝에 인코딩 할 수 있습니다.
도둑은 보이는 코드를 외관상으로 변경할 가능성이 있지만 보이지 않는 문자를 놓칠 수 있습니다.
편집하다:
이것에 대해 좀 더 생각해 보면 공백과 탭을 모스 부호 dits와 dah로 사용하고 여러 줄 끝에 이름을 넣을 수 있습니다. 도둑은 신분증을 훼손하지 않고 일부 줄을 제거, 순서 변경 또는 다시 입력 할 수 있습니다.
편집 2 :
"공백 스테 가노 그래피"는 공백으로 메시지를 숨기는 용어입니다. 인터넷 검색을 통해 Morse 코드 대신 Huffman 인코딩을 사용하여 90 년대로 거슬러 올라가는 오픈 소스 구현을 보여줍니다 .
It seems like an IT administration problem to me. Each student should have there own upload area which cannot accessed by other students.
The teacher would be a higher level up, being able to access each student upload folder. If this is not possible go with @exabrial answer as that is the simpliest solution.
The best thing you can do is to just zip the source code with a password and e-mail the password to the teacher.
Problem solved.
Use a distributed (=standalone) version control system, like git. Might be useful too.
A version history with your name, and dates might be sufficiently convincing.
What was stolen ?
The source ? You can put random Strings in it (but it can be changed). You can also try to add a special behavior know only from you (a special keypress will change a color row), you can then ask to the teacher "the others know this special combo ?". Best way will be to crash the program if a empty useless file is not present in the archive after 5 minutes of activity, your school mates will be too lazy to wait this ammount of time.
The binary ? Just comparing the checksum of each .class will be enough (your school mates are too lazy to rewrite the class files)
Just post your solution at the last minute. This won't give time to anyone to copy it.
And send a feedback to the administrator to disallow students to see other students assignments.
If you upload the file in a .zip with password encryption, anyone can just crack the password by downloading the .zip file and have their cpu run a million queries at it if they are that big of a cheat thief. Unfortunately, some are and it's easy to do.
Your source can be viewed on the shared server by the other students. The teacher should really be giving you your own password encrypted directory to upload to. This could be done easily just by adding subdomains. But perhaps the teacher might allow you to upload the files to your own server for him to access them there.
It's also possible to obfuscate the script so that it has a document.write('This page was written by xxxxx'), forcing anyone who copies your work to not be able to remove the credit unless they first decrypt it. But the real answer is that your school needs to give each of its students their own password protected directories.
In my case, my teachers came with a better approach. The questions they provided has something to do with our registration number. Ex:
Input to a function/theory is our Registration number, which is different for each student
So, answers or the approach to the solution are relatively different from each student.This make the necessarily of all students has to do their homework on their own, or at-least get to know how to hack the approach with their own registration[it may be harder than learning the lession ;)].
Hope your lecturer will read this thread before his next tutorial :D
참고URL : https://stackoverflow.com/questions/16062432/protecting-java-source-code-from-being-accessed
'program tip' 카테고리의 다른 글
'nuget'은 인식되지 않지만 다른 nuget 명령은 작동합니다. (0) | 2020.08.26 |
---|---|
JavaScript 코드를 어떻게 벤치 마크 할 수 있습니까? (0) | 2020.08.26 |
유형이 매개 변수없는 생성자를 제공하는지 어떻게 확인합니까? (0) | 2020.08.25 |
Ember RunLoop이란 무엇이며 어떻게 작동합니까? (0) | 2020.08.25 |
PyCharm의 터미널에서 virtualenv를 활성화하려면 어떻게해야합니까? (0) | 2020.08.25 |