Serwer

sinis

Użytkownik
Dołączył
Wrzesień 3, 2006
Posty
958
No to tutaj podzielimy się robotą. Najlepiej, żeby każdy wybrał coś dla siebie co da radę obkodzić. Trochę słabo u mnie z WinAPI (poszedłem w stronę Linuksa i Qt4) także wolałbym się zająć czymś niewymagającym owej biblioteki.

Kod:
Ogólny zarys projektu:
- opcje trojana
- komunikacja (wiadomości klient-serwer)
- konfiguracja (klasa konfiguracji i dane w niej zawarte)

Projekt serwera:
- protokół (XMPP)
- sposób instalacji (ścieżka [C:\%userprofile%\<podawane przy konfiguracji>] - ewentualnie podpięcie pod jakiś inny program z autostartem, usługa)
- czy ma działać za podaniem hasła (jak coś to hasło hashowane dwukrotnie w md5;P)
- budowa kodu serwera (Proponuję stworzyć klasę Server, a do niej wrzucić wszystkie nasze metody [później ustalimy co i jak])
- funkcje serwera (żeby szło się podzielić robotą i jako tako zgrać;) )

No to po kolei:
Opcje trojana - proponuję żeby każdy podał kilka swoich takich, żebyśmy dali radę je obkodzić. Jeśli jakaś opcja wydaje się być zbędna, albo coś to warto to omówić. Kilka opcji z mojej strony:
- przesyłanie plików klien-serwer i na odwrót (sendFile, downloadFile)
- wyłączenie/restart kompa (shutdownPC, restartPC)
- pobiera tytuł aktywnego okna (getWindowTitle)
- chowa aktywne okno (hideActiveWindow)
- najróżniejsze komunikaty (msgBox)
- uruchamianie plików/programów/stron internetowych (run)
- instalacja trojana jako usługi

Propozycje Gondollera:
- harvest danych o sprzęcie na którym został zainstalowany; (sysInfo)
- przeglądanie dysków; (browse)
- zarządzanie procesami w systemie; (startProcess, stopProcess,
- zarządzanie rejestrem systemowym; (addKey, removeKey, editKey)
- pobieranie haseł znajdujących się w pamięci podręcznej; (getPasswdFromCache)
- przechwytywanie pakietów; (getPacket)
- możliwość użycia pluginów ( w przyszłości tongue.gif)
- hook na klawiaturę /może także mysz; (keybHook, mouseHook)
- możliwość pacnięcia screena i wysłania razem z logami na maila/ftp (screenPlease, sendLogs)
- możliwość spięcia zainfekowanych komputerów jako zombi - może sie przydać tongue.gif

Propozycje THC_Flowa:
- ukrywanie, blokowanie, zamykanie (itd) okien. (hideWindow, blockWindow, closeWindow)

Propozycja adikx'a:
- sniffing gg (sniffGG)

Komunikacja - przypuszczam, że zostaniemy przy XMPP. Trzeba będzie przetwarzać trochę tekstu, ale zarwie się noc i powinno wszystko działać. Wiadomości przesyłane między klientem, a serwerem będą z góry ustalone jako polecenia "ukryjOkno" (ew. jedziemy po angielsku - "hideWindow"). Ustalimy wszystkie jak uzgodnimy listę opcji. Ewentualnie dojdą kolejne przy kodzeniu.

Konfiguracja - obiekt klasy Config (nie wiem jak to będzie w Delphi) zapisany na końcu pliku nowego serwera. Wg. mnie powinien zawierać pola:
- isPassword:bool - serwer ma reagować na hasło, czy od razu udostępniać opcje "zabawy"
- password:char*/string - 2x md5-owane hasło podane przy konfiguracji, jeśli nieaktywne - puste
- fileName:char*/string - nazwa pliku w C:\%userprofile%\. Myślę, że %userprofile% nadaje się najlepiej, ponieważ większość userów ma tam dostęp, nawet jeśli posiadają jakieś ograniczenia (np. w szkole).[/b]

Moja propozycja co do kodu serwera wygląda tak (ot moje przyzwyczajenia):
Mamy plik main.cpp, owy plik includuje plik ftstrojan.cpp, któryż to zawiera implementacje metod klasy FTSTrojan zawartej w pliku ftstrojan.h. Każdy pisze swój kod w pliku z <nick>.h. Potem wszystkie te pliki są includowane do ftstrojan.cpp.

Serwer po uruchomieniu otwiera siebie samego (argv[0]), ładuje do obiektu klasy Config dane, które powinny odpowiadać za konfigurację, sprawdza, czy te dane są spójne (np. poprawna konfiguracja powinna zawierać char confTest[] = "FSTSCT"). Potem serwer sprawdza czy jest zainstalowany w systemie, jeśli nie - instaluje się, inaczej czyni co ma czynić. Nasłuchuje na klienta, sprawdza konfigurację, czy nie wymaga podania hasła, jeśli tak odbiera od klienta hasło jednokrotnie zhashowane w md5, hashuje po raz drugi, porównuje hashe i odsyła klientowi odpowiednią wiadomość. Jeśli hasła nie ma to po prostu wysyła powitanie. Myślę, że sockety mogłyby pracować w trybie synchronicznym. Z asynchronicznym nie miałem do czynienia (poza Qt4) także nie znam ich możliwości.

PS. Te napisy w nawiasach (koło funkcji trojana) można potraktować jako ciągi znaków wysyłane przez klienta do serwera i nazwy metod.
 
Do góry Bottom