Archive for Jul. 2011

Ein paar Socks5 Experimente (Fortsetzung)

Bevor es an einen weiteren Artikel der MW2 Serie geht, möchte ich zunächst etwas weiter auf Socks5 eingehen. Das finale Ziel wird es sein, ein Reverse Socks5 Programm zu schreiben, wie in Teil 1 der Socks5-Serie beschrieben.

An dieser Stelle ein herzliches Dankeschön an den User Krusty, welcher mir in diversen Nachrichten immer mit Rat und Denkanstößen zur Seite stand ;-) Von ihm kam auch der Verweis auf die weiter unten besprochene Socks5 Klasse.

Das Programm in Teil 1 bestand aus nicht mehr als der Socks5 Anmeldefunktion und einem Datenaustausch (Eine Seite laden -> Eine Seite zurückliefern). So mochte der Proxy-Check von Proxifier das zwar das als Socks5 ansehen, doch mehr auch nicht. So hat das Programm Multithreading und eine hilfreiche UI bekommen:

Weiterlesen

9 people like this post.

MW2 Bot in C# – Teil 8

Da ich gut aus der Exkursion zurückgekehrt bin wird es gleich einen weiteren Artikel in der MW2 Bot Serie geben. In diesem wird es sich um die, schon in Teil 0 angesprochene, InlineASM Verwendung unter C# drehen. Dabei wird die SendCommandToConsole-Funktion verwendet, welche es erfordert den Stack zu fixxen. Zudem ist diese Funktion relativ unkomplex und klein, daher kann man sie gut als “Modell” verwenden ;-)

Aber bevor ich über die mehr oder weniger komplexen Vorgänge rede, hier erstmal die Funktion in C++:

VOID SendCommandToConsole( CHAR* szCommand )
{
	DWORD dwSend = (DWORD)0x004D3EA0;  // Die Adresse von SendCommandToConsole
 
	_asm push	szCommand // Wir pushen unseren Command, bzw die Adresse, auf den Stack
	_asm push	0 // Wir pushen eine null auf den Stack (Verwendung unbekannt)
	_asm call	dwSend // Da wir alle erforderlichen Sachen auf dem Stack haben wird die Funktion angesprungen
	_asm add	esp, 0x8 // Und es wird der Stack gefixxt
}

Sieht doch ganz überschaubar aus :P Zu erwähnen ist noch, dass auf diesen ASM-Code noch ein RET folgen muss, was aber in diesem Fall vom Compiler später übernommen wird.

Um ASM-Code von C# auszuführen braucht es mindestens folgende Schritte:

  1. Per VirtualAlloc Platz für den Code schaffen. Dabei muss der Speicher auf PAGE_EXECUTE_READWRITE gesetzt werden! Daher ist auch die Verwendung von Marshal.AllocHGlobal nicht möglich, es muss die reine WinAPI verwendet werden.
  2. Den Code zu dem reservierten Speicher kopieren.
  3. Ein Delegate mit dem Typ void auf den Anfang des Codes setzen
  4. Eine Funktion des Types des Delegates erstellen und aufrufen.

Weiterlesen

10 people like this post.