Detour - Wie den code in Recv schreiben ?



  • Heyho liebe Community,

    Ich habe mit einem Freund zusammen grade eine Detour in c++ geschrieben. Diese sieht so wie folgend aus.

    // Functions:
    void __stdcall hkRecv(SOCKET sSocket, char *Buffer, int length, int flags);
    DWORD WINAPI InitHook(LPVOID lpParams);
    void SpecialProlog();
    void SpecialDetour(BYTE* src, BYTE* prolog, const int len);
    
    // Dirty Variables (damit ich's leichter habe, ist aber nicht sehr sauber):
    DWORD Jumpback; // dirty, but don't touch it or burn in hell
    DWORD moSocket; // that one, too
    DWORD msBuffer; // that one, too
    DWORD miLength; // that one, too
    DWORD miFlags; // that one, too
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
    					 )
    {
    	switch (ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    		DisableThreadLibraryCalls(hModule);
    		CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&InitHook, 0, 0, 0);
    		break;
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
    
    DWORD WINAPI InitHook(LPVOID lpParams)
    {
    	HMODULE hWinsockMod = NULL;
    	FARPROC dwRecvAddress;
    
    	while (hWinsockMod == NULL)
    	{
    		hWinsockMod = GetModuleHandle("Ws2_32.dll");
    		Sleep(100); // optional
    	}
    
    	dwRecvAddress = GetProcAddress(hWinsockMod, "recv");
    
    	SpecialDetour((PBYTE)dwRecvAddress, (PBYTE)SpecialProlog, 6);
    
    	return 1;
    }
    
    void __stdcall hkRecv(SOCKET sSocket, char *Buffer, int length, int flags)
    {
    	// code
    	return; // weitermachen kann hier nicht unterbunden werden, sonst wird der stack zerstört
    }
    
    void SpecialDetour(BYTE* src, BYTE* prolog, const int len)
    {
    	DWORD dwOldProtection;
    	BYTE* trampoline = (BYTE*)malloc(len+5); // platz für die trampolin funktion schaffen 
    	VirtualProtect(trampoline, len+5, PAGE_EXECUTE_READWRITE, &dwOldProtection); // die trampolinfunktion überschreibbar und ausführbar (!) machen
    	VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwOldProtection); // die ersten Bytes der orginalfunktion (bzw. des interrupt points) überschreibbar machen
    	memcpy(trampoline, src, len); // die ersten len Bytes der Funktion in's trampolin sichern sichern
    	trampoline += len; // trampolin-pointer auf das trampolinende setzen, wo der jmp gemacht wird
    	trampoline[0] = 0xE9; // jmp zur
    	*(DWORD*)(trampoline+1) = (DWORD)(src + len - trampoline) - 5; // relativen adresse der orginalfunktion +len (überschrieben)
    	Jumpback = (DWORD)(trampoline-len);
    	src[0] = 0xE9; // jmp zur
    	*(DWORD*)(src+1) = (DWORD)(prolog - src) - 5; // relativen adresse des prologs
    	VirtualProtect(src, len, dwOldProtection, &dwOldProtection); // die alte protection der len bytes der orginalfunktion wiederherstellen
    }
    
    __declspec(naked) 
    	void SpecialProlog()
    {
    	// [esp + 0x00] = ebp of Recv-Caller
    	// [esp + 0x04] = Adress of Recv-Caller
    	// [esp + 0x08] = 1st Arg
    	// [esp + 0x0C] = 2nd Arg
    	// [esp + 0x10] = 3rd Arg
    	// [esp + 0x14] = 4th Arg
    
    	_asm
    	{
    		push eax // alles was oben steht, verschiebt sich um 4 Bytes
    		mov eax, [esp + 0x0C]
    		mov moSocket, eax
    		mov eax, [esp + 0x10]
    		mov msBuffer, eax
    		mov eax, [esp + 0x14]
    		mov miLength, eax
    		mov eax, [esp + 0x18]
    		mov miFlags, eax
    		pop eax
    		pushad // die alten registerzustände speichern
    	}
    
    	hkRecv((SOCKET)moSocket, (char*)msBuffer, (int)miLength, (int)miFlags); // funktion ausführen
    
    	_asm
    	{
    		popad // die original-registerzustände wiederherstellen
    		jmp Jumpback // zur trampolinfunktion springen
    	}
    }
    

    Sooo, nun habe ich ein paar Code-zeilen die an sich die eigentliche Funktion des Botes ausfuehren sollen zum Beispiel

    case 0x3e:
    		DWORD target = *(DWORD*)&Buffer[7];
    		DWORD attacker = *(DWORD*)&Buffer[3];
    
    case 0x32:
                PlayerID = *(DWORD*)&Buffer[3];
    
    if(PlayerID == 0)
    
    SendPacket(0x0D,"bbd",18,1,attacker);
    

    Mein Problem ist, dass ich nicht verstehe wie ich diese Codes jetzt in die Recv schreiben soll, da ich mich mit (Syntax etc.) nicht auskenne.
    Koenntet ihr mir erklaeren wo und wie diese codes jetzt korrekt eingetragen werden muessen ?

    // Es handelt sich hier um einen Bot, der automatisch ein Monster angreifen soll. 0xe3 steht hier fuer das packet was vom server versand wird wenn ein monster angegriffen wird.



  • Beziehungsweise -

    Wie trage ich die 4 oben angefuehrten Codes hier

    void __stdcall hkRecv(SOCKET sSocket, char *Buffer, int length, int flags) 
    { 
        // code 
        return; // weitermachen kann hier nicht unterbunden werden, sonst wird der stack zerstört 
    } 
    
    Wie trage ich diese Codes hier sinvoll ein
    

    ein ? Also da wo //code steht.

    mfg



  • Um welches Spiel geht es ?



  • Exces schrieb:

    Beziehungsweise -

    Wie trage ich die 4 oben angefuehrten Codes hier [...] ein ? Also da wo //code steht.

    Mit einem Editor? Versteh nicht so ganz was dein Problem ist - kann auch an der Frage liegen (siehe dazu auch Link in meiner Signatur) 😕
    Sorry, aber das sieht nach wild zusammenkopiertem Zeugs aus. Wenn du programmieren lernen willst, solltest du mit einem guten Buch anfangen.



  • Das Spiel heisst Kal Online, ich will ja eigentlich noch garnicht programmieren lernen. Ich wuerde nur gerne den Bot zum laufen bringen und bitte euch deswegen um eure Hilfe. Kriege das aufgrund meiner mangelnden kenntnisse ja leider nicht hin . 🙄
    Es geht einfach darum das hier eine Detour/Hook geschrieben wuerde, die mit einem Jump eine Hackshield umgehen soll, damit der Bot funktioniet. In dieser Detour steht das eigentliche jedoch noch nicht drinn. (Also der Bot) Die Source von dem Bot habe ich ja gegeben, diese kann ich ja logischer weise aber nicht einfach in die Detour einfuegen, da ich ja nicht einfach mit "case" etc. anfangen kann, mir fehlen also die Kenntnisse zu Schaltern,Syntax etc.

    Waere Nett wenn ihr mir helfen koenntet, fuer Leute die sich damit auskennen sollte das ziemlich simpel sein.

    Ich bedanke mich schonmal fuers zuhoeren 🙂



  • Exces schrieb:

    ich will ja eigentlich noch garnicht programmieren lernen. Ich wuerde nur gerne den Bot zum laufen bringen

    Dann bist du hier an der falschen Adresse. Hier im Forum gehts darum, programmieren (mit C++) zu lernen bzw. den Leuten, die programmieren bei auftretenden Problemem zu helfen. Für Auftragsarbeiten gibts ein extra-Forum, allerdings musst du damit rechnen, für die Arbeit auch was zu zahlen. Scriptkiddies und Möchtegern-"haxx0r" sind hier per se nicht gern gesehen. Wenn du jemanden suchst, der dir deinen Spielehack schreibt musst du wohl in ein Forum, wo es um Spiele-Hacks geht. Das ist hier einfach nicht die Zielgruppe des Forums. Das ist eher für die Leute, die was lernen wollen.



  • Jop,

    biete 15 Euro fuer die Fertigstellung des Botes, bitte bei Interesse melden 🙂



  • Exces schrieb:

    biete 15 Euro fuer die Fertigstellung des Botes, bitte bei Interesse melden 🙂

    ROFL



  • Vielleicht sieht sich ja jemand dein Problem mal an, wenn du eine Null anhaengst.



  • Exces schrieb:

    Ich habe mit einem Freund zusammen grade eine Detour in c++ geschrieben. Diese sieht so wie folgend aus.

    Exces schrieb:

    as Spiel heisst Kal Online, ich will ja eigentlich noch garnicht programmieren lernen.

    Exces schrieb:

    biete 15 Euro fuer die Fertigstellung des Botes, bitte bei Interesse melden

    👍

    jetzt rofelts mich doch glatt durch die Firma.
    Also für 50 € würde ich für euch nach einem fertigen Bot googeln. 😃

    Hier kannst du alles zu recv erfahren:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx

    Hast du eigentlich schon nach einem fertige Compilierten Bot gesucht?

    www.elitepvpers.de/forum
    Schau mal ob du da fündig wirst.



  • Überteibt mal wieder nicht so maßlos 😉



  • Suchen bringt dir da nicht viel 😉 Es gibt keine Bots mehr fuer den internationalen Server.

    Ich komme von Epvp, Bots koennen nurnoch mit dem richtigen know-how geschrieben werden und das know-how war hier die Bytes um +5 zu verschieben, weil das hackshield nur die ersten parameter scannt.

    Des weiteren sind das nur 4 Codes die eingetragen werden muessen und ich glaube NICHT das man dafuer 150 Euro verlangen kann. Das ist fuer Erfahrene Coder ein kinderspiel.


  • Mod

    Exces schrieb:

    Des weiteren sind das nur 4 Codes die eingetragen werden muessen und ich glaube NICHT das man dafuer 150 Euro verlangen kann. Das ist fuer Erfahrene Coder ein kinderspiel.

    Willst du, dass ein Schüler deinen Rasen mäht oder ein Programmierer mit jahrelanger Erfahrung ein paar Stunden fachlich für dich arbeitet?

    Ich könnte mir vorstellen, dass sich, wenn du ganz viel Glück hast, vielleicht ab 50 Euro ein armer Student erbarmt, falls er schon Ahnung vom Thema haben sollte. Aber für 15 Euro schreiben die meisten Leute nicht einmal eine Email. Geschweige denn wird sich jemand in das Thema eindenken, das Problem nachvollziehen, mit dir Kontakt aufnehmen und ein Geschäft abwickeln. Einzelauftragsarbeiten sind nun einmal teuer. So etwas ist man gar nicht gewöhnt in Zeiten der Massenproduktion. Du willst, dass ein Mensch mehrere Stunden seines Lebens nur für dich investiert, nicht dass ein Mensch mehrere Stunden seines Leben in ein Produkt investiert, dass er noch an eine Million andere Leute verkaufen kann.



  • Ich habe ja nicht nach einer Instruktion gesucht, mit wieviel geld ich einen Programmierer bezahlen sollte ?

    von daher.. mfg



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • was soll das ??


  • Mod

    Exces schrieb:

    was soll das ??

    Was? Verschiebung? Dies ist das Unterforum, wenn du Geld für die Lösung einer Aufgabe anbietest (oder um die Lösung bettelst). Eine Fachfrage zu C++ hast du schließlich nicht.

    Hier lesen dein Angebot die richtigen Leute, im anderen Forum werden bloß Witze über die Höhe des Angebotes gerissen (naja, hier wahrscheinlich auch), wie du vielleicht gemerkt hast.



  • Exces schrieb:

    Des weiteren sind das nur 4 Codes die eingetragen werden muessen und ich glaube NICHT das man dafuer 150 Euro verlangen kann.

    Na wenn das so simpel ist, dann mach das doch eben. Oder bring dir schnell bei, wie man das macht, scheint ja nicht schwer zu sein...

    Das ist fuer Erfahrene Coder ein kinderspiel.

    "Erfahrene Coder" machen auch für Kinderspiele unter einem bestimmten Stundensatz keinen Finger krumm...



  • Es sind mehr als diese 4 Zeilen weil der Bot ja noch nicht fertig gecoded ist du hast nur ein paar Zeilen, und der Code an sich Funktioniert auch nicht so.

    Hackshield checkt soweit ich das gelesen hatte von meak die ersten 5 Bytes also musst du gucken ob du nach den ersten 5 Bytes einfach einen Hook setzen kannst, oder irgendwo anders.

    Dir fehlt auch noch die SendDetour bzw die Send Funktion allgemein.

    Die ist aber auch Public auf ePvP in der KalOnline Section.


Anmelden zum Antworten