Vamos a resolver un crackme anterior pero esta vez lo abordaremos de forma completamente distinta, en vez de parchear un salto condicional con radare buscaremos el password correcto monitorizando las llamadas a las shared libaries.
El código es tan sencillo como este:
vi 00.c
#include<stdio.h>
int main(void){
char str1[20];
printf("Crackme 0x00 Coded by Kr0m\n");
printf("Introduzca password: ");
scanf("%s", str1);
if (strcmp(str1, "666-666") == 0){
printf("Ohu yeyesss Password Correcto!\n");
} else {
printf("ERROR: Password incorrecto!\n");
}
}
Compilamos:
gcc 00.c -o 00
Compilamos e instalamos la herramienta ltrace que nos permitirá ver las llamadas que hace el binario a las shared libraries:
emerge dev-util/ltrace
Ejecutamos el binario mediante ltrace:
ltrace ./00
puts("Crackme 0x00 Coded by Kr0m"Crackme 0x00 Coded by Kr0m) = 27
printf("Introduzca password: ") = 21
__isoc99_scanf(0x55b473af78d9, 0x7ffeedf39420, 0x7f5dc37638a0, 0Introduzca password: asd) = 1
strcmp("asd", "666-666") = 43
puts("ERROR: Password incorrecto!"ERROR: Password incorrecto!) = 28
+++ exited (status 0) +++
La entrada ha sido asd y la compara con 666-666, que ocurrirá si metemos 666-666 como password?
./00
Crackme 0x00 Coded by Kr0m
Introduzca password: 666-666
Ohu yeyesss Password Correcto!