Naja die beste Grundlage ist natürlich C/++ zu beherrschen.., dann sollte man eine Idee haben wie z.B. eine Crypter schreiben zu wollen. Ins PE-Format einlesen, source-codes anschauen - deine eigenen entwickeln..

Sonst kann ich dir empfehlen dir Source-codes anzuschauen und sie zu verstehen - dass hat mir immer sehr geholfen den Einstieg in etwas zu geben, Kentnisse in Netzwerkprogrammierung ( z.b.: http://robsite.net/files/0000/0012/sockdoc.pdf) sollte man sich schon anschaffen aber es kommt natürlich drauf an was du vor hast.

Und zu deiner Frage mit winsocks , ich würde sagen never change a running system? Gibt ja noch Alternativen wie winHTTP usw.