Pregunta

Digamos que tengo un proyecto que he lanzado bajo GPL, con las fuentes disponibles para cualquiera. Más tarde encuentro un producto muy similar, pero como fuente cerrada, distribuido solo binario por otra persona.

¿Hay una buena manera de descubrir que están usando mi código fuente en su producto?

Si la solución es de algún modo aplicar ingeniería inversa al binario, ¿es posible automatizarlo de alguna manera?

EDITAR: Aclaración. La búsqueda de errores es una opción, pero no definitiva, especialmente si el proyecto es una biblioteca y el binario ha agregado su propia GUI, por ejemplo. La situación que me interesa es cuando no es obvio que el código se elimine.

¿Fue útil?

Solución

Busque marcas de nacimiento de software. Este método intenta establecer vínculos entre el software basado en código binario o comportamiento dinámico. Christian Collberg es un experto en marcas de agua de software, de las cuales se derivaron marcas de nacimiento. Todo esto sigue en terreno de investigación.

Otros consejos

Errores.

Si la versión de código cerrado comparte la mayoría de sus errores con su proyecto, es probable que se 'elimine'.

También puede intentar descompilar su propio binario con una versión descompilada del binario de código cerrado ... aunque esto probablemente no sea confiable.

Obviamente, si el binario sospechoso no está eliminado , puede buscar cualquier símbolo que comparta el mismo nombre que el de su código.

Hay una gran cantidad de trabajo sobre descompilación y códigos binarios de ingeniería inversa. El experto mundial es probablemente Cristina Cifuentes . Ella ha hecho mucho con la descompilación. También sería interesante escribir a Alex Aiken y preguntar si su herramienta para Medida de similitud de software podría adaptarse a códigos binarios.

Un método obvio es buscar cadenas. ejecute la herramienta de cadenas de Unix y vea si el binario contiene alguna de las cadenas literales de su código. principalmente cosas como mensajes de error y texto en cuadros de mensaje.

Podría intentar desmontar ambos programas y comparar el ensamblado, pero si usaran un compilador diferente, entonces su programa podría tener pequeñas diferencias. Hay algunos desensambladores gratuitos o un depurador también podría avanzar en el ensamblaje.

Aparte de eso, realmente no hay una manera fácil de descubrir ese tipo de cosas.

La forma más segura que se me ocurre es similar a la palabra 'Esquivalience' en el diccionario oxford.
Simplemente agregue una matriz binaria con un contenido único en algún lugar del código y no se olvide de hacer un uso simple para que el enlazador no lo optimice. Probablemente deberías ofuscarlo un poco para que no sea obvio para el lector casual que es redundante.
Luego abra el binario compilado con un editor hexadecimal y búsquelo.

¿Por qué no miras la tabla de símbolos usando nm?

$ nm a.out
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top