Mantenga su código ### seguro desde ### invierta ### ingenieros como Boss: 5 pasos

Mantenga su código ### seguro desde ### invierta ### ingenieros como Boss: 5 pasos

Tabla de contenido:

Anonim

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