¿Es posible en Ida Pro hacer una compensación de campo de estructura para VTable que se define en el segmento .data?

StackOverflow https://stackoverflow.com/questions/5931775

Pregunta

Esto es lo que quiero lograr. Identifiqué una clase que definí como una estructura para almacenar datos de clase. Uno de los métodos de la clase usa el campo de clase como si fuera un puntero a VTable.

int __thiscall SignOn(struc_4 *this)
{
  v1 = this;
  if ( !v1->vtable_40194AE0 )
    return E_UNEXPECTED;
  v1->field_3E8 = 0;
  if ( !sub_686F7193(v1) )
    return (*(*v1->vtable_40194AE0 + 12))(v1->vtable_40194AE0, 0, 0); // sub_40128EEE
}

Como puede ver, llama a la tercera función de VTable. En tiempo de ejecución, identifiqué que VTABLE_40194AE0 señala la matriz en la sección .data que se ve así

off_40194AE0    dd offset InternalQueryInterface
                dd offset AddRef
                dd offset Release
                dd offset sub_40128EEE  ; 3
                dd offset sub_40128F8C
                dd offset sub_4012C2E2  ; 5

¿Hay alguna forma de decir de alguna manera Ida que VTABLE_40194AE0 siempre apunta a Vtable a 0x40194ae0, por lo que se verá una llamada en el código de pseudo?

return vtable_40194AE0->sub_40128EEE(v1->vtable_40194AE0, 0, 0);

?

Traté de configurar VTABLE_40194AE0 de la estructura para que sea "compensación definida por el usuario", pero no ayuda :(

Muchas gracias !

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top