ofuscar ofuscado ofuscación ofuscacion metodos datos codigo c obfuscation decompiler

ofuscado - ofuscar codigo java



Ofuscando binarios basados en C para evitar la descompilación (13)

¿Hay alguna forma de ofuscar bibliotecas o ejecutables basados ​​en C para evitar la descompilación?


"ejecutables ofuscados" no tiene sentido. El hardware debe ser capaz de "entender" el código para poder ejecutarlo, y el hardware puede entenderlo, un humano de ingeniería inversa puede entenderlo. Lo más que puede hacer será hacerlo más tedioso de entender, pero probablemente no mucho, ya un costo.


¿Para hacerlo más difícil? Por supuesto. Por favor no hagas eso.

¿Para prevenirlo? No. Cualquier sistema que vaya a ejecutar su binario necesitará el software para descifrar cualquier esquema que se le ocurra. Y podrán descompilar eso y luego ver cómo se interpretan tus binarios ocultos.


¿Por qué ofuscar el código si hay una ganancia comercial de él? Para ser honesto, supongamos que el código comercial está lo suficientemente optimizado y ofuscado, y funciona, entonces sucedió la madre de una cosa totalmente embarazosa: una falla ... estás atascado en este momento, ya que el código binario de producción está ofuscado, lo que hace que sea más difícil Depurando donde está ocurriendo la falla y es difícil de replicar, se quedará en la lista de BUGS para siempre ...

Por ejemplo, al tratar de encontrar el rastro de la pila, acabarás perdiendo más pelos que intentar descifrar el código desensamblado para averiguar qué WTF está ocurriendo allí, interminables resmas de bucles de espagueti. En resumen, ¡no!

Terminará perdiendo dinero al tratar de depurar la falla ... o bien, tiene que ser un experto en ensambladores brillante para leer los volcados de memoria y resolverlo a partir de un código ofuscado ... No lo tire, solo ponga a trabajar su hermoso producto y véndalo ... Claro, hay muchas personas que tienen tiempo para romperlo mediante la ingeniería inversa del código ...

El secreto para vencer es seguir el principio: lanzar con frecuencia, lanzar con frecuencia , hacer mejoras al lanzar a menudo, de esa manera las últimas y mejores características estarán más actualizadas que el tiempo que tarda una galleta en desmontarla y hacer ejercicio! Mire el código fuente de Linux, los parches ingresan, luego se lanzan ... si se tiene en cuenta este principio, al lanzar una nueva versión con más funciones a un ritmo mucho más rápido, ¡entonces está ganando!



Creo que si hablas de binario compilado no hay mucho que puedas hacer (tal vez solo apliques UPX o una herramienta relacionada) que no tiene mucho sentido, ya que puede invertirse.

Si habla de escribir un código nuevo, pruebe el código C de Self Modyfing, que probablemente sea la forma más difícil de volver a diseñar su aplicación.


La descompilación ( No More Gotos ) y la práctica de ofuscación ( Flowtables ) y la teoría (Indistinguible Obfuscation) son áreas activas de investigación y, por lo tanto, no hay soluciones, solo herramientas, técnicas y experiencia. Si realmente desea que su código sea impermeable a la descomposición, cree una aplicación web y coloque el lado sensible del servidor de códigos. Pero si se atiene al modelo de darle a alguien un binario, entonces debe juzgar sabiamente la compensación que desea hacer entre seguridad y rendimiento. La ofuscación tiene un costo, y aún así nunca es perfecta. Algunas opciones

  • Use un empaquetador que no sea UPX (UPX viene instalado en muchas distribuciones de Linux). El costo de rendimiento es bajo y la mayoría de las personas no tienen las habilidades para descomprimir manualmente un binario para el análisis estático. Pero para los reversores experimentados, el costo de desempaquetar es inmaterial
  • Echa un vistazo a Tigress, un virtualizador / ofuscador diversificador con funciones completas para la ofuscación de fuente a fuente en C. Para un mejor rendimiento, confíe en las transformaciones de soporte, control del aplanamiento del flujo, fusión / división de funciones, codificación literal
  • Si desea una protección aún mayor, consulte las principales transformaciones de Tigress: virtualización, JITing, etc., pero estoy bastante seguro de que estas son más caras y que sus usuarios pueden notar una desaceleración si utiliza estas transformaciones.

