Pokaż wyniki od 1 do 5 z 5

Temat: Jak rozpoznać jaki to uchwyt?

  1. #1
    Użytkownik
    Dołączył
    01-02-2010
    Posty
    102

    Domyślnie Jak rozpoznać jaki to uchwyt?

    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?

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

    Domyślnie

    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.
    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!

  3. #3
    Użytkownik
    Dołączył
    01-02-2010
    Posty
    102

    Domyślnie

    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.

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

    Domyślnie

    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.
    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!

  5. #5

    Domyślnie

    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

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
  •