Resolviendo un crackme con pipes

Resolviendo un crackme con pipes

Resolviendo un crackme con pipes

«La fuerza bruta a veces es la solución de muchos problemas.»

Manos a la obra

Haremos una prueba de concepto (PoC) de una resolución en un Crackme .

Esta es una «funcionalidad» que aportan los Sistemas Operativos, sirve para comunicar varios procesos entre ellos.

Empezamos ejecutando el crackme para ver que responde.

Underc0de - Crackme con pipes parte 1

Como vemos, no pide una respuesta; así que supondremos que la contraseña hay que pasar como valor al iniciar el programa, parece que la contraseña está en formato numérico, por tanto, vamos a codificar un programa en C que a través de Pipes vaya lanzando números hasta dar con la contraseña correcta.

#include <stdio.h>
#include <windows.h>
int prueba(int valor){
  // Ruta del programa y otros valores
  char programa[100] = "cmd /c \"C:\\Users\\roll_\\Desktop\\CrackMe 1.0.exe\" ";
  char numero[10];
  itoa(valor ,numero, 10);
  strcat(programa, numero);
  char respuesta[10024];
  // Borro el buffer
  memset(respuesta, 0, sizeof(respuesta));
  // Atributos necesarios
  SECURITY_ATTRIBUTES sa;
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  // Punteros de lectura y escritura
  void * lectura;
  void * escritura;
  // Creamos pipe e iniciamos el proceso
  sa.bInheritHandle = TRUE;
  CreatePipe(&lectura, &escritura, &sa, 0);
  si.dwFlags = STARTF_USESTDHANDLES;
  si.hStdOutput = escritura;
  si.hStdError = escritura;
  si.hStdInput = lectura;
  CreateProcessA(0, programa, 0, 0, TRUE, 0, 0, 0, &si, &pi);;
  // Comprobamos si se ha acertado
  ReadFile(lectura, respuesta, 10024, 0, 0);
    if(strcmp(respuesta, "Password Incorrecta") != 0 && strcmp(respuesta, ("Introducir valor numerico"))){
      printf("%s %d\n", respuesta, valor);
      return 1;
    }
  printf("%s %d\n", respuesta, valor);
  return 0;
}

int main(){
  // Bucle para hacer la prueba
  int i = 0;
  while(prueba(i) != 1){
  i++;
}
Sleep(100000);
}

Luego de ejecutar el programa vemos que en pocos segundos sacará la contaseña.

Underc0de - Crackme con Pipes parte 2

Un concepto sencillo, puede ser interesante; podríamos ampliar más, aunque lo fundamental es esquematizar el concepto.

Y aquí, el código del crackme para que veriquen.

    #include <stdio.h>
     
    int main(int argc, char *argv[]){
            
            int password2;
            int password = 725;
            
            password2 = atoi(argv[1]);
            
            if (password2 == 0){
                    printf("Introducir valor numerico");
            }
            else if(password == password2){
                    printf("Password Correcta");
            }
            else{
                    printf("Password Incorrecta");
            }
     
    }

Agradecemos a Rollth por mostrar un método diferente para resolver un crackme.

Posts Relacionados

Comments

comments

Written By

xyz

Leave a Reply

×