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
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Introducción al crackeo manual de aplicaciones .NET
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Introducción al crackeo manual de aplicaciones .NET  (Leído 8,591 veces)
43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Introducción al crackeo manual de aplicaciones .NET
« en: 7 Septiembre 2010, 08:48 am »

Puesto que hasta ahora no vi este tema en el foro (y si es que se hizo no lo vi), mostrare a continuación como modificar prácticamente todo lo que se nos antoje de una aplicación .NET.

En el siguiente ejemplo luego de crear una aplicación .NET



con el sgte code:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Management;
  9.  
  10. namespace Crack_Me
  11. {
  12.    public partial class Form1 : Form
  13.    {
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.  
  19.        private void button1_Click(object sender, EventArgs e)
  20.        {
  21.            if (textBox1.Text.ToUpper() == "KODELIVE") MessageBox.Show("Clave Correcta", "Clave Correcta", MessageBoxButtons.OK, MessageBoxIcon.Information);
  22.            else MessageBox.Show("Clave Incorrecta", "Vuelva a Intentarlo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
  23.        }
  24.  
  25.        private void button2_Click(object sender, EventArgs e)
  26.        {
  27.            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Processor"))
  28.            {
  29.                using (ManagementObjectCollection manColl = searcher.Get())
  30.                {
  31.                    string sProcesador = "";
  32.                    foreach (ManagementObject obj in manColl)
  33.                    {
  34.                        sProcesador = (string)obj["ProcessorID"];
  35.                    }
  36.                    if (textBox2.Text.Trim() == psMD5(sProcesador.Trim() + "xComplicar"))
  37.                    {
  38.                        Form2 f2 = new Form2();
  39.                        f2.ShowDialog();
  40.                    }
  41.                    else MessageBox.Show("Clave Incorrecta", "Vuelva a Intentarlo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
  42.  
  43.                }                
  44.            }
  45.        }
  46.        private string psMD5(string sProc)
  47.        {
  48.            System.Security.Cryptography.MD5CryptoServiceProvider cryMD5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
  49.            byte[] bProc = System.Text.Encoding.ASCII.GetBytes(sProc);
  50.            bProc = cryMD5.ComputeHash(bProc);
  51.            string sMD5 = "";
  52.            for (int i = 0; i < bProc.Length; i++)
  53.                sMD5 += bProc[i].ToString("x4").ToLower();
  54.            return sMD5;
  55.        }
  56.  
  57.        private void Form1_Load(object sender, EventArgs e)
  58.        {
  59.            this.Icon = Properties.Resources.rIcono;
  60.        }
  61.  
  62.    }
  63. }
  64.  

La cual en el button1 compara una cadena con el contenido del textbox1 para indicar si la clave es correcta o no.
En el button2 obtenemos el ID del procesador y ciframos utilizando  MD5CryptoServiceProvider, luego comparamos el contenido del textbox2 con el resultado del cifrado si son iguales abrirá el form2 caso contrario mostrará un mensaje de error.

Ahora necesitamos las siguientes herramientas:

ilasm.exe
http://msdn.microsoft.com/en-us/library/496e4ekx%28VS.80%29.aspx

ildasm.exe
http://msdn.microsoft.com/es-es/library/f7dy01k1%28VS.80%29.aspx

para facilitarnos las cosas creamos un par de archivos .bat (las rutas están de acuerdo a win XP probar modificaciones en Win7 o similar) con el siguiente contenido:

Desensamblador.bat
Código
  1. @echo off
  2. cd "%PROGRAMFILES%\Microsoft Visual Studio 8\SDK\v2.0\Bin\"
  3. ildasm.exe /source "%HOMEPATH%\Escritorio\Crack Me.exe" /output:"%HOMEPATH%\Escritorio\prueba\Crack Me.il"
  4. ildasm.exe /source "%HOMEPATH%\Escritorio\Crack Me.exe"

Utilizando ildasm.exe desensamblamos el Crack Me.exe (ubicado en el escritorio) direccionado a una carpeta en el escritorio con el nombre "prueba", luego abrimos el Crack Me.exe con ildasm.exe para ver su estructura.



Haciendo doble click sobre el button1_Click podemos ver las cadenas que indican cuando tiene la clave correcta y cuando no la tiene.



Antes de ellas podemos ver la comparación que realiza para indicar si es la clave correcta, tb podemos ver la cadena que compara en este caso "KODELIVE".
Entramos en la carpeta prueba y abrimos con el block de notas "Crack Me.il" (nombre que pusimos en el Desensamblador.bat como archivo de salida) para facilitar las cosas copiamos la cadena "KODELIVE" o "Clave Correcta" o "bool [mscorlib]System.String::op_Equality(string" para utilizarla en el buscador del notepad (Ctrl + B) y modificamos las líneas que queramos.

En la línea:
Código
  1. IL_0010:  ldstr      "KODELIVE"

la cambiamos por:

Código
  1. IL_0010:  ldstr      "CRACKEADO"

así el nuevo password que compara será "CRACKEADO", ya no será "KODELIVE".

Si queremos que acepte cualquier password, en la línea:

Código
  1. IL_0015:  call       bool [mscorlib]System.String::op_Equality(string,

cambiamos a:

Código
  1. IL_0015:  call       bool [mscorlib]System.String::op_Inequality(string,

así cualquier contenido que tenga o no tenga el textbox1 nos dará siempre "Clave Correcta" excepto si es la clave que anteriormente era correcta ("KODELIVE" o "CRACKEADO") es decir en lugar de comparar si son iguales compara si son diferentes.



Ahora necesitamos guardar los cambios hechos en "Crack Me.il" en un nuevo ejecutable, para ello usamos:

Ensamblador.bat
Código
  1. @echo off
  2. cd %windir%\Microsoft.NET\Framework\v2.0.50727\
  3. ilasm.exe /exe "%HOMEPATH%\Escritorio\prueba\Crack Me.il"

Ahora obtenemos un nuevo ejecutable con las modificaciones hechas que se guarda en la carpeta prueba con el nombre Crack Me.exe.



Ahora veamos la segunda parte (button2), la cual compara el ID del procesador cifrado con MD5 con el contenido del textbox2, borramos el contenido de la carpeta prueba (en el escritorio) y repetimos los pasos con el Desensamblador.bat, en este caso hacemos doble click en button2.



Localizamos la comparación en el ildasm.exe



Y luego la buscamos en "Crack Me.il", cambiamos la linea:

Código
  1. IL_007d:  call       bool [mscorlib]System.String::op_Equality(string,

por:

Código
  1. IL_007d:  call       bool [mscorlib]System.String::op_Inequality(string,

y el resultado es el mismo que en el button1, volvemos a ensamblarlo con Ensamblador.bat y obtenemos el nuevo ejecutable modificado (en la carpeta prueba).

Ahora ambos botones funcionan con o sin password que no sea el original.
Si necesitamos saber cómo se genera el password o la clave basta con ver las líneas antes del mensaje de "Clave incorrecta" y podemos realizar un pequeño keygen para la aplicación "victima".

Ahora supongamos que el primer formulario solo es de validación para luego entrar al 2do, podemos hacer que entre directamente al 2do formulario saltándonos el primero definitivamente, del sgte modo:

Volvemos a utilizar Desensamblador.bat y localizamos:



es aquí donde se define que formulario carga al inicio (Program.cs) localizamos esta línea:

Código
  1. IL_000b:  newobj     instance void Crack_Me.Form1::.ctor()

y luego la buscamos en "Crack Me.il" para reemplazarla con:

Código
  1. IL_000b:  newobj     instance void Crack_Me.Form2::.ctor()

Utilizamos nuevamente Ensamblador.bat y el resultado obvio es que carga directamente el formulario2 (Form2) y ya no carga el form1 para la validación del password.

Los nombres de Form1, Form2 obviamente cambian según la aplicación que abramos, tan solo es buscar la organización, nombres y métodos que utiliza.

El cambiar algunos de los recursos que utiliza puede hacerse modificando el *.res de la aplicación.

Asi nos evitamos estar buscando cracks o adquiriendo aplicaciones como Dis# que viendo  cómo funciona supongo que debe basarse en estas 2 herramientas.

Obtenemos un mayor aprendizaje de la plataforma .NET y mejoras en cuanto al nivel de protección.

Quería mostrar esto puesto que lo utilicé para obtener el algoritmo de validación para facturas de cierto país, aunque el mismo utilizaba Salamander .NET obfuscator no fue difícil obtener dicho algoritmo y ...

Bueno, lo que muestro es la parte sencilla, la parte interesante es automatizar todo este trabajo para modificar triales y demás basados en .NET en cuestión de segundos (eso porque ya tengo comprador para dicha aplicación), pero comparto el inicio del proyecto por si alguien quiere realizarlo por su cuenta.

Adjunto el proyecto y los archivos de ejemplo (descomprimir en el escritorio para un funcionamiento directo).

Descarga:
http://www.4shared.com/file/dHWAGETI/CrackNET.html


En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #1 en: 7 Septiembre 2010, 15:22 pm »

Buen post,
Añadido a la lista.

+1


En línea

NetStorm

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #2 en: 10 Septiembre 2010, 17:32 pm »

Pues, en definitiva no es la gran cosa, pero la verdad que despierta mucha curiosidad, en la actualidad muy pocos programadores a no ser que sean Nobs, colocarían la clave en modo cadena y luego la compararían, pero se le puede dar otros usos.  ;-)
En línea

43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #3 en: 10 Septiembre 2010, 20:01 pm »

Solo use esa comparación para que cualquiera pueda entender el ejemplo, pero ya que tocaste el tema, porque no creas un "crack me" sin utilizar técnicas de protección de terceros y que tenga más de un formulario, subes el .exe y probamos este método.

Asi tb damos un ejemplo de protección de como NO lo haría alguien que no es parte de los "Nobs", eso lo haré yo al saltar tu protección y luego escribiré su respectiva explicación.

Si estas de acuerdo, el serial o clave debe ser diferente para cada equipo.

 ;D
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
☺BADMAN

Desconectado Desconectado

Mensajes: 51


Este es un Moderador de CPH


Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #4 en: 10 Septiembre 2010, 20:31 pm »

  Estos son los Posts que me gusta Leer  ;D igual si no es una cadena plana, se puede aislar el modulo que genera la clave, y romperla a fuerza bruta, y en caso de que sea un hash md5 lo que esta guardado de la clave igual se puede sustituir por un Hash de la nueva clave  :) ....

  Buen Aporte Men ....  :P
En línea

Experto en Biefrost.
Subseven User.
Especialista en crypters.
Tifa FAN
Batch Programer XD ;D
43H4FH44H45H4CH49H56H45H
Wiki

Desconectado Desconectado

Mensajes: 502



Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #5 en: 11 Septiembre 2010, 17:51 pm »

Gracias, lo interesante es que incluso se puede editar iconos, imágenes, texto y más cosas de manera rápida y sencilla, osea si fuera uns software en otro idioma se puede hacer la traducción de manera rápida.

Saludos
En línea


-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W
jackgris

Desconectado Desconectado

Mensajes: 149



Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #6 en: 18 Junio 2011, 15:32 pm »

Muchas gracias, una sencilla explicacion para que cualquiera lo entienda, saludos  ;-) ;-) ;-)
En línea

.::IT::.

Desconectado Desconectado

Mensajes: 167



Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #7 en: 19 Junio 2011, 16:53 pm »

La única solución para evitar esas cosas es usar un ofuscador, yo prefiero hacerlo todo portable con  http://spoon.net/Studio/ así la cosa es más difícil.
En línea

Simplemente .::IT::.
alhevar

Desconectado Desconectado

Mensajes: 4

leyendo, aprendiendo


Ver Perfil
Re: Introducción al crackeo manual de aplicaciones .NET
« Respuesta #8 en: 20 Junio 2011, 00:30 am »

Muchisimas gracias por el tuto, me fue de gran ayuda.

Nunca me había topado con un .net y fue muy sencillo de lograr, quitando el tiempo de navegación por el ejecutabla hasta que di con las direcciones de chico bueno, chico malo. Luego tan solo fue modificar un salto de linea y vuoiala o como se diga.

De nuevo muchas gracias, un saludo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Algun manual en PDF con una introducción completa del uso de bactrack 5 r3
Hacking
Mister12 0 3,628 Último mensaje 28 Septiembre 2013, 17:48 pm
por Mister12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines