Ne ich mein nicht dass du einen Server mittels Apache simulieren sollst. ich wollte nur wisse ob du etwas derartiges geöffnet hast, das würde dann nämlich erklären warum du keinen Socket auf den Port 80 binden kannst.
Beiträge von dongdong
-
-
Ich sag ja, da wird connect nicht gecalled, deshalb wirst du auch nicht umgeleitet.
Das mit dem Port 80 ist merkwürdig, hast du sonst noch i-was offen, was einen WebServer emulieren könnte? Z.B. Apache?
-
Aber nur mal so, wenn du Hilfe erwartest, dann poste das nächste mal bitte nur die Funktion die nicht funktioniert und am besten noch mit Kommentaren, damit man sich da schnell zurechtfindet. Ich glaube nicht, dass viele Lust haben 250 Zeilen Code zu durchforsten bis man mal die Funktion gefunden hat, die Ärger macht und dann noch mehr Zeit aufwenden muss um erst mal nachzuvollziehen was wo warum gemacht wird, weil keine Kommentare vorhanden sind :).
-
Aus i-einem Grund breakt mein BP auf der connect API nicht. Wie .Net bei einem HttpWebRequest connected, kann ich dir auch nicht sagen, auf jedenfall funktioniert deshalb die Umleitung per hosts Datei bzw. connect Hook auch nicht. .Net debuggen ist sowieso scheiße ^^, am besten du suchst dir ein CrackMe in nativem Code. .Net würd ich immer versuchen in Reflector zu decompilen und darüber was herauszufinden bzw. zu ändern.
Dein Code dürfte soweit auch stimmen, bis auf den Port und das receiven. Der Port muss 80 sein, weil du ja einen WebServer emulieren willst (HTTP Port ist 80). Und bei deiner receive Methode bin ich mir nicht sicher ob das ns.Read blockiert, hab noch nie mit einem NetworkStream gearbeitet, wenn ja dann stimmt das so für ein Packet. Aber normalerweiße wird die Verbindung wieder geschlossen nach dem der Request abgeschlossen wurde. Also musst du prüfen ob was empfangen wurde, wenn ja Packet senden und dann die Verbindung schließen und nochmal accept callen und dann dasselbe nochmal.
-
Anscheinend interessiert die IP im Packet Header doch nicht viel, oder sie wird auch automatisch umgeleitet, weiß ich jetzt nicht, müsste man in WPE mal abchecken.
Im Prinzip macht der dasselbe wie ich mit der ersten Methode nur etwas vereinfachter
Der Connect Hook macht im Prinzip dasselbe wie das ändern der Hosts Datei, nur ich ändere das send zum eigenen WebServer und er erstellt nen eigenen Server. Ich hab gar nicht gewusst das man so ohne weiteres nen WebServer emulieren kann, wieder etwas dazu gelerntDu kannst dass natürlich auch so machen, wie er. Entweder connect hooken (schönere Variante) oder hosts Datei ändern und einen eigenen Server emulieren der das gewünschte Packet zurück sendet.
Ich schau gleich mal in deinen Quellcode rein, wo der Fehler liegt
//edit:
Die Datei, auf die Sie zugreifen möchten, ist derzeit leider nicht verfügbar. Bitte versuchen Sie es später erneut.
kommt bei dem DL von deinem Code -
Ich mir deine Source jetzt nicht angeguggt, aber in deinem Ansatz scheinen schon Fehler zu sein.
Also das Crackme sendet ein PHP GET an ein PHP Skript auf einem Server. Also macht redirecten mit der Host Datei kein Sinn, da höchstens der connect Call umgeleitet wird, wenn aber im Packet Header (siehe HTTP Protokoll) die IP nicht stimmt failed das ganze an der Stelle.
Mit WPE das Packet ändern geht vermutlich auch nicht, da recv (vermutlich) nur gecalled wird wenn das Tool in der Check Methode ist.Ab hier im Expander Lösungsmöglichkeiten:
Aber da du ja schon mit WPE gesnifft hast, ist dir mit Sicherheit auch aufgefallen, dass "false" als Ergebnis zurück kommt, wenn die Serial nicht stimmt. Von daher ist es nahe liegend das "true" returned wird falls die Serial korrekt war.
Also hast du jetzt 2 Möglichkeiten.
1. Du hookst connect und send und leitest den connect auf deinen eigenen webserver um und den send auf dein eigenes Skript. Auf deinem Webserver liegt dann ein Skript mit dem Inhalt "true". Dann wird auch immer "true" zurückgegeben.2. Möglichkeit: Du hookst recv und veränderst das Ergebnis von "false" auf "true". Achtung die Content-Length Eigenschaft im Packet Header muss ebenfalls angepasst werden (von 5 auf 4) und die Anzahl der receivten Bytes (die returned wird) muss angepasst werden.
Das kannst du jetzt als Hook in c++ oder Delphi schreiben (also den Hook in eine Dll und dann beim Start die Dll injecten) oder du patchst einfach mal das Packet in Olly.
Fürs letztere lädst du die exe in Olly, drückst Alt+M gehst zur WS2_32 Dll in die .text Sektion, drückst Strg+N gehst zu recv und setzt nen BP auf den Anfang der Funktion. Dann gibst du i-einen Crap bei Serial ein, drückst Check un breakst am bp, rechtsklick auf EDX-> Follow in Dump, weil in EDX ein Pointer zu unserem Byte Array liegt in dem die receivten Bytes gespeichert werden (siehe Definition von recv). So jetzt tracest du durch bis sich was in unserem Byte Array tut (nach dieser Zeile)
So da du jetzt das Packet hast, kannst du es modifizieren. Du musst die Content-Length von 5 auf 4 patchen und false zu true. Das wars aber noch nicht ganz, da jetzt ja auch noch die return value der Funktion nicht stimmt, weil wir ja ein Byte weniger haben. Die Anzahl der gelesenen Bytes ist der Rückgabewert der Funktion also vor dem return in EAX, also tracest du zum ret und machst dann ein rechtsklick auf EAX->Decrement (da wir genau ein Byte weniger haben) und mit einem Druck auf F9 müsste jetzt die GoodBoy Message kommen
Achtung die Verbindung kann auch ein Timeout bekommen wenn du zu lang anhälst.Falls etwas unklar ist, frag einfach
-
geiler Beispieltext in der ersten Page
-
League of Legends
-
Bitte schön
~closed~
Hier noch der Sourcecode, falls ihn jmd. braucht:
C- #include <ButtonConstants.au3>
- #include <EditConstants.au3>
- #include <GUIConstantsEx.au3>
- #include <WindowsConstants.au3>
- #Region ### START Koda GUI section ### Form=
- $KeyPresser = GUICreate("KeyPresser", 171, 72, 205, 164)
- $Go = GUICtrlCreateButton("Go (F5)", 8, 32, 75, 25, $WS_GROUP)
- $Button2 = GUICtrlCreateButton("Stop (F6)", 88, 32, 75, 25, $WS_GROUP)
- GUISetState(@SW_SHOW)
- #EndRegion ### END Koda GUI section ###
- $bDo = False
- HotKeySet("{F5}", "_start")
- HotKeySet("{F6}", "_stop")
- While 1
- $nMsg = GUIGetMsg()
- Switch $nMsg
- Case $GUI_EVENT_CLOSE
- Exit
- Case $Go
- _start()
- Case $Button2
- _stop()
- EndSwitch
- WEnd
- Func _stop()
- $bDo = False
- EndFunc
- Func _start()
- $bDo = True
- While $bDo
- ControlSend("NosTale", "", 0, "{SPACE}")
- Sleep(700)
- ControlSend("NosTale", "", 0, "1")
- Sleep(1000)
- WEnd
- EndFunc
-
Wie Traumfänger schon gesagt hat, bekommst du damit nicht die ChildControls der Controls sondern nur die Controls auf dem MainWindow. Das heißt dass die Controls die zum Beispiel in einer Groupbox liegen nicht bekommst. Du musst EnumChildWindows auch nochmal auf die ControlHandles callen um praktisch die UnterunterControls zu bekommen, also die die in der Groupbox sind.
Und ja ich hab mittlerweile auch mitbekommen dass du's anders machst, ich wollte es nur mal anmerken -
themave
bei dem Programm von Trigger ist doch ne super Anleitung dabei, was gibts es da nicht zu verstehen?basi1
"while 1" ist das gleiche wie "while true", hinter dem while muss etwas stehen was als Boolean Wert ausgewertet werden kann und da Boolean im Prinzip ja auch nichts anderes als 1 oder 0 ist, kann man da auch while 1 hinschreiben. -
Sicher das du das Packet auch an den Server gesendet hast?
Der Client crasht normalerweiße nur wenn du ein falsches Packet an den Client sendest. Dieses Packet musst du aber an den Server senden.
-
Warum sollte der LoginServer was mit der Wartezeit zu tun haben? Normalerweiße kommt man nur auf den Server wenn ein Slot auf dem GameServer frei wird, sonst würde das für mich keinen Sinn ergeben oO
-
benutzt den Black Hawk Loader, der hat englisch Patch
-
Auktionshaus mit Inflationsschutz
Absolut genial -
Schreib am besten noch die Sro Version dazu.
-
-
Ich hab da mal was kleines gebastelt
Du brauchst 2 Textdokumente, in dem ersten sind deine Fremdworter (einzeln, untereinander) und im zweiten die dazu passenden deutschen (oder was auch immer) Wörter (ebenfalls einzeln und untereinander)
könnte dann Beispielsweiße so aussehen:
Datei1.txtDatei2.txt
Achtung die Abfrage ist Case-sensitive!So wenn du die beiden Dateien erstellt hast, öffnest du das Tool und gehst unter Datei->Optionen hier gibst du dann die Pfade zu den Language Files an (Die erste Datei gibt die Sprache vor von der übersetzt werden soll) und stellst die in der Übung vorkommende Anzahl an Vokabeln ein (kannst du Optional auch auf 50 stellen).
Dann speichern drücken und ab gehts
War das Wort richtig steht in der rechten TextBox "[Richtig]" und wenn es falsch war, das richtig geschriebene Wort. Sind alle Vokabeln durch wird dir das über die Progressbar und die linke Textbox angezeigt.Fehler:
"Language Files don't fit" - In der einen Language Datei sind mehrere Vokabeln als in der anderen
"Language File 1 or 2 not found!" - Eine der beiden Language Dateien (oder beide) wurden nicht gefunden -
Ja mit dem Tut von Drew kannst du einen Loader schreiben der die IP redirecten kann.
Nein, kannst du nicht so ohne weiteres in .Net machen (jedenfalls ist mir nichts bekannt).
In Delphi kannst du das allerdings auch machen, falls Delphi dir lieber ist (Tutorial gibts in der Coding - Tutorials Sektion, schau einfach mal den SammelThread durch)@Moderator
kann das mal jemand bitte nochmal in Coding - Allgemein moven, da ist es besser aufgehoben. -