Witam,
Posiadam pewną aplikacje, do której wszczepiam biblioteke DLL metodą proxy DLL (tj. podmieniam nazwe, a w mojej DLL-ce wczytuje oryginalną).
W mojej DLL-ce w DLLMain() tworze nowy wątek przy użyciu _beginthread(). W wątku tym mam główny kod DLL-ki, a co najważniejsze posiadam tam wywołania do funkcji, które znajdują w aplikacji do której wszczepiłem DLL-ke.
Po pewnym nieokreślonym czasie od uruchomienia całości i uruchomienia mojego magicznego kodu oryginalna aplikacja potrafi się wyspypać.
Zamieszczam schemat mojej aplikacji:
// mojadll.dll
DWORD fback = 0xFFFFFFFF; // przykładowy adres instrukcji po sub esp,18h
// jest to funkcja umożliwiająca mi wywołanie funkcji w oryginalnej aplikacji
int __declspec( naked ) Send(BYTE type,LPCSTR format,...)
{
__asm
{
push ebp
mov ebp, esp
sub esp, 18h
jmp fback
}
}
void Thread (void* param)
{
while (true)
{
Send(0x02, "bs", 1, "main");
Sleep(500);
}
}
BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
{
if (reason == DLL_PROCESS_ATTACH)
{
_beginthread(Thread,0,NULL);
}
}