Zapobieganie Code Injection i Dll Injection
Dzisiaj zajmiemy się zapobieganiem Code Injection i Dll Injection.
Obie te techniki łączy wspólna rzecz – obie tworzą zdalny wątek w aplikacji. Po wywołaniu funkcji CreateRemoteThread która ma utworzyć wątek w drugiej aplikacji, wywołanie trafia do jądra, które w aplikacji w której wątek ma powstać tworzy wątek i startuje go w funkcji KiUserApcDispatcher ale jak powiedział mi j00ru nie jest bezpiecznie modyfikowac ta funkcje bo kozysta z niej bardzo wiele innych funkcji. Zamiast tego lepiej modyfikowac LdrInitializeThunk która jest później wywoływana. No wiec zalozymy sobie hooka na ta funkcje.
Pierwsze 5 bajtów nadpiszemy skokiem do naszej funkcji która zamknie nowo powstały wątek zanim kod zostanie wykonany.
Kod naszej funkcji:
1 2 3 4 5 6 | void __declspec(naked)wrap(void) { printf("Killing thread: %d\n",GetCurrentThreadId()); TerminateThread(GetCurrentThread(),0); //zamykamy wątek __asm ret } |
No to nadpiszmy kod funkcji.
1 2 3 4 5 6 7 8 | x=GetProcAddress(GetModuleHandle("NTDLL"),"LdrInitializeThunk"); //pobieramy adres funkcji DWORD old; VirtualProtect(x,5,PAGE_EXECUTE_READWRITE,&old); // ustawiamy prawa do zapisu memcpy(x,"\xE9",1); //nadpisujemy pierwszy bajt(0xE9 to jmp) DWORD addr=(DWORD)wrap-(DWORD)x-5;//obliczamy przesuniecie naszej funkcji wzgledem orginału //aby wykonac skok zgodnie ze wzorem offset=punkt_docelowy-miejsce_do_nadpisania-5 memcpy((char*)((char*)x+1),&addr,4);//kopiujemy tam nasz offset VirtualProtect(x,5,old,&old);//ustawiamy spowrotem prawa |
Teraz mozemy sprobowac utworzyc zdalny wątek w naszej aplikacji. Wątek utworzy się lecz zostanie odrazu zabity.
Jeśli chcemy w naszej aplikacji używać wątków powinnismy napisać funkcje która najpierw przywróci orginalne bajty następnie wywoła CreateThread po czym od nowa nadpisze skokiem. To juz pozostawiam chętnym.
Po tym zabiegu Olly także nie bedzie potrafił się attachnąć do naszego procesu.
To chyba tyle na dziś
//EDIT
Właśnie hxv poinformował mnie że można attachnac sie Ollym ale z uzyciem OllyAdvance
//EDIT2
Przygotowałem dll`ke która będzie chroniła nasza aplikację odrazu po wczytaniu jej do programu(LoadLibrary)
DLL`ka
A tak dodatkowo chciałbym podziękować Gynvaelowi Coldwindowi bo prawdopodobnie bez jego pomocy ten i kilka innych postow zakonczyloby sie po 3 wyrazach

Witam Grzona. Mam pytanie odnośnie GGsniffer. Otóż przechwytuje on hasła niby w SHA-1, ale nie da się tego w żaden sposób odkodować, czy jest może jednak jakiś sposób, aby to zrobić?
jakims crackerem. Szczerze to nie interesowalem sie tym czy istnieja jakies crackery do SHA-1 ale raczej tak
Istnieje pełno do SHA-1, ale żaden nie działa
( Lipa z tym trochę.
Z tymi hasłami to jest jednak lipa. Sprawdzałem te hashe na swoim profilu to jednak jak się okazuje za każdym moim logowaniem te hashe były inne (logowałem się tym samym hasłem).
Hasze w GG są solone, sól jest w pakiecie powitalnym.
hxv, możesz dokładniej wyjaśnić o co chodzi? Bo trochę nie zrozumiałe Twojego posta
http://toxygen.net/libgadu/protocol/#ch1.3 – po podłączeniu się do serwera odsyła on pakiet powitalny (GG_WELCOME) z solą (ziarnem/seedem) którą należy „dokleić” do hasła, za każdym razem sól jest inna więc inny też będzie wysyłany hash.
A w jaki sposób należy to połączyć, żeby otrzymać pełne hasło?
Myślę że sposób opisany przez Drega na rootkit.com jest znacznie mniej inwazyjny i efektywniejszy – choć nie wiem co powie Olly nań.
( o tu: http://www.rootkit.com/blog.php?newsid=934 )
Hmm nie zwrocilem na ten wpis wczesniej uwagi a wydaje sie ciekawe
przetestowalem i dziala tez. A olly nie potrafi watku w nim utworzyc.
[...] [...]