No se desanime por el trabajo fundamental de Barak et al sobre la imposibilidad de ofuscación de caja negra. Solo demuestra la imposibilidad de los ofuscadores de caja negra, no la imposibilidad de muchas ofuscaciones prácticas y valiosas. (La ofuscación de la caja negra es el funcionamiento interno del programa y es completamente ininteligible). Tampoco se desanime por los piratas. Siempre hay personas que hacen un punto para comprar su producto si es bueno.


No. Puede hacer que sea más difícil de descompilar, pero no puede evitarlo . Mi consejo es que dejes de perder tu tiempo y, en vez de eso, concéntrate en ofrecer un producto fantástico con características cada vez mejores.

Entonces la gente estará dispuesta a pagar por ello.

Su principal problema es que la única forma de hacer que su código sea descifrable es hacer que no se pueda ejecutar. Cualquier cosa que se pueda cargar en una PC puede ser dañada. Las personas que hacen ingeniería inversa por diversión, ganancias o fama son generalmente muy buenas en eso y realmente no serán lo más pequeñas que puedan hacer para detenerlos.

Tienen acceso a herramientas que hacen que el trabajo de descifrar su código sea mucho más fácil que el trabajo que tendrá que ofuscar :-) Mucho mejor para convencer al mundo en general de que vale la pena comprar su software y ver la piratería como una oportunidad para posiblemente convertir. "ladrones" a usuarios genuinos.

Por ejemplo, descubra por qué no están pagando por su software e intente solucionarlo. Nunca convertirás el 100% de la gente, algunos piratearán tu código solo por diversión.

Echa un vistazo a la serie de artículos que se ejecutan en techdirt sobre CwF + RtB (conéctate con los fanáticos más la razón para comprar). He encontrado que muchos de los puntos planteados allí podrían ser aplicables a la industria del software.



Si realmente quieres mezclarlo, necesitas un programa separado para hacerlo. Como desarrollador, escribe tu código de la forma más limpia y fácil de leer. Después de la compilación se ejecuta la aplicación separada para hacer la ofuscación. Puede comprar tales aplicaciones por alrededor de $ 100K.

Si su intención es evitar que el código se invierta, probablemente funcione. Si su intención es evitar que alguien cese la seguridad, la ofuscación por sí sola no detendrá a un atacante determinado. En algún momento hay una decisión de sí / no, no es necesario que comprendan el código para encontrarlo ni para evitarlo.


Una forma de hacer las cosas un poco más difíciles es empaquetarlas. UPX empaquetará tus binarios, lo que hace que sea más difícil de descompilar fuera de la caja. Técnicamente es posible desempaquetar y luego descompilar, pero elevará un poco la barra. Suponiendo que se está ejecutando en un sistema operativo de usuario de vainilla, no hay mucho que pueda hacer para evitar la descompilación sin utilizar trucos desagradables.


compilar con la optimización completa.


La forma más fácil : compre un producto empacador / cryptor / ofuscador. Algunos son caros y usados ​​en juegos, otros no. Google para ellos por palabras de moda como "protección de copia", etc.

La forma rápida : empaquete con UPX y luego mangle el encabezado en algún lugar para que aún se cargue en la memoria y se ejecute bien, pero la utilidad upx fallará con un error (pruebe el campo de la versión). El 95% se rendirá si la utilidad upx falla.

La manera más difícil : escribe tu propio packer.

Oh, lo olvidé:

La manera realmente fácil : simplemente envíelo como está. No, en realidad, hagas lo que hagas, la gente puede aplicar ingeniería inversa a tu código. La cantidad de esfuerzo en que lo pones solo restringe cuántos pueden revertirlo.


La compilación de código C con un compilador optimizado hace que sea imposible restaurar el código fuente original o cualquier cosa que se parezca incluso a él. Es mucho más seguro que cualquiera de los ofuscadores de Java o .NET que son populares en estos días. Asegúrese de eliminar el archivo ejecutable si desea hacerlo más pequeño y ocultar los nombres de los símbolos antes de su lanzamiento. Sin embargo, tenga en cuenta que esto también hace que la depuración ( cuando la aplicación falla) sea bastante imposible.

Aun así, si alguien realmente quiere piratear su software, lo hará a nivel de ensamblaje, posiblemente con un software de carga u otro tipo de trucos, sin importar lo que intente y haga para evitarlo. Muchas empresas lo han intentado, pero ninguna ha tenido éxito. El uso de hacks como este solo frustra al usuario final, ya que pueden bloquear la aplicación o incluso bloquear el depurador incorporado de Windows.

Deje de perder el tiempo pensando en la ofuscación, mientras que en su lugar debería estar mejorando el programa.