Pokaż wyniki 1 do 9 z 9

Temat: Zabezpieczenie pamieci aplikacji

  1. #1
    Zarejestrowany
    Nov 2009
    Postów
    30

    Domyślnie Zabezpieczenie pamieci aplikacji

    Witam. Mam pewien problem, ma ktos jakis pomysl jak zabezpieczyc pamiec aplikacji przed dostepem do niej.
    Chodzi mi dokladnie o napisanie jakiejs dll, ktora podczepiona pod aplikacje wykryje ze ktos probuje z zewnatrz zmienic jej pamiec i w razie czego wylaczyc aplikacje.

    Przykladem moze byc uzywanie programow typu cheat engine/art money. Przypominam ze programy tego typu przeszukuja pamiec aplikacji a potem zwiekszamy sobie np ilosc pieniedzy w grze manipulujac jakas zmienna w pamieci.

    Nie mam wogole pomyslu jak wykrywac chocby w c++ czy ktos czasem nie probuje sie podpiac do pamieci.

    Bylbym bardzo wdzieczny, gdyby jakis pro rzucil mi chocby jakies naprowadzenie na rozwiazanie

  2. #2
    Zarejestrowany
    Jan 2009
    Postów
    230

    Domyślnie

    w sumie szkoda czasu aby sie w to bawic bo skoro ktos potrafi zamienic bajty w procesie (sekcjach danych lub kodu) moze spokojnie usunac twoje 4 linijki kodu.

    rootkit.com
    Grzonu Blog


  3. #3
    Zarejestrowany
    Nov 2009
    Postów
    30

    Domyślnie

    nie, poniewaz kazda modyfikacja kodu zmienia checksumie
    aplikacja sie laczy z serwerem, ktory porownuje te checksumy, owszem jest jakis sposob na ominiecie tego, ale w decelowej grupie uzytkownikow potrafi to moze 0.0001% osob
    Ostatnio edytowane przez rakoo : 05-30-2010 - 13:04

  4. #4
    Zarejestrowany
    Oct 2009
    Postów
    19

    Domyślnie

    Z poziomu ring3 będzie to ciężko zrobić. Musisz ustawić atrybuty dla strony/bloku pamięci którą chcesz chronić. Są jeszcze inne, bardziej "sprytne" sposoby w celu dokonania tych zmian ;p. W celu dostępu do danych w pamięci inny program musi przejść takie kroki jak sprawdzenie przez procesor dostępu programu do konkretnej pamięci czyli: stos, blok, strona. Do każdego z tych 3 zasobów pamięci dochodzi sprawdzanie bitów i ringów, tj porównywanie ringu programu który chce dostać się pamięci i ringu pamięci w stronach są bity, 0 i 1 administrator i użytkownik. Można się tym pobawić, ale nie jest to łatwe do zrobienia .
    Ostatnio edytowane przez Prick : 05-31-2010 - 13:16

  5. #5
    Zarejestrowany
    Nov 2009
    Postów
    30

    Domyślnie

    probowalem z VirtualProtect ale cos czuje ze latwo bedzie to oszukac,
    moge walczyc z wiatrakami piszac dllke skanujaca procesy i szukajacych dumpow offsetow "zakazanych" aplikacji do modyfikacji pamieci typu cheatengine czy artmoney, ale takie nastawienie mija sie z celem, poniewaz baza takiego cheatu bylaby coraz ciezsza, dodatkowo takie rozwiazanie latwo obejsc programami do ukrywania procesow,

    glownie chodzi mi o ochrone jednego, jedynego offsetu (4 bajtowy INT bodajze)

    jednym slowem jestem w dupie ^ ^ dlatego pisze tutaj, moze ktos wpadnie na jakis efektywny, szalony pomysl
    Ostatnio edytowane przez rakoo : 06-07-2010 - 20:35

  6. #6
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie

    to nie problem . Przeczytaj swoje PM.

  7. #7
    Zarejestrowany
    Nov 2009
    Postów
    30

    Domyślnie

    A gdyby program byl wykonywany z poziomu nizszego Ringa, to czy VirtualProtect mialby prawo zdjac oslone?
    Czytalem gdzies w internecie ze wykorzystujac kilka dziur w Windowsach da sie nawet swoj program ustawic na dzialanie w Ring0. Wnioskuje ze niektore wirusy musza dzialac podobnie

    W sumie moglbym np ustawic co jakis czas sprawdzanie segmentu kodu, czy nie zostal zmodyfikowany, albo chociaz pojedynczych offsetow - poczatkow procedur, czy nie ma tam JMPow w jakies dziwne miejsca. Ale nie chce robic offtopu - chodzi mi niestety o segment danych, a jego wartosci sie zmieniaja

  8. #8
    Zarejestrowany
    Dec 2009
    Postów
    164

    Domyślnie

    jesli inny soft zechcialby modyfikwowac twoja pamiec musi najpierw wczytac twoją (najprawdopodobniej) dll do swojej pamięci.
    zazwyczaj podczepianie wygląda tak:
    CreateRemoteThread - tworzenie wątku w którym ładuje liba do pamieci i tworzy odrebny watek do aplikacji
    LoadLibrary - Wczytywanie dll do pamięci,tym samym modyfikacja pamięci.
    Aby temu zapobiec najlepiej założyć hook na funkcję LoadLibrary
    lub
    sprawdzać dokładne adresy spod IAT w twoim software jeśli się nie zgadza odrzucasz takie odwołanie do procedury LoadLibrary.
    przy tym dodam zeby sprawdzac argumenty LoadLibrary.

    Przypominam że nie musi to byc LoadLibrary tylko kilka innych funkcji jak chocby spod ring0
    lista procedur Nt..

    //
    jak zwykle polecam mój software do takich rzeczy.
    //
    Ostatnio edytowane przez g3t_d0wn : 01-29-2011 - 17:32

  9. #9
    Zarejestrowany
    Dec 2009
    Postów
    11

    Domyślnie

    Najskuteczniejszym sposobem bedzie filtrowania proby otwarcia procesu/watku oraz duplikacji ich uchwytow z procesu csrss, do tego technika uniemozliwiajaca zaladowanie dowolnej biblioteki za pomoca windows hook'ow, przefiltrowanie komunikatow do okien jesli proces korzysta z okien. Zeby to wszystko w miare sensownie wspolgramo niezbedna jest implementacja na poziomie kernel mode - dla obeznanych w temacie - bulka z maslem

Zasady Postowania

  • 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
  •  
Subskrybuj