Prozess beenden verhindern



  • naja ganz am anfang wollte ich das beenden des prozesses verhindern. dazu gab es aber offensichtlich keine lösung. da der guard aber sonst einfach durch prozess beenden beendet werden könnte musste ich halt nach ner neuen lösung suchen. und dabei kam ich mit hilfe der anderen darauf den prozess einfach zu verstecken, da das mit der koppelung offensichtlich auch nicht ohne weiteres lösbar war.

    im prinzip sind ich und die anderen eigentlich nur mögliche ansätze durchgegangen um das beenden des prozesses zu verhindern, und jetzt sind wir bei dem verstecken angekommen. das sollte jetzt eigentlich eine umsetzbare lösung sein, mit der ich mich morgen gleich mal beschäftigen werde.

    am anfang hat halt keiner gefragt warum ich das machen will, deswegen habe ich das nicht reingeschrieben, aber jetzt wissen es ja alle und wir können uns (hoffentlich) wieder dem eigentlichen problem zuwenden, denn jetzt sollte doch eigentlich jeder wissen dass ich keinen virus oder ähnliches schreiben will sondern einfach nur einen game-guard: wie versteckt man den prozess denn nun?

    nach wie vor geht es mir aber ausschließlich darum dassman den guard nicht einfach beenden kann, wie ich das hinkriege ist nicht so wichtig, wenn jemand also einen besseren vorschlag hat als den prozess zu verstecken nehme ich den gerne an. hauptsache ist dass man den prozess nicht einfach so beenden kann. wie ich das erreiche ist mir eigentlich relativ egal, der prozess darf auch gerne sichtbar bleiben(allein daran sieht man schon dass ich keinen virus schreiben will!), er soll nur nicht so einfach zu beenden sein.

    mfg,
    andi01.



  • andi01 schrieb:

    wie versteckt man den prozess denn nun?

    Hast du dich den mal meines Links bemüht?



  • noch nicht, mache ich aber gleich morgen.



  • schonmal bei google "Prozess verstecken" eingegeben?



  • ob dein ziel moralisch vertretbar ist, interessiert mich wenig. wenn ich nach
    dem hintergrund frage, denke ich an den technischen aspekt, was es bezwecken soll,
    nicht warum.

    andi01 schrieb:

    noch nicht, mache ich aber gleich morgen.

    du wirst doch schonmal auf die links geklickt haben ?!

    um einen prozess wirklich zu verstecken, gibt es viele verschiedene ansätze,
    jeder ist kompliziert und keiner ist wirklich sicher. die frage ist nur
    wie schwer es ist, ihn zu knacken. vllt reicht es dir ja 95% der
    nutzer draußen zu halten 😉 ist immernoch ganz ok.

    außerdem kommt es auch darauf an, wieweit du da gehen willst. von treiber bis
    setwindowshook ist fast alles dabei.

    ps:

    so wie ich das verstanden habe, ist bei deiner echse nur der server anders
    eingestellt. wenn ich zugang zu einer originalechse habe und den zielserver
    kenne. -> easy going. nix mit guarded echse.



  • andi01 schrieb:

    Äh. Wenn das Spiel nicht von dir ist, dann gibt es das auch irgendwo ohne deinen Guard. Wieso sollte ein User dann nicht einfach eine andere .exe verwenden?

    ganz einfach: weil die exe modifiziert werden muss damit sie sich aif diesen server connectet und nich auf nen anderen, und da achtet das server-team schon drauf dass es diese modifizierte exe nicht zum download gibt.

    Aber was hält mich davon ab mir die originale .exe zu besorgen, und selbst die IP da drinnen zu patchen?
    Ist das denn so schwer dass nur euer Server-Team das hinbekommt?

    Ich meine, die IP von eurem Server hat man ja schnell raus. Einfach eure originale .exe starten und dann in der Firewall gucken, oder mit netstat, oder im Router, oder ...

    Dann schnapp ich mir die original .exe, patche dort die IP gegen eure, und fertig. Wenn ich pöse bin stell ich die so modifizierte .exe sogar noch ins Netz, damit Leute die das selbst nicht hinbekommen trotzdem ohne euren Guard spielen können.



  • Würde sich guard.exe regelmäßig beim Server melden, dann müßte der ganze Kram auch nicht versteckt werden.



  • +gjm+ schrieb:

    Würde sich guard.exe regelmäßig beim Server melden, dann müßte der ganze Kram auch nicht versteckt werden.

    wahrscheinlich läuft die original-exe auch nur mit original-guard und der neue guard soll den originalen guard bekämpfen. wir werden es in 2 oder 3 seiten erfahren.



  • +gjm+ schrieb:

    Würde sich guard.exe regelmäßig beim Server melden, dann müßte der ganze Kram auch nicht versteckt werden.

    wireshark an -> dummy sender nachbauen. sollte ein externes programm simmulieren
    können. 😉



  • helferlein_tolazyforlogin schrieb:

    wireshark an -> dummy sender nachbauen

    -> aktuellste Musik senden. Sonst laufen die Zuhörer weg.



  • helferlein_tolazyforlogin schrieb:

    +gjm+ schrieb:

    Würde sich guard.exe regelmäßig beim Server melden, dann müßte der ganze Kram auch nicht versteckt werden.

    wireshark an -> dummy sender nachbauen. sollte ein externes programm simmulieren
    können. 😉

    Das kann man leicht durch Verschlüsselung verhindern.

    Der Angreifer kann dann natürlich mit Debugger + Disassembler kontern, und erst recht wieder einen Dummy-Guard schreiben.

    Das kann man aber im Endeffekt auch wieder verhindern, indem man den Guard einfach alle paar Tage wechselt. Das klingt zwar total beknackt aufwendig, könnte man aber automatisieren. Je nachdem wie gut der Angreifer ist (und wie wichtig es ihm ist), kommen dann noch ein paar weitere Iterationen, aber im Endeffekt kann man es glaube ich so hinbekommen, dass jedem die Lust am "Guard-Simulator" Schreiben vergeht.

    Bloss gibt es noch einen 2. Angriffsvektor: dem Guard eine Heile Welt vorspielen. Dazu lässt man den Guard entweder in einer VM laufen, bzw. auf einem anderen physikalischen PC. (Mit einem guten Router sollte es kein Problem sein dem Server vorzumachen dass der Datenstrom des Guards vom gleichen PC kommt wie der Datenstrom des Spiels).
    Oder aber man patcht den Guard einfach im Speicher, so dass die Betriebssystem-Funktionen, die zur "Überwachung" verwendet werden, einfach nie was melden, was der Guard als "böse" einstufen würde.

    Sich davor zu schützen halte ich persönlich für viel schwieriger.

    @andi01:
    Was soll der Guard denn überhaupt konkret überwachen?



  • ok es gibt viele wege einen prozess zu verstecken. die frage ist nur was ist einfacher zu bewerkstellgen? den prozess aus der liste löschen oder eine art ping mit dem server? bei dem ping wüsste ich sogar ungefähr wie's geht, mit sockets usw. .

    was ist einfacher zu bewerkstelligen? wobei der ping natürlich bedeutend sicherer wäre.

    mfg,
    andi01.



  • also ich hab das mit der connection zum server schonmal versucht: ich bin jetzt soweit dass ich ein socket vom client initialisiere und erstelle. nur mit dem befehl connect komme ich nicht so wirklich zurecht.

    hier ist schonmal mein code:

    #include<winsock2.h>//IMMER VOR WINDOWS.H INCLUDEN!!!
    #include <windows.h>
    #include <stdio.h>
    #include<iostream>
    #include<conio.h>
    using namespace std;
    
    #pragma comment( lib, "ws2_32.lib" )
    
    int startWinsock(void);
    
    int main()
    {
    	//Initialisierungen
      long rc=startWinsock();//sockets initialisieren
      SOCKET s;
    
      //abfrage ob initialisierung erfolgreich
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
    
      else
      {
        printf("Winsock gestartet!\n");
      }
      //Socket erstellen
      s=socket(AF_INET,SOCK_STREAM,0);
    
      //Erstellen überprüfen durch return value socket(...)!=INVALID_SOcKET
    
    if(s==INVALID_SOCKET)
    {
      printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
      return 1;
    }
    
    else
    {
      printf("Socket erstellt!\n");
    }
    
    //zeit zum klesen der konsolenausgaben lassen nd auf tastendruck warten
      getch();
    
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    wie geht das jetzt mit connect?

    (obiger code funzt schon).

    nur bei folgender erklärung aus einem tuitorial( http://www.c-worker.ch/tuts/wstut_op.php ) verstehe ich noch nicht ganz was ich bei den einzelnen parametern angeben muss:

    6. Verbindung zu einem Server herstellen

    Mit unserem erstellten Socket wollen wir nun auch eine Verbindung zu einem anderen Server Socket herstellen.
    Dazu verwendet man die Funktion connect:

    int connect (

    SOCKET s,

    SOCKADDR* name,

    int namelen

    );

    -s: hier muss man den Socket angeben den man verbinden möchte, logischerweise nehmen wir den vorhin erstellten Socket
    -name: hier muss ein Pointer auf eine gefüllte SOCKADDR Struktor gegeben werden, diese wird unten erklärt
    -namelen: hier muss die Grösse der SOCKADDR Struktur angegeben werden, also sizeof(SOCKADDR);

    hat vielleicht mal jemand ein kleines beispiel zu connect da?

    mfg,
    andi01.



  • andi01 schrieb:

    wobei der ping natürlich bedeutend sicherer wäre.

    Nein, überhaupt nicht. Den nachzumachen dauert ca. 5 Minuten (1 Minute Wireshark laufen lassen plus 4 Minuten kleinen Hack basteln).

    Schau dir mal Verschlüsselung und digitale Signaturen an. Damit kannst du es wirkungsvoller verhindern, dass jemand mitsnifft.

    Aber das schützt dich alles nicht, wenn jemand deine Guard.exe im RAM beobachtet.



  • bevor ich gleich mit verschlüsselung loslege sollte ich erstmal überhaupt eine verbindung zum server herkriegen, und ich habe mit connect() (siehe edit oben!) noch probleme 😞

    ich habe jetzt einfach den code aus dem tutorial kopiert:

    #include<winsock2.h>//IMMER VOR WINDOWS.H INCLUDEN!!!
    #include <windows.h>
    #include <stdio.h>
    #include<iostream>
    #include<conio.h>
    using namespace std;
    
    #pragma comment( lib, "ws2_32.lib" )
    
    int startWinsock(void);
    
    int main()
    {
    	//Initialisierungen
      long rc=startWinsock();//sockets initialisieren
      SOCKET s;
    
      //abfrage ob initialisierung erfolgreich
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
    
      else
      {
        printf("Winsock gestartet!\n");
      }
      //Socket erstellen
      s=socket(AF_INET,SOCK_STREAM,0);
    
      //Erstellen überprüfen durch return value socket(...)!=INVALID_SOcKET
    
    if(s==INVALID_SOCKET)
    {
      printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
      return 1;
    }
    
    else
    {
      printf("Socket erstellt!\n");
    }
    
    //Verbindung mit server herstellen
    memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
    
    addr.sin_family=AF_INET;
    
    addr.sin_port=htons(12345); // wir verwenden mal port 12345
    
    addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener
    
    rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
    if(rc==SOCKET_ERROR)
    
    {
    
      printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
    
      return 1;
    
    }
    
    else
    
    {
    
      printf("Verbunden mit 127.0.0.1..\n");
    
    }
    
    //zeit zum klesen der konsolenausgaben lassen nd auf tastendruck warten
      getch();
    
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    und erhalte folgende 10 fehler:

    1>Kompilieren...
    1>test2.cpp
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(46) : error C2065: 'addr': nichtdeklarierter Bezeichner
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(48) : error C2065: 'addr': nichtdeklarierter Bezeichner
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(48) : error C2228: Links von ".sin_family" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(50) : error C2065: 'addr': nichtdeklarierter Bezeichner
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(50) : error C2228: Links von ".sin_port" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(52) : error C2065: 'addr': nichtdeklarierter Bezeichner
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(52) : error C2228: Links von ".sin_addr" muss sich eine Klasse/Struktur/Union befinden.
    1> Typ ist ''unknown-type''
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(52) : error C2228: Links von ".S_un" muss sich eine Klasse/Struktur/Union befinden.
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(52) : error C2228: Links von ".S_addr" muss sich eine Klasse/Struktur/Union befinden.
    1>c:\dokumente und einstellungen\neubaum\desktop\programme c++\test\test\test2.cpp(56) : error C2065: 'addr': nichtdeklarierter Bezeichner
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Neubaum\Desktop\Programme c++\test\test\Debug\BuildLog.htm" gespeichert.
    1>test - 10 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    was ist denn bitte falsch? der code in einem tutorial sollte doch wohl stimmen ?!

    mfg,
    andi01.



  • "addr" ist nicht deklariert. Sollte wohl ein solches hier sein: http://msdn.microsoft.com/en-us/library/ms740496(VS.85).aspx

    Gib niemals was auf Tutorials. Die müssen nicht unbedingt fehlerfrei sein.

    Aber was mir gerade so in den Sinn kommt: Wenn du hier schon Probleme hast, wirst du keinen ernsthaften Guard schreiben, sondern eine Sicherung, die mein 8-jähriger Neffe umgehen könnte...



  • wenn du nochnicht mal ein tut zum laufen bekommst, wie willst du dann einen
    guard schreiben?

    und WAS soll der guard den verhindern?

    mit VirtualProtect/WriteProcessMemory, CreateRemoteThread, SuspendThread
    komme ich sehr weit 😉



  • Tsss schrieb:

    Es wird schon seinen Grund haben, warum er das so haben will.
    Also versucht nicht, euch künstlich einzureden, dass man sowas nie braucht.

    🙄

    hallo andi01 🙂



  • HomerJ666 schrieb:

    hallo andi01 🙂

    hi.

    da ich jetzt weiß woran das mit connect() liegt denke ich mal schon dass ich das zum laufen kriegen werde, wenn nicht kann ich ja nochmal fragen^^

    aber den prozess zusätzlich aus dem taskmanager zu verstecken wäre schon sinnvoll, oder? immerhin ist kein verbünftiger guard-prozess im taskmanager zu finden.

    mfg,
    andi01.



  • ok, ich habe jetzt connect() zum laufen gebracht (gibts zwar die fehlermeldung connect gescheitert, ist aber logisch da die angegebenen daten wie ip und port nicht stimmern 🙂 ).

    falls jemanden der code interessiert:

    Client: http://rapidshare.com/files/280949103/client_sockets_komplett_.cpp.html
    Server: http://rapidshare.com/files/280949467/server.cpp.html

    im übrigen ist dieses tutorial für anfänger in netzwerkprogrammierung nicht zu empfehlen 👎 ; die includen immer die windows.h vor der winsock2.h , vergessen immer #pragma comment( lib, "ws2_32.lib" ) zu schreiben und vergessen variablen zu initialisieren 😞

    edit: bei client- und serverprogramm bin ich fast fertig, ich muss nur noch die richtigen daten eintragen und einen testlauf machen mit send() und recv(). daran arbeite ich morgen weiter, bis jetzt läufts aber gut! 🙂

    sollte ich den prozess trotz dem ping verstecken?

    mfg,
    andi01.


Anmelden zum Antworten