lunes, 1 de diciembre de 2014

Análisis Técnico de un Sistema de Protección basado en KEYFILE - Parte 1


Análisis Técnico de un Sistema de Protección basado en KEYFILE

PARTE 1

1001 Ways to Crack Software
Centro de Investigaciones en Alta Tecnología 
Rodolfo Hernández Baz 
WWW.CCAT.EDU.MX




Defición de la Ingeniería Reversa 



Aún hoy el término “Cracking” tiene una amplia gama de significados. Para algunos el “Cracking” consiste En forzar bruscamente a un programa, generalmente de manera poco elegante, para que trabaje. Para otros el “Cracking” es hacer un programa inteligente (generalmente pequeño) o la modificación de un programa, y una persona que despliega una inusual perspicacia en un lenguaje de programación o en un sistema operativo. Por otra parte, cualquier manipulación diestra sería también considerada como un acto de “Cracking”. Algunos Psicólogos, Sociólogos, y otros profesionales que se relacionan con los aspectos del comportamiento, consideran el “Cracking” no más que como una afición a la computadora. A los que padecen la enfermedad se les considera como a seres socialmente ineptos e incapaces de formar parte de un grupo por otro medio, que el que proporciona la lejanía y la abstracción de la computación.



En el libro llamado El Diccionario del Hacker, los autores Guy Steele y otros, han perfilado por lo menos siete definiciones diferentes de un pirata o Cracker:

1. Una persona que disfruta aprendiendo sobre los detalles de los sistemas de la computadora y sobre cómo aumentar sus capacidades; como opuesto a la mayoría de los usuarios de computadoras, quienes prefieren aprender sólo lo mínimamente necesario.

2. Uno que programa con entusiasmo, o que disfruta programando, más que teorizando solamente acerca de la programación.

3. Una persona capaz de apreciar el valor pirata.

4. Una personacapaz de apreciar el valor pirata.

5. Una persona que es buena programando rápidamente.

6. Un experto en un programa particular o uno que frecuentemente trabaja usándolo o en él.

7. Un experto de cualquier género.

8. Un malévolo e inquisitivo entrometido que trata de descubrir información hurgando a su alrededor.

      
Por ejemplo un pirata de la contraseña es uno que trata, posiblemente por medios engañosos o ilegales, de descubrir las contraseñas de las computadoras de otra gente. Un pirata de la red es uno que trata de aprender acerca de la red de computadoras (posiblemente para mejorarla o posiblemente para interferirla).


Por lo tanto, para nuestros propósitos, la piratería también llamada Hacking, es cualquier actividad relacionada con la computadora que no ha sido sancionada o aceptada por el patrón o dueño de un sistema de red o software. Debemos distinguirlo, de cualquier modo, de la piratería de Software (Cracking) y del crimen computacional, donde el tópico principal es el derecho de propiedad de la información y el uso de sistemas de computación para perpetrar lo que, en cualquier otra situación, se miraría simplemente como un robo monetario fraude. Hasta cierto punto esta definición es bastante amplia. No obstante, tal definición nos provee con una rica carga de casos y sucesos que están en el corazón mismo de los tópicos éticos en computación. 






Definición de un KEYFILE:

Siempre eh dicho que todo sistema de protección tiene su forma de desprotegerlo y precisamente de eso se encarga la ingeniería reversa o también llamada CRACKING, de analizar y encontrar en el código desensamblado de un software la protección con la cual este verifica que no está registrado, existen cientos de tipos de protecciones algunas básicas, otras no tanto pero al fin y al cabo todas son factibles de vulnerar, como en el siguiente ejemplo que analizaremos dos tipos de protección basado en KEYFILE.

Diferencias a tomar en cuenta:

Existen dos tipos de archivos en general con los cuales los programadores protegen el software, estos son los siguientes:

RegFile: archivo .reg que contiene las entradas del Registro en lugar de efectuar directamente los cambios en el Registro.

KeyFile: archivo que especifica el nombre de archivo que contiene la clave o registro para que el software quede registrado.


Comenzando con el análisis:

Existen muchos variantes de protecciones basadas en KEYFILE, la que veremos en este articulo está basada en “KEYFILE con verificación Hexadecimal de Contenido Variable” que desde este momento llamaremos “KVHCV”. Esta verifica como su nombre lo dice que exista un archivo en algún lugar del disco duro, lógicamente especificado por el programa el cual debe de tener y contener una extensión predeterminada y un valor dentro del mismo, en algunos casos los programadores encriptan el contenido del KEYFILE pero aun así es reversible.

Utilerias a usar:

1. W32dasm

2. OllyDbG v 1.10

3. Editor de Texto

4. Editor Hexadecimal

5. Calculadora Científica
 
Análisis del Comportamiento de la Protección

Lo primero que todo reverser hace es analizar el programa que trata de vulnerar, con diferentes utilerías y además lo ejecuta para ver el comportamiento de la protección y el software en sí mismo, cabe mencionar que para este artículo usaremos un CRackME para prueba de concepto llamado:




El cual nos ayudara a entender como los reverses hacen su trabajo.

Al ejecutar el crackme lo primero que aparece es una NAg screen donde nos dice el nombre del creador y un string reference “CLick OK to check for the Keyfie” y un botón “Aceptar” ahora le damos click en “Aceptar y vemos la siguiente pantalla:


Otro String Reference “ Hmmmmm, I can’t find the file! “ como podemos ver cuando le damos click en el botón de Aceptar en la primera NAgScreen nos ejecuta otra NAgScreen en la cual nso dice que no encuentra el archivo, esto me hace pensar y preguntarme varias cosas, primeramente me doy cuenta que el Crackme verifica si existe un archivo, pero ¿ qué archivo es, con que extensión, en que formato y en donde lo busca? Esas preguntas las iremos resolviendo en el transcurso de este texto. 


Análisis interno del Ejecutable

Una vez hecho el análisis del comportamiento de la protección pasamos a hacer un reconocimiento interno del PE (Portable Ejecutable) a más detalle donde veremos y encontraremos en que lenguaje fue programado, si esta empacado o encriptado, para eso usaremos el RDG Packer Detector v 0.6.7 el cual nos dirá muchas cosas.
 


Le damos click en abrir y seleccionamos el Crackme en cuestión: 
 

Y como podemos ver nos dice en que lenguaje de programación fue hecho y lo más importante no está empacado ni protegido, cabe mencionar que esto es un error ya que facilitan el trabajo para los piratas informáticos que quieren tener el software totalmente libre de uso sin pagar las regalías pertinentes.


El siguiente paso es analizar el ejecutable en lo que yo llamo código muerto que consiste simplemente desensamblar el (PE) con el W32Dasm una utilería realmente viejita pero sigue siendo de gran utilidad y valía para los reversers, una vez dicho estoy pasamos a desensamblar el (PE) y en el W32Dasm podremos ver lo siguiente:

 En esta ventana podemos ver las partes que conforman el (PE) ahora viene lo más complicado analizaremos cada parte que conforma al (PE)
En la imagen siguiente podemos ver la cabecera del ejecutable que en este caso contiene 5 secciones las cuales contienen toda la información que el ejecutable necesita para poder ser inicializado 


 
 
Pero antes de explicarles en qué consisten las cabeceras, les explicare a grandes rasgos que es un Portable ejecutable. 
WW.CCAT.DU.MX
 
 



No hay comentarios:

Publicar un comentario

Crowdstrike -> Solución de errores de actualización de CrowdStrike con BitLocker habilitado

En este pequeño articulo ver como componer el problema de CROWDSTRIKE cuando esta habilitado el BITLOCKER, cabe resaltar que puede ser una e...