Jak rozpoznać jaki to uchwyt?

5.56

Użytkownik
Dołączył
Luty 1, 2010
Posty
102
Ostatnio pracuję nad pewną specjalistyczną i dobrze zabezpieczoną aplikacją(zwącą się "notepad") - chciałbym jakoś dostać się do editboxa przez dll-injection, potrafię nawet organoleptycznie je znaleźć(tzn.w pętli gdzie rzutuję inta na uchwyt to zazwyczaj 1400-1800), tylko jest problem - jak ten uchwyt znaleźć bez ingerencji użytkownika?
Bo moje dotychczasowe próby z "hasłami" i porównaniem GetWindowLong() spełzły na niczym, zresztą są dosyć... śmieszne.
Czy jest jakaś funkcja dzięki której znajdę "rodzica" danego uchwytu i typ kontrolki?(tu właśnie kiepścizna, bo editbox w notepadzie jest dzięki CreateWindowEx a nie na dialogu) lub czy można rozwiązać to jakoś inaczej? GetHandleType? IsThisHandleInNotepadAndIsItEditBox? :p
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
Sproboj znalesc uchwyty przez NtQuerySystemInformation z parametrem SystemHandleInformation. Albo jesli mozesz swojego kodu uzyc przed pojawieniem sie okna notatnika to mozesz patchowac kod. Albo poreversuj gdzie uchwyt jest zapisywany itp.
 

5.56

Użytkownik
Dołączył
Luty 1, 2010
Posty
102
Ja pieprzę, dobre trzy godziny siedziałem nad moimi genialnymi rozwiązaniami które i tak nie wypaliły, żeby teraz odpalić olly'ego i w <5 minut i znaleźć coś takiego:
Kod:
Address   Hex dump          Command                                                  Comments
01004767  |.  68 94170001   PUSH 01001794                                            ; UNICODE "Edit"
0100476C  |.  68 00020000   PUSH 200
01004771  |.  FF15 E0110001 CALL DWORD PTR DS:[<&USER32.CreateWindowExW>]
01004777  |.  3BC3          CMP EAX,EBX
01004779  |.  A3 38980001   MOV DWORD PTR DS:[1009838],EAX
A NtQueryInformation...wygląda ciekawie, ale undocumented api jest tak pokićkane, że SYSTEM_HANDLE_INFORMATION nie ma nawet na ntinternals, nie wspominając o MSDN oO w każdym razie dzięki! A sam temat do zamknięcia.
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
Oj uzycie SYSTEM_HANDLE_INFORMATION mozesz zobaczyc u mnie na blogu. Albo poczytac w "Windows NT/2000 Native Api Leksykon"
Tylko jesli chcesz pisac program nie tylko dla siebie to pamietaj o istnieniu ASLR`u ;) No i o tym ze kazda wersja notatnika moze sie roznic.
 

swap.context

Użytkownik
Dołączył
Październik 10, 2009
Posty
9
Do wylistowania okien potomnych jak i rodziców możesz użyć funkcji EnumWindows. Żeby upewnić się że listowane okno jest powiązane z danym wątkiem czy procesem wywołujesz GetWindowThreadProcessId. Wewnątrz funkcji zwrotnej z EnumWindows można ponownie wywołać podobną funkcję EnumChildWindows. Ostatnia rzecz to upewnienie się z jakiej klasy okna korzysta dana kontrolka GetClassName.

NtQuerySystemInformation zwraca jedynie informacje o obiektach i uchwytach obiektów jądra, do któtych "obiekty" podsystemu win32 nie należą! Jedynymi obiektami, które mylnie mogą być potraktowane jako obiekty win32 są obiekty Desktop i WindowStation, które w rzeczywistości są nazwanymi obiektami jądra. Podsystem tworzy coś w rodzaju globalnej tablicy uchwytów dla wszystkich "obiektów" - w tym okien. Idąc tym tropem dalej można bezpośrednio przeanalizować tą tablicę i wydobyć uchwyty danego typu, które stanowią indeksy w tej tablicy. Jako ciekawostke dodam, że mechanizm współdzielenia "obiektów" podsystemu win32 umożliwia dostęp do ciała obiektu z poziomu user mode - inaczej mówiąc nie trzeba wywoływać żadnych funkcji, które pobierają pewne dane po stronie jądra, kiedy te same dane można wydobyć po stronie użytkownika ;)

pozdrawiam,
swap
 
Do góry Bottom