Prozess beenden verhindern



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



  • irgendwie geben die programme nicht das aus was sie sollen:

    Server schrieb:

    Winsock gestartet!
    Socket erstellt!
    Socket an port 12345 gebunden!
    accept socket ist im listen modus

    bis dahin ist alles ok. wenn ich nun dern client starte sollte der server ausgeben "neue verbindung akzeptiert" oder zumindest eine fehlernachricht, der client sollte ausgeben "verbunden mit [IP]"; leider geben beide weder das gewünschte noch die fehlermeldungen aus 😞

    die ausgabe des servers bleibt gleich und der client gibt folgendes aus:

    Client schrieb:

    Winsock getartet!
    Socket erstellt!

    obiger quellcode ist noch der aktuellste. was mache ich denn falsch dass die verbinding nicht zu stande kommt? 😕
    ich habe alles so gemacht wie im tutprial beschrieben! muss ich erst über send() und recv() nachrichten schicken damit eine verbindung aufgebaut wird? und ist es egal welchen port ich angebe?

    danke schonmal für die hilfe,
    andi01.



  • willst du jetzt socket-programmierung betreiben, oder einen gameguard schreiben?

    a.) sockets -> neuer thread
    b.) gameguard -> weiterschreiben

    nicht jeder gameguard muss unerkannt laufen. viele programme hängen von einem
    anderem programm ab. und das sieht man auch recht deutlich im taskmanager.



  • es geht mir nach wie vor ausschließlich um den guard. nur wenn man nicht weiß dass der einen ping mit dem server macht ist diese methode gegen potenziellle hacker wenigstens einigermaßen erfolgsversprechend da ich mit dem verstecken nicht so recht weiterkomme. das mit dem ping ist auch fast geschafft, es gibt da nur noch obiges problem 😞 , mit dem ich nicht weiterkomme.

    weiß vielleicht jemand woran das liegt/wie ich es behebe?

    edit: ihr habt recht, dazu mache ich besser einen 2.thread auf.

    aber trotzdem komme ich mit dem verstecken nicht recht voran.

    mfg,
    andi01.



  • andi01 schrieb:

    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 wer sagt, daß man das anders machen muss?



  • bei MS Visual Studio C++ 2008 Express Edition, das ich verwende, muss man das 😃

    übroigens habe ich die verbindung jetzt mithilfe des neuen threads hingekriegt!
    nun kann ich/können wir uns wieder dem verstecken zuwenden!

    oder sollte ich dafür langsam auch mal nen neuen thread aufmachen?

    mfg,
    andi01.



  • Kauf dir 'n packer, wie z.B:

    noobyprotect
    themida
    winlicense

    Damit packst du dann den game client, und fertig. Das hält jeden kiddie fern, der denkt dass er weit kommt.Falls du kein geld hast, tja pech gehabt.



  • andi01 schrieb:

    bei MS Visual Studio C++ 2008 Express Edition, das ich verwende, muss man das 😃

    Das glaube ich nicht. Im übrigen kann kein Tutorial-Schreiber wissen, was für einen Compiler/IDE Du benutzt.



  • man muss es nicht verwenden, aber es ist eine sehr schnelle lösung mal eben
    die lib dazuzunehmen 😉

    für das verstecken:

    was soll der guard erreichen?
    sich selber verstecken ok, die game.exe vor attacken schützen hm,
    wie stellst du dir das vor?

    durch einen kleinen trick kann man ohne besondere rechte trotzdem an gewisse
    handles kommen, wenn man den namen weiß. um den prozess wirklich zu verstecken,
    musst du entweder einen treiber schreiben, oder jedes einzelne laufende programm
    hooken. was den meisten noch lieber wäre als der treiber.

    so einfach ist das nicht 🙂 wenn du innerhalb ein paar tagen einen guard schreiben
    könntest, könnte auch jeder andere innerhalb der zeit den guard umgehen.

    die frage ist halt wen du draußen halten willst.



  • also im prinzip will ich nur die leute draußen halten die zu faul sind selber nen hack zu schreiben oder nicht programmieren können, denn geübte hacker abzuhalten ist fast unmöglich, immerhin gibt es da SuspendThread, Read/WriteProcessMemory, TerminateProcess,...

    da ich geübte hacker wohl kaum abhalten kann versuche ich wenigstens die leute die vorgefertigte hacks benutzen(für flyff speziell automaton, ftool usw.) abzuhalten. und ein paar standard-hacks werden abgehalten.

    ich mache jetzt das mit dem ping noch gar fertig, dann kümmere ich mich ums verstecken. übrigens: warum soll das mit dem oing so unsicher sein? normale user wissen doch nicht dass es einen ping gibt und kommen so gar nicht auf die idee ihn nachzuahmen.

    mfg,
    andi01.



  • es gäbe da eine einigermaßen "harmlose" möglichkeit, deinen prozess und das
    spiel zu protecten. ich suche grade nach einer möglichkeit, das starten
    eines prozesses mitzubekommen. werden systemweite hooks nicht auch für noch
    startende programme geladen?



  • weiß ich leider auch nicht, aber eine einfache möglichkeit ist perfekt. standard-user hält sie ab und erfahrene hacker kann ich eh nicht ohne weiteres abhalten.

    wenn du diese möglichkeit gefunden hast sag einfach kurz bescheid(incl. code)^^

    mfg,
    andi01.



  • ich hab da mal auf die schnelle was zusammengeschrieben.

    dll.h:
    
    #ifdef DLL_EXPORTS
    #define DLL extern "C" __declspec(dllexport)
    #else
    #define DLL extern "C" __declspec(dllimport)
    #endif
    
    #pragma data_seg(".shared")
    
    HHOOK hook = 0;
    
    #pragma data_seg()
    #pragma comment(linker, "/SECTION:.shared,RWS")
    
    DLL LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
    DLL void SetHook(HHOOK);
    
    dll.cpp
    
    void SetHook(HHOOK phook)
    {
    	hook = phook;
    }
    void hook()
    {
    	// inline hooking
    }
    void unhook()
    {
    	// unhooking
    }
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
    	if (fdwReason == DLL_PROCESS_ATTACH)
    	{
    		if (hook)
    			Hook();
    	}
    	else if (fdwReason == DLL_PROCESS_DETACH)
    	{
    		if (hook)
    			Unhook();
    	}
    	return 1;
    }
    
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    	return CallNextHookEx(hook, nCode, wParam, lParam);
    }
    
    app.cpp:
    
    typedef void (*sethook)(HHOOK);
    typedef LRESULT (CALLBACK *hookproc)(int, WPARAM, LPARAM);
    
    HHOOK hook = 0;
    
    void protect()
    {
    	HMODULE mod = LoadLibrary("DLL.dll");
    
    	sethook psethook = reinterpret_cast<sethook>(GetProcAddress(mod, "SetHook"));
    	hookproc phookproc = reinterpret_cast<hookproc>(GetProcAddress(mod, "KeyboardProc"));
    
    	hook = SetWindowsHookEx(WH_KEYBOARD_LL, phookproc, mod, 0);
    	psethook(hook);
    }
    void unprotect()
    {
    	UnhookWindowsHookEx(hook);
    
    	HMODULE mod = GetModuleHandle("DLL.dll");
    	sethook psethook = reinterpret_cast<sethook>(GetProcAddress(mod, "SetHook"));
    	psethook(0);	
    
    	hook = 0;
    
    	FreeLibrary(mod);
    }
    

    das ganze ist ungetestet, keine verantwortung für schäden, etc.

    2 funktionen musst du noch einbauen, nämlich hook() und unhook().
    da würde ich dir inline-hooking empfehlen. da ich mich aber jedes mal
    beim setzen der jmpaddresse um ein paar byte vertue, kann ich ohne debugger
    nur raten 🙂 ich überlasse das korrekte einbauen mal dir. im internet findet
    sich zu "inline hooking" eine menge.

    du musst nurnoch alle funktionen, die dir gefählich werden könnten unterbinden,
    z.b. OpenProcess, TerminateProcess, SuspendThread, etc...

    auch würde sich anbieten, eine ebene tiefer zu gehen und die entsprechenden
    Nt-funktionen umzuleiten. ich kenne nicht viele hacks die darauf zugreifen,
    alle vertrauen sie darauf, dass keiner bei ihnen rumpfuscht.

    zum code:

    du setzt im proinzip einen dummy keyboard-hook, der, da er global ist, nur dazu
    dient die DLL in alle prozesse zu laden. die paar tasten pro sekunde * prozessanzahl
    lassen es schon nicht zuuuu langsam werden 😉

    sobald die DLL drin ist, hackt sie sind in die wichtigen funktionen.
    das kann man natürlich auch umgehen, aber es hält viele draußen. du musst
    in den gehookten funktionen nurnoch testen, ob dein prozess da irgentwie
    mit involviert ist, z.b. durch prüfen der PID. möglicherweise hällt das auch
    den taskmanager draußen ;).

    aber nicht unhook vergessen.

    viel spaß das einzubauen 😃



  • danke erstmal für deine antwort und den code 🙂 gleich morgen werde ich das mal ausprobieren und dir das ergebnis mitteilen.

    mfg,
    andi01.


Anmelden zum Antworten