Cómo Proteger un Archivo Exe de Descompilación

¿Cuáles son los métodos para proteger un archivo Exe de la Ingeniería Inversa.Muchos de los Packers están disponibles para empaquetar un archivo exe.Este enfoque se menciona en http://c-madeeasy.blogspot.com/2011/07/protecting-your-c-programexe-files-from.html

Este método es eficiente?

  • Ah, y no hay tal cosa como «proteger» a un ejecutable a partir de ingeniería inversa. Si se puede ejecutar, se puede aplicar ingeniería inversa. Packers y otras herramientas de elevar el listón de la ingeniería inversa.
  • sin duda puede hacer que los programas que no se pueden aplicar ingeniería inversa.» Es esta una hipótesis o un hecho? Podría proporcionar un ejemplo? Realmente despertó mi interés. ¿Te refieres a que se puede escribir código para una máquina dada, de modo que la máquina produce un bien definida de salida para una entrada dada y la posesión de este trozo de código – usted no puede conseguir cualquier noción de las reglas que llevan de la entrada a la salida y por lo tanto no puede volver a escribir?
  • Ver mi respuesta…..
InformationsquelleAutor techno | 2011-07-31

3 Kommentare

  1. 17

    La única forma de evitar que un programa de ingeniería inversa («comprensión») es revisar su estructura, fundamentalmente, en la fuerza del oponente en la comprensión de Máquinas de Turing. Básicamente lo que tienes que hacer es:

    • tomar algún problema que generalmente demostrado ser computacionalmente difícil
    • sintetizar una versión de la que cuyo resultado se conoce; esto es en general bastante fácil en comparación con de problemas una versión
    • hacer la correcta ejecución del programa depende de la respuesta correcta
    • hacer que el programa calcule una tontería si la respuesta no es correcta

    Ahora un oponente mirando en el código de la figura de lo «correcto» el cálculo es, por resolver algorítmicamente los problemas difíciles. Hay toneladas de NP-duros problemas que nadie ha resuelto de manera eficiente en la literatura en 40 años; es una apuesta bastante buena si el programa depende de uno de estos, que J. Azar ingeniería Inversa no, de pronto, ser capaces de resolver ellos.

    Que generalmente se hace esto mediante la transformación del programa original para ocultar su flujo de control, y/o su flujo de datos. Algunas técnicas para codificar el flujo de control mediante la conversión de algunos flujo de control en esencialmente de flujo de datos («salto indirecto, a través de este puntero a la matriz») y, a continuación, la aplicación de flujo de datos de algoritmos que requieren de puntos precisos para el análisis, que es demostrablemente duro y ha demostrado que es difícil en la práctica.

    Aquí un artículo que describe una variedad de técnicas más bien superficialmente, pero su fácil lectura:
    http://www.cs.sjsu.edu/faculty/stamp/students/kundu_deepti.pdf

    Aquí otra que se centra en cómo asegurarse de que la ofuscación de transformaciones conducen a resultados que está garantizada para ser computacionalmente difícil:
    http://www.springerlink.com/content/41135jkqxv9l3xme/

    Aquí está uno que las encuestas de una amplia variedad de control de flujo de métodos de transformación,
    incluyendo a aquellos que proporcionan niveles de gaurantees acerca de la seguridad:
    http://www.springerlink.com/content/g157gxr14m149l13/

    Este papel ofusca flujos de control en programas binarios con baja sobrecarga:
    http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.167.3773&rango=2

    Ahora, uno podría ir a través de un montón de problemas para evitar que un programa se descompilados. Pero si el descompilar una era imposible de entender, simplemente podría no molestar; ese es el enfoque que había que tomar.

    Si usted insiste en la prevención de la descompilación, usted puede atacar que considerando lo que la descompilación es la intención de llevar a cabo. Descompilación esencialmente propone que usted puede convertir cada byte del programa de destino en alguna pieza de código. Una manera de hacer que fallan, es asegurarse de que la solicitud al parecer, se puede utilizar cada byte
    como ambas instrucciones de computadora, y como los datos, incluso si no lo hacen, y que la decisión de hacerlo está ofuscado por los anteriores tipos de métodos. Una variación de esto es tener un montón de condicional sucursales en el código que, de hecho, incondicional (el uso de control de flujo de los métodos de ofuscación); el otro lado de la rama cae en el sinsentido de código que parece válido, pero las ramas a la loca de los lugares en el código existente. Otra variante de esta idea es implementar su programa como un ofuscado intérprete, y de implementar la funcionalidad real como un conjunto de datos interpretados.
    Una manera de la diversión para hacer de esta falla es la generación de código en tiempo de ejecución y ejecutarlo sobre la marcha; la mayoría de los lenguajes convencionales, tales como C tienen casi ninguna forma de representar esto.

    Un programa construido como este, sería difícil de descifrar, descompilar, y menos aún de comprender después del hecho.

    Herramientas que se dice que un buen trabajo en la protección de código binario se enumeran en:
    https://security.stackexchange.com/questions/1069/any-comprehensive-solutions-for-binary-code-protection-and-anti-reverse-engineeri

    • +1 Para una explicación detallada.
    • Lo que me recuerda de vx.netlux.org/lib/vzo00.html
    • el tamaño importa: eq skype 20 mb, por lo que añadir muchos menos código, etc
  2. 4

    De embalaje, compresión y otros métodos de binario protección sólo sirven para entorpecer o retardar la inversión de su código, que nunca han sido y nunca será 100% segura de soluciones (a pesar de que la comercialización de algunos quieren hacer creer eso). Básicamente tiene que evaluar qué tipo de nivel de hackers que están en contra, si son de secuencia de comandos de los niños, entonces cualquier packer que requieren real el esfuerzo y la habilidad (es decir:aquellos que carecen de desembalaje de los scripts/programas/tutoriales) va a disuadir. Si tu enfrentan las personas con las habilidades y los recursos, entonces usted puede olvidarse de mantener su código de seguros (como muchos de los comentarios que dicen: si el sistema operativo puede leer para ejecutarlo, por lo que se puede, sólo voy a tomar un tiempo más largo). Si su preocupación no es tanto su IP, sino la seguridad de algo que el programa hace, entonces usted podría estar mejor servido en el rediseño de una manera que no se puede atacar incluso con la fuente original (chrome toma este enfoque).

    • +1 Para el «rediseño de una manera que no se puede atacar incluso con la fuente original». Seguridad por Oscuridad nunca tiene y no va a funcionar.
    • No hay protecciones de seguridad que son 100% seguros. Incluso todo lo que criptográficos cosas con las que tenemos no es seguro. La pregunta es, «es la cantidad de trabajo para romper la seguridad significativos, y va a desalentar a algunos grandes de la clase de los agresores? Si la respuesta es sí, entonces el esquema de seguridad es útil.
    • Si la seguridad es una preocupación, usted puede mejor no utilizar ningún software en absoluto. Y sí, si el sistema operativo o el procesador entiende el binario, por lo que puede cualquier otra persona. +1
    • el binario» es muy diferente a la de «entender el programa» o «puede hacer arbitraria de los cambios deseados».
  3. 1

    Descompilación siempre es posible. La declaración de

    Esta amenaza puede ser eliminado a extender por embalaje/de la compresión de la
    ejecutable(.exe).

    en su sitio enlazado es una simple mentira.

    • Creo que es demasiado fuerte. Si la codificación de un programa es pareja a la ejecución exitosa de una máquina de Turing, usted podría tener que decidir si la máquina de Turing se detiene para obtener el derecho de decodificación. CS dice que usted no puede hacer eso. Así que hay algo de esperanza para el anti-descompiladores. Si el uno en el sitio web enlazado es buena, es otra cuestión. También tenga en cuenta que el OP se le preguntó acerca de la defensa contra la ingeniería inversa, no sólo descompilación. (APL programas han demostrado ser bastante resistente en el pasado 🙂
    • Yo no puedo seguir ahí. Si el ambiente en el que se ejecuta el código (un RE, un procesador, un ábaco) hace lo que el programa quiere hacer, entonces, obviamente, el código ha sido leído correctamente. Si mi Entorno de tiempo de ejecución puede hacer esto, así que puedo y, por tanto, disassemblation siempre es posible. O estoy equivocado no?
    • Ver mi respuesta……

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea