Silkroad Redirect IP

  • Hi!


    Ich bin grade dabei einen Loader für Silkroad zu machen, der auch die IP redirecten kann. Dazu patche ich den Memory vom sro_client, so dass statt der connect Funktion meine eigene Funktion gecalled wird.
    Die connect Funktion sieht ja so aus:

    Code
    1. 0045DEE4 6A 10 PUSH 10 ; AddrLen = 10 (16.)
    2. 0045DEE6 57 PUSH EDI ; pSockAddr
    3. 0045DEE7 51 PUSH ECX ; Socket
    4. 0045DEE8 FF15 30B6E400 CALL DWORD PTR DS:[<&WS2_32.#4>] ; WS2_32.connect


    Als erstes habe ich dann versucht, den Call meiner eigenen Funktion direkt bei 0045DEE4 zu machen. Meine Funktion wird dann auch aufgerufen und der Client connected auch zum Proxy, allerdings kommt trotzdem der Fehler mit der 9 in den Klammern.
    Ich denke mir, dass es daran liegt, dass der Client nach dem Call bei 0045DEE9 weiter macht und damit nicht ganz zurecht kommt, da ich den Memory vorher in meiner Funktion wieder zurück patche.
    Deswegen habe ich versucht, die ersten 5 Bytes zu NOPen und den Call dann ans Ende zu setzen. Bei dem Versuch wird meine Funktion allerdings gar nicht erst aufgerufen, sondern der Client crasht vorher. Hätte irgend jemand vielleicht eine Idee woran das liegen könnte?


    MfG,
    user000user

  • Das ist die Funktion, die den Memory patcht, um beim connecten meine eigene Funktion aufzurufen.


    Wenn ich das custom_call Array so habe, wird die Funktion auch gecalled und eine Verbindung zum Proxy aufgebaut, allerdings kommt trotzdem der Error mit der (9).
    Wenn ich die NOPs vor den Call mache, crasht der Client bevor er in "Redirect" ankommt.


    MS Detours habe ich mir auch schon angeguckt, bzw. die Source vom EDX Loader, allerdings würde ich es gerne erst mal ohne versuchen.


    Edit: Habe vergessen das Offset der Funktions-Addresse zu ändern, deswegen crashte der Client. Der andere Fehler besteht allerdings weiterhin.
    Edit2: Hier nochmal ein Bild von der Fehlermeldung:

  • C9 heißt, dass keine Verbindung hergestellt werden konnte.
    Ich vermute, dass deine connect-Funktion kaputt ist, was dann zu einer Exception beim Client führt, der daraufhin dann C9 ausgibt. Hab derzeit leider keine Zeit mir deine Funktion anzusehen. (Handy, Schule)


    Muhend,
    die Kuh

  • Auch komisch ist, dass ich anscheinend nicht dass richtige Socket aus ECX bekomme. Beim Versuch die Protokoll-Informationen mit WSADuplicateSocket zu bekommen, sagt er mir dann, dass das Socket kein richtiges Socket ist (WSAENOTSOCK) und wenn ich die unveränderten Parameter pushe, kommt auch der C9 Fehler bzw. gibt die connect Funktion -1 zurück, mit dem gleichen Socket Error.

  • Am besten lädst du den Client in Olly, injectest deine DLL (gibt da plugins für z.B. StrongOd wenn ich mich jetzt nicht vertue) und machst einen breakpoint and die connect Funktion. Jetzt kannst du doch ablesen was in ECX steht, traced in deine Codecave zu der Stelle wo deine Socket Variable gesetzt wird und schaust wieder was in ECX steht und was nach der Operation in deiner Variablen steht. Dann weist du genau ob du den Socket hast oder nicht. Und du kannst direkt die Values ändern und sehen was passiert.