This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

Resolviendo CrackMe con Pipes

  • 1 Replies
  • 3903 Views

0 Members and 1 Guest are viewing this topic.

Offline rollth

  • *
  • Ex-Staff
  • *****
  • Posts: 889
  • Actividad:
    0%
  • Reputación 16
  • El conocimiento es libre.
  • Twitter: @RoloMijan
    • View Profile
    • Whateversec
    • Email

Resolviendo CrackMe con Pipes

  • on: May 30, 2017, 11:26:23 pm
Muy buenas a todos Underc0ders!

Hoy voy a hacer una prueba de concepto de una resolución de un posible Crackme usando Pipes, esta es una "funcionalidad" que nos aportan los sistemas operativos que nos sirve para comunicar varios procesos entre ellos.

Bueno vamos a empezar ejecutando el crackme y viendo que nos responde.


Como podemos ver no nos pide una respuesta así que supondremos que la contraseña hay que pasarla como valor al iniciar el programa, además parece que la contraseña es en formato numérico, por lo tanto lo que vamos a hacer es un programa en C que a través de Pipes vaya lanzando números hasta que de con la contraseña correcta.

Code: (c) You are not allowed to view links. Register or Login
#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);

}

Tras ejecutar el programa veremos que en pocos segundos nos sacará la contaseña.


Es un concepto sencillo pero creo que puede ser interesante, se podría ampliar más pero creo que queda claro el concepto.

Por último dejo el código del crackme :D

Code: (c) You are not allowed to view links. Register or Login
#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");
}

}


También me pueden seguir en Twitter si les hace ilusión: You are not allowed to view links. Register or Login

Saludos.


« Last Edit: April 01, 2018, 10:20:32 am by rollth »

Rollth
Buen hacker mejor persona.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Offline blackdrake

  • *
  • Co Admin
  • Posts: 2006
  • Actividad:
    3.33%
  • Country: es
  • Reputación 23
    • View Profile

Re:Resolviendo CrackMe con Pipes

  • on: June 30, 2017, 04:51:31 pm
La fuerza bruta a veces es la solución de muchos problemas :D

Gran aporte Rolo, seguro que a muchos les sirve

Un saludo