to na poczatek API hooking

N

nBD

Gość
jakie znacie metody na hookowanie funkcji api, rowniez tych z bibliotek niezaladowanych na stale (innych niz kernel32, user32...). podobno jakis polski trojanek ma api hooking, nie pamietam ktory to. no i czy hookowanie funkcji zawsze wiaze sie z pisaniem driverow czy mozna to zrobic z ring3?
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Witaj nBD!

Chyba najpopularniejszymi metodami API hookingu sa: IAT, EAT, proxy dll, 5 bytes jmp... Dopiero zamierzam zaimplementowac API hooking w swoim projekcie ale uwazam, ze hooking via EAT jest najbardziej przydatny. Prawda jest to co wspomniales o filtrowaniu funkcji z poziomu kernelmode - lecz jeszcze tego nie robilem. Trojan korzystajacy z API hookingu? Pierwsze slysze i chatnie poznalbym jego nazwe
smile.gif


Kilka przydatnych linkow:
http://www.yates2k.net/syshook.html
http://www.codeproject.com/system/api_spying_hack.asp
http://www.codeproject.com/system/hooksys.asp
http://www.codeproject.com/system/kernelspying.asp
http://www.securiteam.com/securityreviews/5FP0E0AGAC.html
http://www.rootkit.com/newsread.php?newsid=272
http://www.rootkit.com/newsread.php?newsid=248
http://www.rootkit.com/newsread.php?newsid=151
http://www.chscene.ch/ccc/phrack/show.php@p=62&a=5
http://rootkit.host.sk/knowhow/hookingen.txt
http://madchat.org/vxdevl/vxmags/29a-4/Articles/29A-4.223
 
N

nBD

Gość
czesc fl3a

dzieki za linki. IAT i EAT (Export Adress Table?) nie wzbudzaja u mnie pozytywnych wibracji bo:
IAT - owszem, dobre rozwiazanie ale co z aplikacjiami ktore dopiero zostana uruchomione? te ktore juz chodza moga miec spokojnie nadpisane IAT-o ile nie jest zniszczony-exeprotectory niektore tak robia. jesli juz mowa o exeprotectorach i innych packerach to nie jestem pewien czy w spakowanej aplikacji mozna zastosowac IAT hooking.
EAT - hmmm mowisz o bibliotekach systemowych? w w9x mozna bylo skoczyc do r0 i tam sobie kernel32 nadpisac. nt (xp/2k) to juz inna historia. ciekaw jestem jak to wyglada w praktyce.
proxy dll - nie slyszalem o tym, na czym to polega? cos takiego jak SetWindowsHookEx?
5 bytes jmp- 0xEB,0x05 ?
smile.gif


ten trojan z API hooking to GGT http://www.haker.com.pl/forum/viewtopic.php?t=14758

a i jeszcze cos: jest taka biblioteka HoKo www.sistemo.has.it, pozwala na hookowanie dowolnej funkcji, niestety w wersji free mozna tylko 2 (albo 1) na raz, na szczescie da sie to obejsc, tyle ze we wlasnych projektach to "nie wypada" ripowac czyjegos kodu
smile.gif


tak czy inaczej dalej bede drazyl temat API hooking bo to ciekawe i przydatne. pozdro
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Ok Dzieki za wskazowki tez popracuje nad tym - postaram sie cos w kernelmode zmajstrowac w win 2k (tylko na nim pracuje) jak cos uzyskam to podziele sie z wami...
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Tu mozna poczytac o: http://www.windowsitlibrary.com/Content/356/09/1.html
Hooking Software Interrupts.

I jeszcze jedno pytanie odnosnie API hookingu. Do czego uzywacie API hookingu i jakiej techniki. Ja planowalem na poczatku zastosowac technike EAT do hookingu funkcji rejestru (np. ZwSetValueKey - SetValueKey) by moc nadzorowac co chce mieszac w rejestrze. Innym zastosowaniem hookingu mialo byc monitorowanie procesow. Jeszcze innym monitorowanie funkcji sieciowych...
 
N

nBD

Gość
Do czego: ukrywanie trojana w systemie, wpisow w rejestrze, pliku na dysku. moze byc tez przechwytywanie pakietow (prosty sniffer) na send()/recv()
 

Lechusky

Użytkownik
Dołączył
Styczeń 5, 2005
Posty
169
a wiec to sa te hook'i, jeszcze mam zbyt krotkie doswiadczenie jako programista ale moze zaciekawi was ten link
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Originally posted by nBD
czesc fl3a

