cómo dificultar la ingeniería inversa del software

4

En la ingeniería inversa de software, usamos un disemador, un depurador y un parche de código. OllyDbg incluye todos. Una de las diferencias entre la ejecución real de un programa y la depuración a través del uso de OllyDbg es que, en OllyDbg, no se utiliza la línea de instrucciones.

¿Cómo podemos aprovechar este hecho para que el software sea inmune a los ataques de ingeniería inversa?

La respuesta obvia es escribir una instrucción que modifique la instrucción ya recuperada.

Mi pregunta es cómo escribimos un código de idioma de nivel superior, que después de ser traducido al lenguaje ensamblador tendrá instrucciones de tal manera que algunas instrucciones codifiquen instrucciones previas (deben ser buscadas antes de codificarse ... aquí podríamos tener que asumir tamaño de la tubería de instrucciones, digamos X).

¿Es posible escribir dicho código en un lenguaje de nivel superior? Si es así, puedo tener un ejemplo.

    
pregunta hrishikeshp19 01.02.2012 - 18:41
fuente

2 respuestas

9

Aquí hay un ejemplo en el ensamblaje x86:

MOV AX, 4Ch
MOV [someaddr], AX
MOV AH, 30h
INT 21
CMP AL, 5

Esto aprovechará la canalización de instrucciones del procesador y la falla de los depuradores (a medida que pasan por el código) y también puede ser un ejemplo de una medida anti-depuración. Esto es así porque int 21 (interrupción de DOS) junto con un 30h en AH devolverá la versión dos de la plataforma. Sin embargo, las dos primeras líneas han sido diseñadas de forma tal que [someaddr] se convertirá en 4Ch (someaddr se ha elegido de tal manera que contenga la dirección donde se almacenaron 30h). Por lo tanto, 4Ch en AH seguido de int 21 terminará el programa (¡se interrumpirá!). Sin la influencia de un depurador, esto no será un problema, ya que la tercera línea será predefinida y las dos primeras no tendrán efecto. Pero los depuradores se interrumpirán, ya que en un solo paso el código y AH ahora contendrán 4Ch, lo que por supuesto terminará el programa. Usted pidió la versión de nivel superior de la misma. Para eso, querrá saber cómo gcc (o cualquier otra cadena de herramientas del compilador) convierte C en código ASM y luego descompila el código anterior. enlace

Pero a algunos chicos realmente geniales se les ocurrió una solución y en realidad escribieron una contramedida (depurando un bucle que ha sido canalizado por software): lea Depuración no transparente para bucles canalizados por software por Hugo Venturini, Frederic Riss, Jean-Claude Fernandez y Miguel Santana.

Otra solución sería hacer que el depurador esté al tanto de la canalización. (¡envíe un correo a Oleh!)

    
respondido por el viv 25.05.2012 - 15:44
fuente
6

En la computación moderna, independientemente de un lenguaje de alto nivel o no, el resultado es el mismo porque todo se compila en un conjunto de instrucciones conocidas que el procesador puede ejecutar.

Dado que la generación actual de procesadores no puede procesar las instrucciones cifradas, las opciones son limitadas, e incluso si esto fuera posible, hay varias capas intermedias que deben tenerse en cuenta, como los sistemas operativos, controladores, etc. que realizan el procesador la gestión de la programación y la memoria hasta cierto punto y la necesidad de comprender cuál es la solicitud.

La ingeniería inversa, podría utilizarse para muchos propósitos, entre ellos:

  • inyección de código malicioso
  • Derechos digitales, protección de copia
  • Extracción de código fuente, propiedad intelectual

Afortunadamente, podemos hacer que la ingeniería inversa sea más difícil mediante:

  • Ofuscación de cadenas, recursos, puntos de entrada y memoria

La firma de codificación también reducirá el riesgo de que alguien ejecute código modificado / malicioso si el sistema que ejecuta el código lo comprueba.

Pero cuando llegas al punto de código que se ejecuta en un procesador, no miente.

Lo que está hablando es en el ámbito de la computación cuántica, que puede ofrecer una solución a su problema. Sin embargo, no puedo ayudarte con el código fuente de esa.

    
respondido por el Bernie White 02.02.2012 - 10:35
fuente

Lea otras preguntas en las etiquetas