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


 


Tema destacado: 4n4lDetector v1.3: herramienta de análisis estático de malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: Shaddy, karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Reto Crackme 6 De Flamer
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Reto Crackme 6 De Flamer  (Leído 8,582 veces)
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.219


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Reto Crackme 6 De Flamer
« Respuesta #10 en: 6 Agosto 2012, 07:44 »

Keygen (en VB6)

Suponiendo que en un form hay un boton (Command1) y un textbox (Text1):
Código:
Function getForcedChar(testInt As Integer) As String
Dim hallado As Boolean
Dim car As Integer
Dim valor As Integer

hallado = False
Do While (Not hallado)
    car = Int((91 * Rnd) + 32)
    valor = ((((((car + &H6B - 4) * 5) / 2) * 3) Xor &H19C) And 1)
    hallado = (valor = testInt)
Loop
getForcedChar = Chr(car)
End Function


Private Sub Command1_Click()
Dim serial As String
Dim i As Integer

For i = 1 To 20
    serial = serial + getForcedChar(IIf((i = 3) Or (i = 5) Or (i = 13) Or (i = 17), 1, 0))
Next i
Text1.Text = serial
End Sub

Analisis:

len serial=20 chars
str((((((chr(serial) + 6Bh - 4) * 5) / 2) * 3) xor 19Ch) & 1) = "00101000000010001000"


Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Tinkipinki

Desconectado Desconectado

Mensajes: 242



Ver Perfil
Re: Reto Crackme 6 De Flamer
« Respuesta #11 en: 6 Agosto 2012, 17:20 »

Gracias MCKSys, con el codigo que has posteado se puede ver claramente como trabaja el algoritmo de calculo del serial a parte que nos brinda la oportunidad de adentrarnos un poco mas sobre la programacion en VB para los que no dominamos este entorno ;-)

Saludos
En línea

Flamer


Desconectado Desconectado

Mensajes: 919


crack, crack y mas crack...


Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #12 en: 6 Agosto 2012, 19:13 »

Balla fly eres buenisimo para esto felisidades
para la otra tela pondre mas difisil

saludos flamer ya te anote en la lista
En línea

ThunderCls

Desconectado Desconectado

Mensajes: 215


CrAcKiNg 4 PaSsIoN


Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #13 en: 6 Agosto 2012, 20:33 »

Hola
Ya veo que MCKSys lo resolvio, felicidades amigo  ;-)
Igual solo hare unos apuntes de mi parte.

Serial Facil
========

Código
  1. for(int i = 0; i < strlen(serial); i++)
  2. {
  3.   val = serial[i] + 0xE0;
  4.   strcat(serialfinal, val);
  5. }

Name: Thunder
Serial: 13414815514E144145152

Nota: En esta parte del crackme hay un bug(al no ser que se haya echo conscientemente), cada vez que insertas un serial incorrecto, se acumulan las cadenas del serial correcto una a continuacion de la otra, ej: Serial correcto para nuestro name: 123
Si ponemos 4 veces un serial incorrecto el serial correcto ya no seria 123, sino 123123123123123, por lo que creo que se ha olvidado de limpiar la variable en cada intento y de ahi el bug.

Serial Dificil
=========

length = 20
Bit = ((((serial + 0x67 * 5) / 2) * 3) xor 0x19C) and 1

Tomando solo numeros por flojera podemos crearnos una tabla:
Tabla de Bits
==========

1234567890
0010001000

Ahora solo ubicamos los numeros para lograr la serie de bits correctos
Bits correctos = 00101000000010001000
Serial: 12343668901234567890

PD: Una ultima acotacion, pal cuida el idioma si?, muchas faltas de ortografia en los textos...(critica constructiva :P). Por lo demas no ha estado mal, sigue por ese camino.
Un saludo a todos y...Tinkipinki te invito a que revises bien la parte facil para que veas que no era dificil sacar un serial valido para tu nick.
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Flamer


Desconectado Desconectado

Mensajes: 919


crack, crack y mas crack...


Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #14 en: 6 Agosto 2012, 21:38 »

Hola Thunder si es error mio lo del bug orita biendo el codigo fuente me falto limpiar la variable pero en fin felisidades sebe que eres bueno como fly

boy a notarte en la lista

a mi ortografia no puedo mejorar, boy a tener que buscar una pagina de autocorrecion

saludos Flamer
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.219


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Reto Crackme 6 De Flamer
« Respuesta #15 en: 6 Agosto 2012, 21:59 »

a mi ortografia no puedo mejorar, boy a tener que buscar una pagina de autocorrecion

SIEMPRE se puede mejorar. Es cuestión de perseverar...  ;)

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

