elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  [Taller] Introduccion al Diseño de Rutinas de Encriptacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Taller] Introduccion al Diseño de Rutinas de Encriptacion  (Leído 15,040 veces)
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
[Taller] Introduccion al Diseño de Rutinas de Encriptacion
« en: 4 Noviembre 2009, 08:51 am »

[Taller] Introduccion al Diseño de Rutinas de Encriptacion


Contenido

1.   Introducción
1.1 Concepto de Encriptacion

2.   Tipos de Encriptacion.
2.1 Encriptacion Por Sustitucion.
2.2 Encriptacion por Llaves Corredizas
2.3 Encriptacion por Llaves Largas
2.4 Encriptacion por Transposicion

3.   Despedida


1. Introduccion


En este taller sobre diseño de rutinas de encriptacion bajo Assembler debido a su simplicidad para ser añadidos a proyectos en C/C++ y Delphi. Para seguir el taller no se necesitara mas que conocimientos basicos sobre Assembler.

Tambien es recomendado el conocimiento basico del formato PE, especificamente los flag de la sección, debido a que seran necesario para la desencriptacion en memoria del codigo del programa.

De cada Tipo de encriptacion dare 2 ejemplos (a menos que crea que no es necesario), uno sencillo  para que se familiaricen con el metodo y otro metodo un poco mas complejo para que capten una idea del uso que se podria dar.


1.1 Concepto de Encriptacion

La encriptacion no es mas que el metodo utilizado para volver ilegible una sección de codigo que consideremos importante. La encriptacion debe de ser lo mas robusta posible complicando asi el analisis de dicha rutina.

2. Tipos de Encriptacion

Se podria decir que existen miles de rutinas de encriptacion pero la gran mayoria se basa en la combinacion de 2 o mas de los principales tipos de encriptacion. por ejemplo la mezcla una encriptacion simple con una encriptacion de transposicion podria ser robusta. Todo depende de las ganas de creacion del programador y el empeño que este quiera añadir a la rutina diseñada.

Los tipos de encriptacion que voy a tratar en este taller son:

  • Encriptacion por Sustitucion (Substitution Encryption).
  • Encriptacion por Llaves Corredizas (Sliding Key Encryption).
  • Encriptacion por llaves largas (Long Key Encryption).
  • Encriptacion por Transposicion (Transposition Encryption).


2.1-Encriptacion por Sustitucion.


Se podria decir que es uno de los metodos mas utilizados para encriptacion, A cada byte se agregar, reducir, rotar, etc. para la creacion de un nuevo caracter que sera el sustituto del caracter anterior. Para descifrar dicha encriptacion tan solo es necesario la realizacion de las operaciones de encriptacion pero con el orden inverso, por ejemplo si rotaste a la derecha un X numero de bits para descifrar debes rotar a la izquierda igual numero de bits.

La operacion mas utilizada para este tipo de encriptacion es el metodo XOR, debido a que la misma rutina de encriptacion funciona para la desencriptacion.

Codigo Ejemplo1:
Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2 ; Tomamos el numero de words de longitud del codigo a cifrar
  2. mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar
  3. mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar)
  4. mov bx,0F432h ; Pasamos la llave a bx
  5.  
  6. encrypt_routine:        ; Inicio de la rutina de encriptacion
  7. lodsw ; Movemos a AX el vamor de [ESI] y sumamos 2 a ESI
  8. xor ax,bx        ; XOR a AX con respecto a BX
  9. stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI
  10. loop encrypt_routine

En este ejemplo pasado al ser utilizado el Metodo XOR puede ser utilizado tanto para encriptacion como para desencriptacion.Esto que parece una ventaja para el programador es una desventaja para la encriptacion que este esta realizando en su codigo.

Codigo Ejemplo2(Encriptacion): Quedara de parte del usuario que lee el taller deducir que hace el codigo (Tomenlo como ejercicio mental xD)


Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2
  2. mov esi,ini_codigovir
  3. mov edi,esi
  4. mov bx,0F432h
  5.  
  6. encrypt_routine:
  7. lodsw
  8. rol al,bh
  9. add al,bl
  10. ror ah,bl
  11. add ah,bh
  12. xor ax,bx
  13. stosw
  14. loop encrypt_routine
  15.  
  16.  
Codigo Ejemplo2(Desencriptacion):Lo mismo de la rutina de  encriptacion (Ejercicio Mental xD)

Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2
  2. mov esi,ini_codigovir
  3. mov edi,esi
  4. mov bx,0F432h
  5.  
  6. decrypt_routine:
  7. lodsw
  8. ror al,bh
  9. sub al,bl
  10. rol ah,bl
  11. sub ah,bh
  12. xor ax,bx
  13. stosw
  14. loop encrypt_routine
  15.  
  16.  

2.2 Encriptacion por Llaves Corredizas

En el tipo de encriptacion de llave corrediza, en la encriptacion de cada byte la llave experimenta un cambio en su valor. Es una especie de encriptacion simple que dentro de su rutina realiza cambios a la llave de encriptacion.

Codigo Ejemplo1:

Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2 ; Tomamos el numero de words de longitud del codigo a cifrar
  2. mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar
  3. mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar)
  4. mov bx,0F432h ; Pasamos la llave a bx
  5.  
  6. encrypt_routine: ; Inicio de la rutina de encriptacion
  7. lodsw ; Movemos a AX el vamor de [ESI] y sumamos 2 a ESI
  8. xor ax,bx ; XOR a AX con respecto a BX
  9. stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI
  10. dec bx ; Modificamos el valor de la llave almacenada en bx
  11. loop encrypt_routine
  12.  
  13.  
Al igual que en el ejemplo pasado al ser utilizado el Metodo XOR puede ser utilizado tanto para encriptacion como para desencriptacion.

Codigo Ejemplo2(Encriptacion):Otra vez lo mismo (Ejercicio Mental xD)


Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2
  2. mov esi,ini_codigovir
  3. mov edi,esi
  4. mov bx,0F432h
  5.  
  6. encrypt_routine:
  7. lodsw
  8. rol al,bh
  9. add al,bl
  10. ror ah,bl
  11. add ah,bh
  12. xor ax,bx
  13. rol bx,bl
  14. dec bx
  15. not bx
  16. stosw
  17. loop encrypt_routine
  18.  
  19.  
Codigo Ejemplo2(Desencriptacion):Me canse de Escribir... a partir de ahora solo pondre (Ejercicio Mental xD)
Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2
  2. mov esi,ini_codigovir
  3. mov edi,esi
  4. mov bx,0F432h
  5.  
  6. decrypt_routine:
  7. lodsw
  8. ror al,bh
  9. sub al,bl
  10. rol ah,bl
  11. sub ah,bh
  12. xor ax,bx
  13. rol bx,bl
  14. dec bx
  15. not bx
  16. stosw
  17. loop encrypt_routine
  18.  

2.3-Encriptacion por Llaves Largas

En este metodo se toma una sección de datos o codigo mayor al tamaño de un registro para realizar una llave, dicho tamaño estara definido por el programador, por lo tanto la llave puede medir desde 4 bytes hasta donde crea necesario el programador de la rutina de encriptacion.

Codigo Ejemplo1:
Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2 ; Tomamos el numero de words de longitud del codigo a cifrar
  2. mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar
  3. mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar)
  4. mov ebx,offset ini_llave ; Movemos a ebx la direccion del inicio de la llave
  5. mov dx,fin_llave-ini_llave ; Movemos a dx el tamaño de la llave
  6.  
  7. encrypt_routine: ; Inicio de la rutina de encriptacion
  8. lodsw ; Movemos a AX el vamor de [ESI] y sumamos 2 a ESI
  9. xor ax,bx ; XOR a AX con respecto a BX
  10. add bx,2 ; Nos movemos 1 word dentro de la llave (2bytes)
  11. cmp bx,dx ; Comparamos si bx y dx son iguales
  12. jne cont: ; Si no son iguales continuamos la rutina
  13. mov ebx,offset ini_llave; Si son iguales llegamos al final de la llave, por lo tanto debemos volver al inicio
  14. cont:
  15. stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI
  16. loop encrypt_routine
  17.  
Este tipo de encriptacion no necesita la explicacion de un codigo con un cierto mayor grado de complejidad debido a que simplemente el registro va tomando valores de una llave de gran longitud y la rutina de encriptacion solo esta realizando una encriptacion simple con diferentes valores como llave.

2.4-Encriptacion por Transposicion

Este metodo invierte cada par de Word en la sección de codigo que queremos cifrar, es un metodo muy debil, se podria decir que el mas debil de todos pero combinado con otro de los metodos es un serio dolor de cabeza para quien trate de desencriptarlo manualmente.

Codigo Ejemplo1:
Código
  1. mov ecx,(fin_codigovir - ini_codigovir)/2 -;Tomamos el numero de words de longitud del codigo a cifrar
  2. mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar
  3. mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar)
  4.  
  5. encrypt_routine:
  6. lodsw ; Movemos a AX el valor de [ESI] y sumamos 2 a ESI
  7. mov bx,ax ; Guardamos en BX el valor de AX
  8. lodsw ; Movemos a AX el valor de [ESI] y sumamos 2 a ESI
  9. stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI
  10. mov ax,bx ; Recuperamos el valor que guardamos previamente en BX y lo retornamos a AX
  11. stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI
  12. loop encrypt_routine
  13.  
Como ven no es una rutina de otro mundo y muy debil trabajando sola, debido a que no hace una sustitucion de bytes y con solo alterar el orden de los bytes de word en word ya esta descifrado. Al igual que en el metodo XOR esta rutina puede cifrar o descifrar sin necesidad de modificacion alguna.

3. Despedida

Bueno eso es todo, cualquier toda en lo que concierne al tema pueden dejar sus preguntas en el foro o contactarme via MSN/E-mail que con gusto le respondere las preguntas que tengan. Todo tipo de criticas son aceptadas (Contructivas, Destructivas, Exageradas, Ignorantes, etc.).

Espero que esto sirva de ayuda para aquellos que se motiven en hacer o diseñar sus propias rutinas de encriptacion.

En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #1 en: 4 Noviembre 2009, 15:39 pm »

Muy bueno  ;D. Yo en mis códigos siempre utilizaba las de sustitución, pero ahora veo que con agregar unas pocas instrucciones más para combinarla por ejemplo con transposición o llave corrediza se vuelve mucho más fuerte el algoritmo  :P. Si saco algo de tiempo intento hacer una que combine 2 métodos a ver si resulta, orientado al malware obviamente.

Saludos

En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #2 en: 5 Noviembre 2009, 03:10 am »

Muy bueno  ;D. Yo en mis códigos siempre utilizaba las de sustitución, pero ahora veo que con agregar unas pocas instrucciones más para combinarla por ejemplo con transposición o llave corrediza se vuelve mucho más fuerte el algoritmo  :P. Si saco algo de tiempo intento hacer una que combine 2 métodos a ver si resulta, orientado al malware obviamente.

Saludos



Veo que era util... disculpen algunos errores ortograficos que tiene, cuando termine y publique eran las 4:30a.m.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #3 en: 29 Diciembre 2009, 19:52 pm »

Joer asm para mi es como si me hablase el fari recien comido un bote de miel y un limon en la boca xD
Pero se agradece xDDD


Saludos
En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #4 en: 5 Enero 2010, 00:25 am »

Joer asm para mi es como si me hablase el fari recien comido un bote de miel y un limon en la boca xD
Pero se agradece xDDD


Saludos


mmm Quien es el fari y que tiene que ver ASM con un pote de miel y limon?
En línea

soez

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #5 en: 10 Junio 2010, 19:05 pm »

Una pregunta, como averiguar cual es el trozo de codigo a cifrar?
En línea

01001010 01100001 01110110 01101001 01100101 01110010
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #6 en: 12 Junio 2010, 15:07 pm »

Una pregunta, como averiguar cual es el trozo de codigo a cifrar?

El trozo a cifrar es la sección de codigo o datos que quieras proteger... simplemente no se limita a codigo
En línea

soez

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #7 en: 16 Junio 2010, 00:52 am »

Ya estoy viendo el formato PE pero asi de primeras no es sencillo aprenderse todo  :P
En línea

01001010 01100001 01110110 01101001 01100101 01110010
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #8 en: 30 Junio 2010, 00:01 am »

:xD tienes toda una vida para aprenderlo
En línea

m0rf


Desconectado Desconectado

Mensajes: 828


BACK!


Ver Perfil
Re: [Taller] Introduccion al Diseño de Rutinas de Encriptacion
« Respuesta #9 en: 23 Julio 2012, 00:20 am »

Gracias me va a servir mucho!!

No sabia que esto estaba en el foro oO
En línea

Si todos fuéramos igual de inteligentes no existiría la mediocridad porque no podríamos apreciarla. Aprecias la mediocridad?
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Rutinas Interesantes
Programación Visual Basic
soplo 4 16,528 Último mensaje 16 Diciembre 2006, 13:58 pm
por soplo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines