Ultimamente ando en modo ingenieria inversa con un juego relativamente viejo, Mechcommander. Por ahora voy relativamente bien sacando el contenido del juego pero me he pegado con un pared con un par de aspectos del juego.
Y por ver si saco algo en claro, me ha dado por intentar descompilar el ejecutable. Evidentemente no intento sacar todo el codigo fuente, ni volver a recompilarlo ni nada, solo intento saber como lee varios ficheros del juego.
Por ahora estoy probando con el IDA + Hex-rays decompiler y el plugin HexRaysCodeXplorer.
La verdad es q yo y el c++ no nos llevamos demasiado bien, pero es q ando perdidisimo.
Por poner un ejemplo:
Código:
int __thiscall Palette::loadPalette(Palette *this, struct FitIniFile *a2)
{
Palette *v2; // esi@1
int result; // eax@1
int v4; // edi@2
unsigned __int32 v5; // eax@4
DWORD v6; // edi@4
unsigned __int8 *v7; // eax@4
unsigned __int8 *v8; // ebx@4
UserHeap *v9; // ecx@6
void *v10; // eax@6
char v11; // [sp+Ch] [bp-4Ch]@2
v2 = this;
result = FitIniFile::readIdString(a2, `string', (char *)this + 64, 8u);
if ( !result )
{
a2 = 0;
FullPathFileName::init((FullPathFileName *)&a2, &palettePath, (char *)v2 + 64, `string');
File::File((File *)&v11);
v4 = File::open(&v11, a2, 1, 50);
if ( v4 )
{
File::~File((File *)&v11);
FullPathFileName::~FullPathFileName((FullPathFileName *)&a2);
result = v4;
}
else
{
v5 = File::fileSize((File *)&v11);
v6 = v5;
v7 = (unsigned __int8 *)UserHeap::malloc(systemHeap, v5);
v8 = v7;
*((_DWORD *)v2 + 28) = v7;
if ( v7 )
{
File::read((File *)&v11, v7, v6);
PaletteBlock::initRgbData(v2, v8);
v9 = systemHeap;
*((_DWORD *)v2 + 7) = 0;
*((_DWORD *)v2 + 8) = -1;
*((_BYTE *)v2 + 38) = 0;
*((_BYTE *)v2 + 37) = 0;
*((_BYTE *)v2 + 36) = 0;
*((_DWORD *)v2 + 2) = v6;
v10 = UserHeap::malloc(v9, v6);
*((_DWORD *)v2 + 4) = v10;
if ( v10 )
{
File::close((File *)&v11);
File::~File((File *)&v11);
FullPathFileName::~FullPathFileName((FullPathFileName *)&a2);
result = 0;
}
else
{
File::~File((File *)&v11);
FullPathFileName::~FullPathFileName((FullPathFileName *)&a2);
result = -1411776510;
}
}
else
{
File::~File((File *)&v11);
FullPathFileName::~FullPathFileName((FullPathFileName *)&a2);
result = -1411776511;
}
}
}
return result;
}
Tengo un problema importante, no encuentro strings de rutas por el codigo q me ayudaria bastante y realmente no entiendo que significa hacer
Código:
*((_DWORD *)v2 + 8) = -1;
Alguna pista, tutorial o plugin que me ayude en algo??
salu2
Marcadores