dzieki za linki. IAT i EAT (Export Adress Table?) nie wzbudzaja u mnie pozytywnych wibracji bo:
IAT - owszem, dobre rozwiazanie ale co z aplikacjiami ktore dopiero zostana uruchomione? te ktore juz chodza moga miec spokojnie nadpisane IAT-o ile nie jest zniszczony-exeprotectory niektore tak robia. jesli juz mowa o exeprotectorach i innych packerach to nie jestem pewien czy w spakowanej aplikacji mozna zastosowac IAT hooking.
EAT - hmmm mowisz o bibliotekach systemowych? w w9x mozna bylo skoczyc do r0 i tam sobie kernel32 nadpisac. nt (xp/2k) to juz inna historia. ciekaw jestem jak to wyglada w praktyce.
proxy dll - nie slyszalem o tym, na czym to polega? cos takiego jak SetWindowsHookEx?
5 bytes jmp- 0xEB,0x05 ?
smile.gif


ten trojan z API hooking to GGT http://www.haker.com.pl/forum/viewtopic.php?t=14758

a i jeszcze cos: jest taka biblioteka HoKo www.sistemo.has.it, pozwala na hookowanie dowolnej funkcji, niestety w wersji free mozna tylko 2 (albo 1) na raz, na szczescie da sie to obejsc, tyle ze we wlasnych projektach to "nie wypada" ripowac czyjegos kodu
smile.gif


tak czy inaczej dalej bede drazyl temat API hooking bo to ciekawe i przydatne. pozdro
Sporo pytan ale to jest bardziej skomplikowane niz na to wyglada. Jesli chodzi o pytanko:
Originally posted by nBD+--><div class='quotetop'>CYTAT(nBD)</div>
jesli juz mowa o exeprotectorach i innych packerach to nie jestem pewien czy w spakowanej aplikacji mozna zastosowac IAT hooking[/b]
odpowiedz by brzmiala i tak i nie. Jezeli podejrzysz powiedzmy progsa spakowanego UPX-em to zauwazysz ze jakies funkcyjnki kernela sa importowane - loadlibrary, getprocadress itd. to juz wystarczy, ale sa protectory i pakery ktore robia z pliku taka sieczke, ze juz nic nie jest jasne wowczas ta prosta metoda nie wystarczy ale gdy zastosujesz techniki loaderow (z zczytywaniem pamieci - openprocess, readprocessmemory, writeprocessmemory itd..) to protektory i pakery miekna i mozesz techniki stosowac.

Originally posted by nBD@
EAT - hmmm mowisz o bibliotekach systemowych? w w9x mozna bylo skoczyc do r0 i tam sobie kernel32 nadpisac. nt (xp/2k) to juz inna historia. ciekaw jestem jak to wyglada w praktyce.
pod ring3 (tak naprawde ring0 pod winNT nie ma) mozesz spokojnie nadpisywac jaderko systemu - wlasciwie nie ma tu ograniczen. Wlasciwie jest tylko jeden problem atrybuty przestrzeni adresowej - moze cie czasem wykopsac - ale przeciez jest sposobik stosowany od dawna i nadal skuteczny - VirtualProtect i oczywiscie VirtualProtectEx, mozesz nawet grzebac w naglowkach plikow juz zmapowanych i inne cuda robic. Kernel mozesz nadpisywac.
<!--QuoteBegin-nBD

proxy dll - nie slyszalem o tym, na czym to polega? cos takiego jak SetWindowsHookEx?
5 bytes jmp- 0xEB,0x05 ?
smile.gif
Nie. Kazdy program ktory jest uruchomiony potrzebuje bibliotek - obowiazkowo systemowych a takze i swoich. Wezmy dla przykladu powiedzmy gadu-gadu. Stadardowo windows mapujac plik w pamieci uzupelnia biblioteki z katalogu system32. W rzeczywistosci NAJPIERW przeszukuje katalog w ktorym jest dany plik umiejscowiony. Wystarczy teraz (jak jestes trojanikiem) instalujac sie w systemie skopiowac plik powiedzmy winsock32.dll do katalogu kdzei jest plik gg.exe, pozmieniac funkcyjki i juz masz zhookowane importy tego dll-ka, mozesz robic co ci sie podoba. Oczywiscie zmiana funkcyjek bibliotek na poziomie binarek to ostatecznosc. Najlepiej skompilowac sobie pustego dll-ka z przekierowaniami wszystkich funkcyjek na oryginaly a przechwycic tylko te ktore potrzebujesz. Ja tak robie. Rozwiazzanie proste i cholernie skuteczne a ma jeszcze jedna zalete - plik zajmuje cholernie malo i nie musisz sie pocic, ze w oryginalnym dll-ku zabraknie miejsca - chyba przekierowanie to najlepsze rozwiazanie.
Uzywanie jakis bibliotek to marne rozwiazanie bo juz pewnie dawno odznaczane sa one w antywirach jako dangery.
 

goliat

Użytkownik
Dołączył
Styczeń 16, 2005
Posty
23
jonny: dobre uwagi,
pomysl ze jest stub dll'em jest faktycznie fajny ale w rzeczywistosci nie ma racji bytu.

Originally posted by Jonny+--><div class='quotetop'>CYTAT(Jonny)</div>
tak naprawde ring0 pod winNT nie ma[/b]
hmm, to jest jakas teoretyczna dywagacja, bo nie rozumie za bardzo :/

<!--QuoteBegin-Jonny

pod ring3 mozesz spokojnie nadpisywac jaderko systemu - wlasciwie nie ma tu ograniczen. Wlasciwie jest tylko jeden problem atrybuty przestrzeni adresowej - moze cie czasem wykopsac - ale przeciez jest sposobik stosowany od dawna i nadal skuteczny - VirtualProtect i oczywiscie VirtualProtectEx, mozesz nawet grzebac w naglowkach plikow juz zmapowanych i inne cuda robic. Kernel mozesz nadpisywac.
moze sie myle (wole zapytac), ale czy piszac "jaderko", "Kernel" masz na mysli kernel32.dll czy ntoskrnl.exe bo zawuwazylem ze ludzie czesto, gesto dosc dwuznacznie formuluja to pojecie.

jakbym cos namieszal to zwalam to na goraczke :|
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Hej goliat
smile.gif


Naturalnie ze chodzi o kernel32.dll
<

A z ta "jakas teoretyczna dywagacja" to chyba chodzilo o dll-ki?! W 9x byly one wspolne dla wszystkich procesow natomiast w NT kazdy proces mapuje sobie te biblioteki zatem z poziomu r3 moze uzywajac VirtualProtect nadpisac je.
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Originally posted by goliat+--><div class='quotetop'>CYTAT(goliat)</div>
jonny: dobre uwagi,
pomysl ze jest stub dll'em jest faktycznie fajny ale w rzeczywistosci nie ma racji bytu.

Originally posted by Jonny@
tak naprawde ring0 pod winNT nie ma
hmm, to jest jakas teoretyczna dywagacja, bo nie rozumie za bardzo :/

<!--QuoteBegin-Jonny
pod ring3 mozesz spokojnie nadpisywac jaderko systemu - wlasciwie nie ma tu ograniczen. Wlasciwie jest tylko jeden problem atrybuty przestrzeni adresowej - moze cie czasem wykopsac - ale przeciez jest sposobik stosowany od dawna i nadal skuteczny - VirtualProtect i oczywiscie VirtualProtectEx, mozesz nawet grzebac w naglowkach plikow juz zmapowanych i inne cuda robic. Kernel mozesz nadpisywac.
moze sie myle (wole zapytac), ale czy piszac "jaderko", "Kernel" masz na mysli kernel32.dll czy ntoskrnl.exe bo zawuwazylem ze ludzie czesto, gesto dosc dwuznacznie formuluja to pojecie.

jakbym cos namieszal to zwalam to na goraczke :|[/b]




Originally posted by goliat+--><div class='quotetop'>CYTAT(goliat)</div>
jonny: dobre uwagi,
pomysl ze jest stub dll'em jest faktycznie fajny ale w rzeczywistosci nie ma racji bytu.[/b]
Nie bardzo rozumiem ???


Originally posted by goliat@
<!--QuoteBegin-Jonny

tak naprawde ring0 pod winNT nie ma

hmm, to jest jakas teoretyczna dywagacja, bo nie rozumie za bardzo :/
Dywagacja ??? Polecam tutorki Iczelion'a na temat zdaje sie vxd'kow - tam jest to dosc fajnie wytlumaczone. Przechodzac do "ring0" pod w2k tak naprawde dostjesz prawa do zapisu do przestrzeni adresowej programow itd.. ale tylko w pewnych granicach to nie jest czyste rin0 bo takiego pod NT-kami nie ma - tak byly projektowane zeby nie bylo. My ogolnie nazywamy to ring0 bo tak sie przyjelo. Jeszcze wiecej w opisie metody z0mbie'go na ring0 pod w2k.


