Pokaż wyniki od 1 do 2 z 2

Temat: [TUTORIAL]Kilka słów o syscallach

  1. #1
    Dawni Moderatorzy Avatar grzonu
    Dołączył
    26-12-2006
    Skąd
    Gdansk, Poland, Poland
    Posty
    1 392

    Domyślnie [TUTORIAL]Kilka słów o syscallach

    No to chciałem napisać arta o tym jak windows wywołuje funkcje do wywołania których konieczne jest wejście w tryb

    jądra do którego program usera który jest w ring3(sterowniki i jądro sa w ring0) nie ma dostepu. Mechanizm ten nosi

    nazwe syscall. Przedstawie jak wyglada przykładowe wywołanie np. ZwTerminateProcess.

    Kod:
    PUSH 0 
    PUSH -1     ;rzucamy na stos parametry funkcji
    CALL TERM   ;wywolujemy ZwTerminateProcess
    RET
    TERM:
    MOV EAX,101h ;do eax kopiujemy numer funkcji (tutaj jest to numer ZwTerminateProcess)
    CALL SYS     ;wywolujemy syscall (tak samo wyglada funkcja KiFastSystemCall)
    SYS:
    MOV EDX,ESP
    SYSENTER     ;tu nastepuje przejscie do trybu jądra
    RET
    Widzimy wiec ze nie jest to trudne i wydaje sie bardzo wygodne w roznych shellcodach itp ale jak zawsze jest jakies

    ale no wiec w tym przypadku oczywiscie tez jest i jest nim to ze numer funkcji jest różny w kazdej wersji systemu.
    Mamy 2 opcje albo probujemy dynamicznie pobrac z ZwTerminateProcess który jest w ntdll ale tu musimy znalesc jej

    adres. Metoda ta jest dobra jesli potrzebujemy kompatybilnosci z KAZDYM systemem. jesli potrzebujemy

    kompatybilnosci tylko z wybranymi to jest inna metoda na pobranie wersji systemu i dopasowanie odpowiedniego numeru

    syscalla bez uzywania jakiegokolwiek wywolania API.

    Kod:
    MOV EAX,DWORD PTR FS:[18h]	;do eax kopiujemy adres TEB
    MOV EDI,DWORD PTR DS:[EAX+30h]	;do edi kopiujemy adres PEB
    MOV EBX,DWORD PTR DS:[EDI+A4h]	;do ebx kopiujemy major version number
    MOV ECX,DWORD PTR DS:[EDI+A8h]	;do ecx kopiujemy minor version number
    przykladowo dla XP wersja to 5.1 wiec major = 5 a minor = 1 wiec ebx = 5 a ecx = 1
    numery innych systemow znajdziemy w MSDN

    Teraz mozemy juz dopasowac numer zaleznie od wersji jaka chcemy.

    Jakie sa inne zalety?
    -Omijamy w ten sposob wszystkie hooki zalozone w user-mode.
    -Nie musimy szukac adresu potrzebnej nam funkcji.
    -Kod dzieki temu jest mniejszy

    Teraz mała uwaga dla piszacych sterowniki.
    Dodam na koniec ze numer funkcji jest indexem danej funkcji w tabeli SSDT (numery 1-1000) i ShadowSSDT(1000+).
    Obie te tablice znajdują się w przestrzeni adresowej jądra więc nie mamy do niej dostepu z User-mode.
    W tablicy SSDT znajduja sie funkcji eksportowane przez ntoskrnl.exe(jądro) a w ShadowSSDT funkcje eksportowane

    przez win32k.sys gdzie znajduja sie funkcje zwiazane z okienkami,wejsciem,wyjsciem. SSDT jest eksportowane przez

    jadro i nie ma wiekszych klopotow z jego znalezieniem za to ShadowSSDT nie jest eksporotwane i metode na jej

    znalezienie wymyslil Alexander Volynkin(http://www.volynkin.com/sdts.htm)

    Tablice syscalli dla poszczególnych systemów:
    http://j00ru.vexillium.org/win32k_syscalls/
    http://www.metasploit.com/users/opcode/syscalls.html

    Artykuł pochodzi ze strony http://grzonu.pl

    //Do innych modów: nie przenoscie do tutoriali narazie
    Filmy online---Grzonu Blog

    1) Moje gg to nie pomoc techniczna w obsludze keyloggerow!!! Na gg i pw pomagam tylko w kwestiach organizacyjnych forum. Masz problem to pisz na forum.
    2) Nie zajmuje sie malware a uprzedzajac pytanie "czemu?" - bo taki mam kaprys!

  2. #2
    Użytkownik (R) Avatar D.F.
    Dołączył
    04-11-2009
    Skąd
    Polska
    Posty
    238

    Domyślnie

    Prosto opisane, łatwo zrozumieć. Są podstawy by sięgnąć później do artykułów technicznych, nawet obcojęzycznych.

    Czekam na kolejne artykułu o programowaniu niskopoziomowym, może coś o pisaniu sterowników?

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •