00001XpgeLtfv-dY.es.srt
Este video es una sesión de reverse engineering de un binario compilado en C++ que implementa una clase con tres objetos instanciados.
Estructura analizada:
La clase MyClass tiene campos internos: user (string), password (string), stream2 (string), y un flag. Se crean tres objetos (obj1, obj2, obj3) de esa misma clase, cada uno con sus propios valores de user y password.
Operaciones sobre los objetos:
Sobre obj1 y obj2 se ejecuta una función que modifica el password: le suma la constante 5467 y luego le suma el size del user. El compilador optimizó esto diferente en cada caso: en obj1 llama a las funciones suma_const y suma_size, en obj2 inlinea la suma de la constante y solo llama a suma_size. En obj3 directamente no ejecuta esa operación.
Función chequeo (se ejecuta sobre los tres objetos):
user a entero usando stoi. Si falla → imprime “me parece que falló”.user_size > 6.zoom acumulando: zoom += user_int XOR 0x5436'77.password_int == temp (donde temp se derive del password transformado).obj3, escribe "genial" en stream2; en los otros permanece "malísimo".flag = 1 si las condiciones pasan, flag = 0 si no.Condiciones finales (el “keygen”):
flag de obj1 y obj2 deben ser 1.zoom acumulado debe ser igual a un valor hardcoded."genial" usando el stream2 de obj3.Keygen desarrollado:
El presentador despeja matemáticamente las ecuaciones: dado user1 y user2 como entrada, calcula el password correcto para cada uno, y luego calcula user3 y password3 automáticamente para que la sumatoria de zoom cuadre con el valor esperado. También valida que el len del user3 resultante sea >= 6 y positivo.
Todo fue analizado en un disassembler, renotando funciones en la vtable de MyClass y editando las firmas de las funciones para revelar el this pointer (MyClass*) correctamente.