ちょっと...私は、逆アセンブルされてから逆コンパイルされたコードから唯一の単一関数CreateInterfaceをエクスポートするDLLを持っています:
int __cdecl CreateInterface(const char *a1, int a2)
{
//many crazy things
}
ここでは戻り値の型が int になっていますが、実際には何らかの構造体へのポインターです。メインのexeから、このlibがロードされ、そのように使用されます:
int (__stdcall *__cdecl Sys_GetFactory(int (__stdcall *hModule)()))()
{
int (__stdcall *result)(); // eax@1
result = hModule;
if ( hModule )
result = GetProcAddress(hModule, "CreateInterface");
return result;
}
void some_funct()
{
FARPROC net_interface = Sys_GetFactory(pModule);
int s_pClientNet = ((int (__cdecl *)(_DWORD, _DWORD))net_interface)("INetClient_003", 0);
}
初期化された後、そのように使用されました:
int result = (*(int (__stdcall **)(int, int, int, int))(*(_DWORD *)s_pClientNet + 60))(
login,
password,
mw_account_struct,
mw_account_struct_size);
そう..構造体に戻ります。とにかくそれを復元するには、必要な関数を非常にクレイジーな方法で呼び出すのではなく? つまり、(s_pClientNet + 60)
PS 確かに、dll ソース、def ファイルなどを持っておらず、ターゲット クラス/構造体にどの関数を含めることができるかさえわかりません...私が知っている唯一のことは、いくつかの呼び出しですそのような関数に s_pClientNet + 60