eSRO - IP Redirect & GameGuard

  • Hi,
    würde gern in eSRO Packets senden & empfangen, jedoch habe ich da ein Problem. Wollte es genauso wie z.B. in rSRO machen, also als Proxy den phConnector nehmen und mit dem edxLoader die IP redirecten, jedoch ist in eSRO der GameGuard aktiv. Nun ist es so, dass wenn ich beim edxLoader das Kästchen zum IP redirecten ankreuze, entweder die Fehlermeldung "Game or gameguard has been altered." kommt, oder der GameGuard startet, jedoch bleibt er dann hängen, nämlich in dem kleinen Fenster oben links, in dem er nach Updates sucht. Wenn ich den GameGuard abschalte (gibt ja Tutorials dafür), dann bekomm ich nach 5min DC, da er ja ein Packet zur Bestätigung an den Server senden muss..gibt es da vielleicht noch irgendeine andere Möglichkeit?

  • Injecte doch ne eigene .dll für das redicreten. Kannste Twice Detour funktionen benutzten.


    http://www.stagetwo.eu/develop…ost-umleiten/#post1203829


    Ist sogar C+P Code dabei. ^^

    Zitat

    Dr. Gregory House: You've gotta get down here. They've got a satellite aimed directly into Cuddy's vagina. I told them that chances of invasion are slim to none but...

  • Habe die DLL jetzt erstellt und mit C# versucht, sie in den RSRO Client zu injecten, allerdings passiert nichts.
    Um die DLL zu injecten, benutze ich folgende Klasse, die ich im Internet gefunden habe.



    Nachdem ich dann DoInject aufrufe,

    Code
    1. InjectMe.Inject.DoInject(SRO, Application.StartupPath + "\\dll.dll", out error)


    direkt nachdem ich den sro_client gestartet habe, startet es ganz normal. Normalerweise müsste dann ja der C9 Fehler kommen.
    DoInject liefert auch true zurück.

  • direkt nachdem ich den sro_client gestartet habe, startet es ganz normal. Normalerweise müsste dann ja der C9 Fehler kommen.
    DoInject liefert auch true zurück.


    Complie das ganze mal als x86 Anwendung. Hatte mal das gleiche Problem.
    Und für in die .dll ne messagebox o.ä. ein um zu checken ob die .dll auch geladen wird.

    Zitat

    Dr. Gregory House: You've gotta get down here. They've got a satellite aimed directly into Cuddy's vagina. I told them that chances of invasion are slim to none but...

  • Also es erscheint schon mal eine MessageBox.
    Edit: Habe mal versucht, den Client über WriteProcessMemory zu redirecten. Ich habe erst mit Ollydbg die Addresse der sockaddr heraus gesucht und dann mal ausgelesen, wenn der Client an der connect Funktion ankommt:


    Habe es dann auch geschafft, die IP zu ändern, so dass dann auf 127.0.0.1 und Port 15779 connected wird. Aber wie könnte ich jetzt den Port ändern?
    Der Port sollte ja eigentlich etwas mit 61, 163 zu tun haben:

    Code
    1. struct sockaddr_in {
    2. short sin_family;
    3. u_short sin_port;
    4. struct in_addr sin_addr;
    5. char sin_zero[8];
    6. };


    Wenn ich bspw. 61 zu 60 ändere, dann kommt auch der C9 Fehler. Wie also komme ich von 15779 auf 61, 163 bzw. von einem beliebigen Port auf diese zwei Bytes?

  • Es steht doch schon in deiner struct, dass das ein WORD ist.


    *( WORD* )&your_byte_array_or_whatevery[ 2 ] = 1337; // Or what port you'd like.


    MfG

  • Es steht doch schon in deiner struct, dass das ein WORD ist.


    *( WORD* )&your_byte_array_or_whatevery[ 2 ] = 1337; // Or what port you'd like.


    MfG


    Danke für die Antwort, allerdings ist der Port ja normalerweise 15779. Da wo der Port aber stehen sollte, kommt, nachdem ich es ausgelesen habe

    Code
    1. 61
    2. 163

    Ich verstehe jetzt noch nicht ganz, wie ich die beiden Werte ändern muss, um auf meinen gewünschten Port zu kommen.

  • Nochmal, du hast 16 Bits, die den Port angeben. Du gibst aber nur Bytes (8 Bits) aus. Deswegen shiftest du die 61 8 Bits nach links und addierst die 163 drauf:


    WORD port = 61 << 8 + 163; // Das ist 15779.


    Andersrum geht das so:
    BYTE high = port >> 8;
    BYTE low = port - ( high << 8 );


    MfG


    PS: Mir stellt sich natürlich die Frage, warum du nicht direkt die sockaddr_in struktur nimmst.

  • PS: Mir stellt sich natürlich die Frage, warum du nicht direkt die sockaddr_in struktur nimmst.


    Ja, das hatte ich erst auch versucht, allerdings wusste ich dann nicht, wie ich es mit WriteProcessMemory da rein bekomme.^^

    Nochmal, du hast 16 Bits, die den Port angeben. Du gibst aber nur Bytes (8 Bits) aus. Deswegen shiftest du die 61 8 Bits nach links und addierst die 163 drauf:


    WORD port = 61 << 8 + 163; // Das ist 15779.


    Andersrum geht das so:
    BYTE high = port >> 8;
    BYTE low = port - ( high << 8 );


    Habe es aber jetzt so gemacht und es funktioniert. Danke :)