Tabla de contenido:
- Suministros:
- Paso 1: Requisitos
- Paso 2: La Idea Básica
- Paso 3: cifrar texto
- Paso 4: Añadir algunos bytes de chatarra
- Paso 5: Eliminar todos los símbolos
En este tutorial, le mostraremos algunas técnicas básicas que se utilizan para proteger su código de la ingeniería inversa.
NOTA: ESTE TUTORIAL NO PROPORCIONA UNA PROTECCIÓN COMPLETA CONTRA LA INGENIERÍA INVERSA, PERO AYUDA A ALGUNOS PASOS PARA LOS PRINCIPIOS
Motivaciones:
1- ¿Ha implementado un algoritmo y teme que alguien le robe su código?
2- ¿Quiere que sea difícil para quienes quieren comprometer su marco o herramienta?
3-¿tienes productos comerciales basados en arduino o AVR y quieres mantener el código fuente en secreto?
4- ¿Eres un escritor de malware Newbie? (Espero que no lo seas)
5- Tal vez no seas nada de lo anterior, pero solo quieres avergonzar a tus amigos con los nuevos trucos que aprenderás.
Este tutorial está destinado a los usuarios de Linux. Pronto crearé otro instructivo para usuarios de Windows;) y el enlace estará aquí.
Necesito señalar que usaré el ejemplo simple de hello world para ilustrar estas técnicas. Pero se puede utilizar en ejemplos más complejos.
Suministros:
Paso 1: Requisitos
necesitará:
1- máquina de linux x86. Se pueden aplicar las mismas técnicas para cualquier arquitectura (x64, arm, …..) con gcc instalado
2- algún tipo de lenguaje compilado como C, C ++ o cualquier otro lenguaje compilado directamente en lenguaje de máquina (java no funcionará, C # no funcionará)
3- Los conocimientos muy básicos del lenguaje ensamblador. (No es un deber, pero ayudará mucho).
Paso 2: La Idea Básica
Discutiremos las técnicas que usaremos para desordenar las cosas:
1-ocultar todos los textos
2- Insertar algunos bytes basura en el medio del código.
3- Eliminar todos los símbolos.
Paso 3: cifrar texto
Mantener los textos en el código tal como está hace que sea sencillo para los ingenieros de reversa descubrir dónde comenzar. y pueden manipular fácilmente este texto fácilmente o intentar aplicar ingeniería inversa al código cerca de estas cadenas
La primera imagen es la vista hexadecimal de este código.
#incluir
int main ()
{
printf ("Hola, mundo n");
}
usuario malintencionado e indague en su ejecutable usando cualquier editor hexadecimal y cambie el texto hola mundo a cualquier otra cosa
así que necesitamos cifrar el texto usando algunas funciones básicas
Escribí ese código simple para tratar de ocultar el mundo de saludo.
#incluir
#define dec (x) x + 5
int main ()
{printf ("% c% c% c% c% c% c% c% c% c% c% c% c", dec (99), dec (96), dec (103), dec (103), dec (106), dec (27), dec (114), dec (106), dec (109), dec (103), dec (95), dec (5));
}
Este código parece desagradable, pero ayuda mucho todo lo que hace es tomar cada número y agregarle 5, luego imprimirlo como carácter.
hace que la cadena esté oculta en el archivo binario y eso es todo lo que se logra
Todas las cadenas están ocultas al menos en la vista hexadecimal: D
Puedes verificar cada programa por ti mismo mediante:
1- Poner cada código en el archivo llamado hello1.c y hello2.c
2- de tu tipo termianal:
hacer hola1
hacer hola2
3- para ejecutar estos códigos (verifique la funcionalidad) escriba "./hello1" y luego "./hello2"
4- El último paso es ver el volcado hexadecimal de estos ejecutables mediante "xxd hello1" y "xxd hello2"
Paso 4: Añadir algunos bytes de chatarra
Nuestro siguiente paso es agregar algunas tonterías al archivo de ensamblaje de nuestro mundo de saludo para que podamos ocultar todos los aspectos de nuestro código.
Primero necesitamos generar el archivo.s de nuestro código "gcc hello.c -S -masm = intel"
después de eso, abra el archivo hello.s y busque main (para este paso, debe leer todo el ensamblaje y comprender el flujo del programa para asegurarse de no romper su código)
en cualquier línea dentro de la línea principal (como dije antes, asegúrese de no alterar el flujo del programa) escriba "nombre jmp"
puede escribir lo que quiera en el nombre siguiendo las reglas del identificador y luego en la siguiente línea escriba "nombre:"
donde el nombre es el mismo que usó antes, entre el "nombre jmp" y el "nombre:" puede escribir algunos bytes basura (debe comenzar por ".byte 0x" en lugar de un número hexadecimal de 1 byte)
esto alterará algunas de las instrucciones utilizadas pero se ejecutará correctamente: D
ahora para construir este tipo de código ensamblador (gcc hello.s -o hello)
y asegúrate de que todo está bien
Paso 5: Eliminar todos los símbolos
Una vez que haya terminado todas las técnicas anteriores, hay un último paso que debe hacerse. Reemplace los símbolos y los nombres del código. Una buena forma de hacerlo es simplemente el comando de tira
intenta correr tira hola
Después de este paso, todos los nombres como "principal" y "inicio" y "nombre" se eliminarán, por lo que será un poco difícil rastrear el código que ha escrito.
Eso es todo amigos.
Por favor dónenos a la dirección de bitcoins para ayudarnos a proporcionar instructables de alta calidad
17Ta5BnfJdCtXXmv9rJu3SSfMEPF2g7kpF