Originally posted by goliat
moze sie myle (wole zapytac), ale czy piszac "jaderko", "Kernel" masz na mysli kernel32.dll czy ntoskrnl.exe bo zawuwazylem ze ludzie czesto, gesto dosc dwuznacznie formuluja to pojecie.
Mam na mysli oczywiscie kernel32.dll choc w rzeczywistosci jaderko systemu jest wieloplikowe (w trybie 32 bitowym: kernel32dll (wlasciwie to tylko zestaw bibliotek), HAL no i oczywiscie NTOSKRNL) no jeszcze mozna by umownie nazwac jadrem systemu w trybie 16 bitowym procesora aplikacje ktora wprowadza procek w wirtualny tryb 32 bitowy (wiekszosc ludi peewnie nie wie ze ich procki tak naprawde sa 16 bitowe a tryb 32 bitowy jest tylko trybem virtualnym) ale z tym nazewnictwem to roznie pisza.
 

goliat

Użytkownik
Dołączył
Styczeń 16, 2005
Posty
23
z tym kernelem to domyslalem sie o co Wam chodzi, ale wolalem spytac.
a noz znacie jakac metode nadpisywania jadra z ring3 :mrgreen:

Originally posted by Jonny+--><div class='quotetop'>CYTAT(Jonny)</div>
<!--QuoteBegin-goliat
jonny: dobre uwagi,
pomysl ze jest stub dll'em jest faktycznie fajny ale w rzeczywistosci nie ma racji bytu.
Nie bardzo rozumiem Pytajnik?
[/b]
"stub dll" to jest wlasnie nazwa na technike podstawiania dll'ki ze spreparowanymi eksportami
<
chodzilo mi o to ze sama technika jest dosc sprytna (przez co ciekawa), ale tak jak pisales malo uzyteczna w realu przede wszytkim przez wzglad na latwe wykrycie.

piszesz ze tak naprawde w win2k nie ma ring0.
dla mnie wladza w przestrzeni zarezerwowanej dla jadra czyli powyzej 2GB(lub 3GB w zaleznosci od konfiguracji systemu), nie wspomne juz o mozliwosci dostepu do przestrzeni adresowej kazdego z procesow w user mode to jest wlasnie ring0.
jezeli moj driver moze przechwytywac przerwania, lub miec uprzywilejowany (czyt: nie sprawdzany przez OS) dostep do dowolnego urzadzenia podlaczonego do komputera - dla mnie to jest wlasnie ring0.

a jezeli czegos brakuje (tego jestem ciekaw)? i dlatego w ntkach ma nie byc "czystego" ring0, to wlasnie jest wedlug mnie teoretyczna dywagacja
<


ogolnie: instnieja standardy, ktore z przyczyn praktycznych(czyt: inzynieria oprogramowania wedlug Billa), nie sa implementowane
smile.gif
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
No masz racje z tym nazewnictwem to zostaje troszke z tylu - ale chyba tak zawsze mialem
smile.gif
smile.gif
smile.gif
(brak netu na codzien????). Troszke jednak jest roznicy ring0 pod win9x to praktycznie 32 bitowy RE a ten "ring0" pod nt to wlasciwie 32 p mode (protected mode) z uprawnieniami ale to juz szczegoly. Ring 0 pod w2k jak opisal z0mbie to chyba az takich duzych uprawnien jak opisales nie daje.
 

omega_red

Użytkownik
Dołączył
Grudzień 15, 2005
Posty
3
Troszke jednak jest roznicy ring0 pod win9x to praktycznie 32 bitowy RE a ten "ring0" pod nt to wlasciwie 32 p mode (protected mode) z uprawnieniami ale to juz szczegoly. Ring 0 pod w2k jak opisal z0mbie to chyba az takich duzych uprawnien jak opisales nie daje.[/b]
Ring0 to ring0, wszędzie jest taki sam. Po prostu w 9x zmiana trybu r3->r0 była bardzo prosta. W NT w założeniach nie da się tego zrobić. W praktyce jest oczywiście inaczej, ale to już wynik dziur w kernelu, a nie samej jego architektury.

Ring0 = możliwość wykonywania instrukcji procesora określonych jako "privileged", oraz dostęp do wszystkich obszarów pamięci. Ring3 = uprzywilejowane instrukcje powodują access violation, tak samo jak odwołania do pamięci określonej deskryptorem z DPL < 3.
 
Do góry Bottom