00003EBjQXRiQI9E.es.srt
Este video es la parte 1 del ejercicio 6. El enfoque es configurar el proyecto en Ghidra y reconstruir la estructura MyClass y su constructor.
Ubicación del main:
Se encontró el main usando el patrón estándar de binarios de consola: buscar GetInitialNamedSecurityDescriptor seguido de las llamadas PRV/PRC, y el call inmediatamente posterior es el main. Se le asignó la firma estándar int main(char** argv, char** envp).
Stack cookie:
Lo primero que hace main es mover un valor de .data al stack y aplicarle un XOR con RCP. Se renotó como global_cookie / cookie.
Clase MyClass — RTTI y vtable:
MyClass es la única clase propia del programa (el resto son del runtime de MSVC).void*). Se creó la estructura vtable_MyClass con esos 4 punteros.Estructura MyClass (50 bytes / 0x32):
Se creó manualmente la estructura con el mismo nombre que la clase RTTI (MyClass) para que Ghidra la asocie correctamente. El layout quedó así:
| Offset | Campo | Tipo | Valor inicial |
|---|---|---|---|
| 0x00 | vtable ptr | vtable_MyClass* |
dirección de la vtable |
| 0x08 | string1 |
basic_string (0x20 bytes) |
"" (vacío, 5 bytes de buffer) |
| 0x28 | _0xF |
long long |
0x0F |
| 0x30 | string2 |
basic_string (0x20 bytes) |
"malísimo" |
std::basic_string — comportamiento SSO (Small String Optimization):
Punto clave del video. El constructor tiene lógica de branch dependiendo de _Mysize (tamaño máximo interno):
_Mysize <= 0xF: la string se almacena embebida directamente en el buffer de la estructura (no hay heap)._Mysize > 0xF: se hace una allocación en el heap y el campo almacena un puntero al buffer externo.En este caso ambas strings ("" y "malísimo") son chicas, así que se escriben directo en el buffer sin malloc.
Importación de tipos desde otro ejecutable:
Como std::basic_string es un template que el compilador genera internamente (no es una función importada), no aparece en Ghidra por defecto. La solución fue:
ConsoleApplication6) que use std::string.Con eso quedó disponible la estructura basic_string para aplicarla en la estructura de MyClass.