Jetzt mal was ganz anderes, wenn man z.B. einen Virus schreiben will, muss man sich mit dem Programm/Betriebssystem besser auskennen als der Entwickler?
Wenn ICH einen Virus schreiben wollen würde, würde ich mir zuerst alle Programme und Betriebssysteme vornehmen, die weit verbreitet sind: Web-Browser, Email-Clients, PDF-Reader, Office-Programme sowie Spiele und bei den Betriebssystemen Windows, Linux und Mac OS. Bei den Betriebssystemen würde ich mir vor Allem die Libraries für den Netzwerkstack, Treiber allgemein, Videocodecs und Grafikroutinen vornehmen.
Dann würde ich mir einem Emulator schreiben, der die entsprechende Umgebung simuliert und den Maschinencode des entsprechenden Programms oder der Library ausführen kann. Mit diesem Emulator würde ich für jedes Stück Code analysieren, in welchem Kontext dieses normalerweise ausgeführt wird. Dazu betrachte ich den Callstack, die Parameter und die globalen Variablen. Dann untersuche ich den Code auf mögliche use-after-free, integer-overflows, buffer-overflows und besonders stack-overflows. Überall wo Arrays indiziert oder Puffer verwendet werden reicht eine fehlende Bereichsprüfung um den Stack zu manipulieren. Niemand schreibt Code mit Checks bei jeder Adressberechnung. Format-Bugs lasse ich mal außen vor, die können mit einfachen Mitteln behoben werden.
Mit einem funktionierenden Exploit würde man schon mal in den Usermode kommen. Hier kann man bereits beliebige DLLs patchen, um etwa SSL abzufangen, Mails mitzulesen oder Passwörter zu klauen. Über das Dateisystem lassen sich versendete Dateien oder USB-Sticks infizieren. Aus dem Usermode lässt sich auch sehr bequem ein Dienst einrichten, der sich in den Autostart schreibt und so bei jedem Start geladen wird (bei XP, Win 7 weiss ich nicht genau).
Um vom Usermode zum root zu kommen reicht ein weiterer Overflow in irgendeiner Library oder Treiber. Am effektivsten ist es, Code dort im Kernel zu platzieren, wo er häufig ausgeführt wird. Wenn man es darauf anlegt, kann man auch in dem Bootloader gehen und alles virtualisieren, was eine Entdeckung riskieren würde.
Die Kommunikation würde ich über frei verfügbare Online-Dienste machen und zwar in beliebigen XML-Formaten oder anderen geläufigen Formaten, welche die Kommandos enthalten. Je nach Typ der Schwachstelle kann man über das Netzwerk weitere Computer infizieren oder den Schadcode mit Dateien versenden. Eine Entdeckung durch Virenscanner vermeidet man in der Regel, indem man einen kleinen Compiler für eine rudimentäre Sprache verwendet, der sich selbst und seine Payload in diversen Variationen generieren kann. Eventuell versteckt sich der echte Code noch zwischen einem großen Haufen nutzlosem Maschinencode. Den Exploit an sich kann man auch variieren oder an unterschiedlichen Stellen im Dokument platzieren.
Aber ich bin ja einer von den guten