apuromafo


Desconectado Desconectado

Mensajes: 1.254



Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #16 en: 7 Agosto 2012, 02:41 »

felicidades a thunder
bueno, a lo mas tengo un mini tiempo y comento:

mi kg para tu primera instancia de ejecución, aunque intente hacerlo mejor, siempre me crasheo..asi que adjunto lo unico que me resulto:
tu programa y mi kg para el primer nivel, hecho en c++
http://www.mediafire.com/?pvvx5vyu4b8odld


detalles normales_ que habia tenido para el 1, pero que a la hora por no ser buen coder obviamente no habia pensado en keygen


para usuario serial /nivel 1 tomas los valores:
DS:[0040102C]=7348B48B (msvbvm60.rtcAnsiValueBstr)
pero vemos una comprobacion

00409C53   . 83F8 04        CMP EAX,4
00409C56   . 0F9FC2         SETG DL

por ende el primer usuario debe ser igual o mayor a 4 carácteres
como hay un detenimiento no puede ser mayor a 15

mas adelante se ve (integrer) (smartcheck) el cual confirma los valores,

mientras revisaba hoy mi codigo vi que  thunder posteó su solucion y descubrimiento del bug, eso me confirmo el tema ,


 val = serial + 0xE0;
el + E0 viene de aqui

00409DF3   . 8D95 74FFFFFF  LEA EDX,DWORD PTR SS:[EBP-8C]
00409DF9   . 66:81C1 E000   ADD CX,0E0
00409DFE   . 8D45 B4        LEA EAX,DWORD PTR SS:[EBP-4C]

pero a diferencia de otros lenguajes, termina en 00 y este es descartado del serial (00+E0)

yo de primera preferia este el lugar para fishear  con Bp condicional en ECX==0 y el valor a loguear CX
00409E09   . 66:890F        MOV WORD PTR DS:[EDI],CX                 ;  fish

Name:apuromafo
serial:14115015515214F14D14114614F


la concatenacion
00409E2E   . FF15 B0104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCa>;  msvbvm60.__vbaVarCat

^^
ahora bien portando la idea en C
codigo keygen tipo en C++ codeblock mingw
el que use yo fue

http://prdownload.berlios.de/codeblocks/codeblocks-10.05mingw-setup.exe



Código:
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <string>
#include <stdio.h>
    using namespace std;

int  main()
{
char palabra[20],c=' ';

printf(" Keygen Sakura by Apuromafo 06-8-12 \n");
printf(" Nivel user-serial nivel 1 de 2 niveles \n");
printf(" para Crackme 6 de Flamer   \n");
printf(" OBS:serial valido solo para la primera ejecucion, x bug del bufer\n");
printf(" Uso:Ingresa usuario y te dira el serial (osea +0xE0) \n");
printf(" favor mas de 4 letras el nombre  y menos de 15 \n\n ");
printf(" hecho solo por un mini tiempo libre  \n\n ");

printf("Usuario = ");
scanf("%s",palabra);
printf("Serial  = ");
int cont=0,mayor=0,tam=strlen(palabra);
for(int i=0;i<=tam;i++)
{
if(c!=palabra[i])
{
if(cont>mayor)
mayor=cont;
c=palabra[i];
cont=1;
}
else

cont++;

      int opc1;

     opc1 = (palabra[i] + 0xE0);
 if(opc1!=0xE0)
      printf("%X", opc1);
      }
      getch();


« Última modificación: 7 Agosto 2012, 05:40 por apuromafo » En línea

Apuromafo
apuromafo


Desconectado Desconectado

Mensajes: 1.254



Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #17 en: 7 Agosto 2012, 05:42 »

flamer, para que no te enojes, te edito el post anterior y te agrego el keygen del nivel 1 en c++
, obviamente por tema de tiempo no fixeo los tamaños de largo y porque mi nivel de programación es bajo en esos temas sobre todo porque siempre c++ me tiende a explotar los exes jiji

saludos Apuromafo

pd:
normalmente para la primera vez es
Nombre:apuromafo
serial:14115015515214F14D14114614F
para la segunda  vez que ejecutas (es como si fuera apuromafoapuromafo)
usuario:apuromafo
serial:14115015515214F14D14114614F14115015515214F14D14114614F

esta considera apuromafoapuromafo para la validacion, pero uno simplemente coloco apuromafo en la 2da vez...esop, animo en todo
« Última modificación: 7 Agosto 2012, 05:46 por apuromafo » En línea

Apuromafo
Flamer


Desconectado Desconectado

Mensajes: 919


crack, crack y mas crack...


Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #18 en: 7 Agosto 2012, 06:15 »

hola apuromafo no te molestes no me enojo esta bien solo que boy a tener que modificar la tabla de tus logros donde dise serial boy aponer keygen pero te informo te quedas en terser lugar

nose si queden conformes con los lugares que lesdi, pero aclaro todos son buenos Crackers;-) ;-) ;-)

saludos Flamer
En línea

apuromafo


Desconectado Desconectado

Mensajes: 1.254



Ver Perfil WWW
Re: Reto Crackme 6 De Flamer
« Respuesta #19 en: 7 Agosto 2012, 06:39 »

no hay lio, igual fue un gran crackme para confirmar :D

, no tengo el tiempo como todos, pero apesar de estar oxidado algo se logra.-


respecto al numero 2 bajo la idea de los bytes por thunder:
mediante array los 20 numeros (en c++) y arrays
adjunto como keygen para el LV 2
http://www.mediafire.com/?fjnjjw0pxxgoin2


Código:
#include <iostream>
#include <algorithm>
#include<stdlib.h>
#include<iostream>
#include<time.h>
using namespace std;

int main(void)
{
    int num,c;
    srand(time(NULL)); //00101000000010001000

    for(c=1;c<=2;c++)   //XX101000000010001000
    {
         int array[] = { 1,2,4,5,6,8,9,0 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(array, array+8);
         for(int i=0; i<1; i++)
        cout << array[i] <<"";// << endl;
       // num=1+rand()%(11-1);
    //    cout<<num<<"";
    }
          int array[] = { 3,7 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(array, array+1);
        for(int i=0; i<1; i++)
        cout << array[i]<<"";// << endl;


    //    cout<<"3"; //00X01000000010001000

     for(c=4;c<=4;c++)//001x1000000010001000
    {
      //  num=1+rand()%(11-1);
        //cout<<num<<"";
        int array[] = { 1,2,4,5,6,8,9,0 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(array, array+7);
        for(int i=0; i<1; i++)
        cout << array[i]<<"";// << endl;
    }
      int Array1[] = { 3,7 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(Array1, Array1+1);
        for(int i=0; i<1; i++)
        cout << array[i]<<"";// << endl;


    //        cout<<"3"; //0010X000000010001000
     for(c=6;c<=12;c++) //00101X00000010001000
    {
      //  num=1+rand()%(11-1);
        //cout<<num<<"";
        int array[] = { 1,2,4,5,6,8,9,0 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(array, array+6);
        for(int i=0; i<1; i++)
        cout << array[i] <<"";// << endl;
    }
//          int Array1[] = { 3,7 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(Array1, Array1+1);
        for(int i=0; i<1; i++)
        cout << array[i]<<"";// << endl;
    //       cout<<"3"; //0010X000000010001000
     for(c=14;c<=16;c++) //00101X00000010001000
       {
      //  num=1+rand()%(11-1);
        //cout<<num<<"";
        int array[] = { 1,2,4,5,6,8,9,0 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(array, array+5);
        for(int i=0; i<1; i++)
        cout << array[i] <<"";// << endl;
    }
       //   int Array1[] = { 3,7 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(Array1, Array1+1);
        for(int i=0; i<1; i++)
        cout << array[i]<<"";// << endl;

    //   cout<<"3"; //0010X000000010001000
      for(c=18;c<=20;c++) //00101X00000010001000
   {
      //  num=1+rand()%(11-1);
        //cout<<num<<"";
        int array[] = { 1,2,4,5,6,8,9,0 };
        srand( unsigned( time(NULL) ) );
        random_shuffle(array, array+4);
        for(int i=0; i<1; i++)
        cout << array[i] <<"";// << endl;
    }

    cin.get();
}
« Última modificación: 7 Agosto 2012, 07:13 por apuromafo » En línea

Apuromafo
Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crackme Nº1 De Flamer « 1 2 »
Ingeniería Inversa
Flamer 14 6,170 Último mensaje 13 Octubre 2011, 02:52
por Flamer
Crackme 1 de Flamer
Ingeniería Inversa
Tinkipinki 2 1,345 Último mensaje 23 Octubre 2011, 06:35
por Tinkipinki
Crackme Vol. 4 Por Flamer
Ingeniería Inversa
Flamer 7 3,110 Último mensaje 7 Diciembre 2011, 23:59
por chEEtos
Crackme 5 De Flamer
Ingeniería Inversa
Flamer 7 3,067 Último mensaje 14 Abril 2012, 01:21
por $Edu$
Reto Crackme 7 De Flamer « 1 2 »
Ingeniería Inversa
Flamer 12 3,166 Último mensaje 10 Septiembre 2012, 08:35
por apuromafo
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines