Protección Del Acceso Al Código Fuente De Java [cerrado]


La semana pasada, tuve que crear una pequeña GUI para la tarea. Ninguno de mis compañeros de escuela lo hizo. Me han robado uno de donde tuvimos que subirlo y luego lo subieron de nuevo como suyo. Cuando le dije a mi maestro que era todo mi trabajo, no me creyó.

Así que pensé en poner un método inútil o algo dentro con una prueba de que lo codifiqué. Pensé en encriptación. Mi mejor idea hasta ahora:

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

¿Puedes pensar en otras formas mejores?

 94
Author: WarGodNT, 2013-04-17

11 answers

Tuve el mismo problema que tú hace mucho tiempo. Teníamos máquinas con Windows 2000 y subimos archivos a una nueva carpeta de red que todo el mundo podía ver. Utilicé varios trucos para vencer incluso a los mejores ladrones: marcas de agua en espacios en blanco; marcas de agua de metadatos; caracteres inusuales; marcas de tiempo confiables; modus operandi. Aquí están en orden.

Marca de agua en espacios en blanco:

Esta es mi contribución original a la marca de agua. Necesitaba una marca de agua invisible que funcionara en archivos de texto. El el truco que se me ocurrió fue poner un patrón específico de espacios en blanco entre instrucciones de programación (o párrafos). El archivo se veía igual para ellos: algunas sentencias de programación y saltos de línea. Al seleccionar el texto con cuidado se mostrará el espacio en blanco. Cada línea vacía contendría un cierto número de espacios que obviamente no son aleatorios o accidentales. (eg 17) En la práctica, este método hizo el trabajo para mí porque no podían averiguar lo que estaba incrustando en los documentos.

Metadatos marca de agua

Aquí es donde cambia los metadatos del archivo para que contengan información. Puede incrustar su nombre, un hash, etc. en las partes invisibles de un archivo, especialmente en los días de EXE. In NT, los flujos de datos alternativos eran populares.

Caracteres inusuales

Voy a tirar este solo por diversión. Un viejo truco de suplantación de IRC era hacer un nombre con letras que se parecen al nombre de otra persona. Puede usar esto en marcas de agua. El Mapa de caracteres en Windows le dará muchos caracteres inusuales que se parecen, pero no lo son, a una letra o número que podrías usar en tu código fuente. Estos aparecer en un lugar específico en el trabajo de otra persona no puede ser accidental.

Timestamping de confianza

En pocas palabras, envía un archivo (o su hash) a un tercero que luego le agrega una marca de tiempo y lo firma con una clave privada. Cualquier persona que desee una prueba de cuándo creó un documento puede ir al tercero de confianza, a menudo un sitio web, para verificar su prueba de creación tiempo. Estos se han utilizado en casos judiciales para disputas de propiedad intelectual, por lo que son una forma muy fuerte de prueba. Son la forma estándar de lograr la prueba que estás buscando. (He incluido los otros primero b / c son fáciles, son más divertidos y probablemente funcionarán.)

Este artículo de Wikipedia podría ayudar a su instructor a comprender sus pruebas y la sección de enlaces externos tiene muchos proveedores, incluidos los gratuitos. Ejecutaría archivos de prueba a través de archivos gratuitos durante unos días antes de usarlos para algo importante.

Modus operandi

Entonces, hiciste algo y ahora tienes pruebas, ¿verdad? No, los estudiantes aún pueden decir que les robaste la idea o alguna otra tontería. Mi solución para esto era, en privado, establecer uno o más de mis métodos con mi instructor. Le digo al instructor que busque el espacio en blanco, busque ciertos símbolos, etc. pero nunca decirle a los demás lo que era la marca de agua. Si el instructor se compromete a mantener su simple técnicas secretas, probablemente seguirán funcionando bien. Si no, siempre hay marcas de tiempo de confianza. ;)

 102
Author: Nick P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 05:27:57

Si sus compañeros de clase robaron su código del sitio de carga, cifraría su tarea y enviaría la clave por correo electrónico al profesor. Puedes hacer esto con PGP si quieres ser complicado, o algo tan simple como un archivo Zip con una contraseña.

EDITAR: PGP le permitiría cifrar / firmar sin revelar su clave, pero no puede superar la simplicidad de corte de un archivo Zip con una contraseña, así que simplemente elija una nueva clave cada tarea. Belleza en simplicidad:)

 63
Author: Jonathan S. Fisher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 00:46:00

Si está dando código fuente al profesor, simplemente agregue un serialVersionUID a uno de sus archivos de clase que sea una versión cifrada de su nombre. Puede descifrarlo al profesor usted mismo.

Eso no significa nada para los demás, solo para ti. Se puede decir que es un código generado, si lo están robando, probablemente no se molestarán en modificarlo en absoluto.

Si quieres hacerlo de una manera elegante, puedes usar este truco, si encuentras la semilla aleatoria que produce tu nombre. :) Ese sería tu número entonces, y dondequiera que aparezca eso probaría que fuiste quien hizo ese código.

 38
Author: gaborsch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:13:51

Esto sucedió con un par de mis estudiantes que vivían en el mismo apartamento. Uno robó el código fuente de un disco dejado en el cajón de un escritorio.

El ladrón modificó ligeramente la fuente robada, para que no fuera obvio. Noté la similitud del código de todos modos, y examiné la fuente en un editor. Algunas de las líneas tenían espacios adicionales en los extremos. La fuente de cada estudiante tenía el mismo número de espacios adicionales.

Podría explotar esto para codificar información sin hacerlo visible. Puede codificar sus iniciales o su identificación de estudiante al final de algunas líneas, con espacios.

Un ladrón probablemente hará cambios cosméticos en el código visible, pero puede perder los caracteres no visibles.

EDITAR:

Pensando en esto un poco más, podría usar espacios y pestañas como dits y dahs de código Morse, y poner su nombre al final de varias líneas. Un ladrón podría eliminar, reordenar o volver a escribir algunas líneas sin destruir su identificación.

EDITAR 2:

"Esteganografía de espacios en blanco" es el término para ocultar mensajes en espacios en blanco. Googlear revela esta implementación de código abierto que se remonta a los años 90, usando codificación Huffman en lugar de código Morse.

 35
Author: Andy Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 18:40:44

Me parece un problema de administración de TI. Cada estudiante debe tener su propio área de carga a la que no puedan acceder otros estudiantes.

El profesor estaría a un nivel superior, pudiendo acceder a cada carpeta de subida de alumnos. Si esto no es posible ir con @exabrial respuesta ya que es la simplicidad de la solución.

 19
Author: Jon Raynor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 18:48:35

Lo mejor que puede hacer es simplemente comprimir el código fuente con una contraseña y enviar la contraseña por correo electrónico al profesor.

Problema resuelto.

 9
Author: Omid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 00:06:30

Use un sistema de control de versiones distribuido (=independiente) , como git. Podría ser útil también.

Un historial de versiones con su nombre y fechas puede ser suficientemente convincente.

 6
Author: Joop Eggen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 14:20:07

¿Qué fue robado ?

  • La fuente ? Puede poner cadenas aleatorias en él (pero se puede cambiar). También puede tratar de añadir un comportamiento especial sabe solo de usted (una tecla especial cambiará una fila de color), a continuación, puede preguntar al profesor "los demás saben este combo especial ?". La mejor manera será bloquear el programa si un archivo inútil vacío no está presente en el archivo después de 5 minutos de actividad, sus compañeros de escuela serán demasiado perezosos para esperar este ammount de tiempo.

  • El binario ? Sólo comparando la suma de comprobación de cada uno .la clase será suficiente (tus compañeros de escuela son demasiado perezosos para reescribir los archivos de clase)

 3
Author: Kartoch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-17 14:20:06

Simplemente publique su solución en el último minuto. Esto no le dará tiempo a nadie para copiarlo.

Y enviar una retroalimentación al administrador para no permitir que los estudiantes vean las tareas de otros estudiantes.

 2
Author: Eduardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 23:05:59

Si carga el archivo en a .zip con cifrado de contraseña, cualquiera puede descifrar la contraseña descargando el .archivo zip y tienen su cpu ejecutar un millón de consultas en él si son tan grandes de un ladrón tramposo. Desafortunadamente, algunos lo son y es fácil de hacer.

Los demás estudiantes pueden ver su fuente en el servidor compartido. El profesor realmente debería darte tu propio directorio encriptado con contraseña para que lo subas. Esto se podría hacer fácilmente simplemente agregando subdominios. Pero tal vez el profesor puede permitirle subir los archivos a su propio servidor para que pueda acceder a ellos allí.

También es posible ofuscar el script para que tenga un documento.escribe ('Esta página fue escrita por xxxxx'), obligando a cualquiera que copie tu trabajo a no poder eliminar el crédito a menos que primero lo descifre. Pero la verdadera respuesta es que su escuela necesita dar a cada uno de sus estudiantes sus propios directorios protegidos con contraseña.

 1
Author: michael d,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-19 02:04:02

En mi caso, mis maestros vinieron con un mejor enfoque. Las preguntas que proporcionaron tienen algo que ver con nuestro número de registro. Ex:

La entrada a una función/teoría es nuestro número de registro, que es diferente para cada estudiante

Por lo tanto, las respuestas o el enfoque de la solución son relativamente diferentes de cada estudiante.Esto hace que el necesariamente de todos los estudiantes tiene que hacer su tarea por su cuenta, o al menos llegar a saber cómo hackear el enfoque con su propio registro [puede ser más difícil que aprender la lección ;)].

Hope your lecturer will read this thread before his next tutorial :D
 0
Author: Chand Priyankara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 03:36:20