¿Qué debo saber sobre la ofuscación (software)?

Los ofuscadores pueden dificultar que una computadora analice su código. En algunos casos también pueden facilitarlo. Por ejemplo, cuanto más largo sea su código JavaScript, más tiempo le tomará al navegador ejecutarlo. Un optimizador puede revisar y acortar el código reemplazando todos los nombres de las cosas con nombres muy cortos, a, b, c..z, aa, ab, ac..zz, etc. Esto dificulta que un humano entienda lo que hizo originalmente. Sin embargo, no impide que eventualmente lo descubran, descubran y exploten errores, y el código de ingeniería que modifica la funcionalidad del código ofuscado. Simplemente hace que sea difícil para los observadores casuales.

Los lenguajes de programación están destinados a comunicarse. Si bien es cierto que los lenguajes de programación comunican un algoritmo a una computadora, también están destinados a comunicar la intención a los desarrolladores. Cuando ejecuta su código a través de un script de ofuscación, confía mucho en el creador del código de ofuscación. Si alguna vez hay un defecto, los scripts de ofuscación eliminan toda la información que generalmente indicaría al desarrollador original en la dirección correcta. Elimina la intención que es visible en la fuente. Por lo tanto, si la ofuscación presenta algún defecto, usted se hace responsable tanto de su código de ofuscación como del suyo.

Además, su código de ofuscación también se ofusca de usted. Podría introducir defectos intencionales, como puertas traseras, y necesitaría hacer un inventario del código ofuscado para encontrarlo.

Personalmente, aparte del escenario de JavaScript mencionado anteriormente, no me preocuparía por ofuscar su código. Ya es bastante difícil hacer que las cosas funcionen cuando se supone que deben funcionar. Si le preocupa que su código sea plagiado, la única forma real de protegerlo es no entregarlo.

Los conceptos básicos son dos:

  • la idea es dificultar que los analizadores obtengan resultados correctos. Esto no hará imposible que una persona con suficiente tiempo y conocimiento comprenda lo que hace su código, solo lo hará menos comprensible a primera vista
  • Una ofuscación más fuerte implica una mayor pérdida de rendimiento. Para hacer que el código sea menos comprensible para un analizador estático, el ofuscador colocará en su programa un código adicional, que eventualmente se ignorará en tiempo de ejecución gracias a predicados opacos ( si las declaraciones siempre se evaluarán de la misma manera, haciendo que la rama se convierta en basura) código muerto ), pero lleva tiempo probar cada predicado y algo de memoria para almacenar las estructuras en las que se basan sus predicados. Un escenario aún peor es aquel en el que desea luchar contra un analizador dinámico. Esto dará como resultado la manipulación del código en tiempo de ejecución (eche un vistazo al algoritmo de Aucsmith) que ralentizará sensiblemente su programa

Básicamente, la ofuscación se basa en un compromiso entre lo importante que es para usted proteger la idea detrás de su algoritmo y cuánto está dispuesto a pagar por esa protección en términos de rendimiento.

More Interesting

¿Cuáles son los pros y los contras de llevar el código directamente a la producción, sin una etapa intermedia o un paso de alimentación para perros?

¿Cómo se puede lograr lo siguiente en Python?

Teniendo en cuenta la reciente automatización, ¿debería comenzar mi carrera en una empresa de software o tomar un trabajo del gobierno indio con bajos salarios? Ver detalles.

¿Qué es un buen software de facturación por suscripción que tiene una API?

Cómo comparar estos trabajos: programación (o ingeniería de software) con ingeniería electrónica

¿Hay alguna manera de que los conceptos de Bitcoin, BitTorrent, Namecoin (P2P DNS) y Tor puedan integrarse en un protocolo en el futuro?

Acabo de leer Peter Norvig "Teach Yourself Programming in Diez años". ¿Realmente necesita tanto tiempo? ¿Puedes compartir tu experiencia aquí?

¿Debo dejar mi trabajo para hacer un MBA? ¿Proporcionará un MBA un beneficio en comparación con el salario que ganaría trabajando durante la misma duración?

¿Cuáles son las tareas comunes y poco creativas involucradas en el desarrollo de software?

¿Cómo ha afectado "No Meeting Wednesday" a su lugar de trabajo?

¿Cómo se llama un negocio si ofrece software y desarrollo web para empresas comerciales?

¿Por qué las personas le pagan a una empresa de programación el doble de lo que cobraría un desarrollador individual?

¿Cuáles son algunos consejos para asegurar una pasantía de ingeniería de software con IBM como estudiante universitario de CS?

¿Hay ejemplos en la historia cuando los programadores experimentaron responsabilidad penal por el mal funcionamiento de su software?

¿Es posible escribir software libre de errores? ¿Qué tan buenos somos para atrapar todas las posibles excepciones? ¿Debemos prestar más atención a cada escenario de excepción o falla? ¿Es ese el problema fundamental? ¿Eso merece su propia línea de trabajo?