Vallahi ben bütün trojanlarımı C#'ta yazdım. Ama eğer gerçekten virüs yazacaksanız tabii ki C++ gereklidir. C# arada ikincil bir çevirici sistemi, .NET'i istediği için virüs yazdırmaz.
Emin olmak için terimleri açıklayayım; virüs kendini zaten halihazırda var olan koda enjekte eder, mesela bir .exe dosyasının başına belirli bir jump, zıpla kodu ekler, kendi kodunu önceden çalıştırır, sonra çalışmayı gerisingeri ana koda teslim eder. Ne yazık ki devrimizde hem yazılması zorlaşmıştır, hem de yakalanmaları kolaylaşmıştır.
Benim tercihim trojanlardır. Bir trojan mesela ergen genç arkadaşlarımızın bir saatte 400 adet indireceği softcore erotik bir oyun gibi görünür, ama arkaplanda farklı işler görür. Yazılması kat be kat daha kolaydır, hedef kitleniz yeterince aptalsa asla yakalanmayabilir. (Son yazdığım trojan yıllar oldu, hala virustotal'de temizmiş gibi görünüyor)
Eninde sonunda bir noktada trojandan çok virüs gibi davranan kodlara ihtiyacınız olur olmasına da, C#'ta çok basit bir trojan ile başlamak çok daha basit olacaktır. Hedef kitleniz ezici çoğunlukla windows kullandığından *nix'e has dilleri kullanmanız saçma olur, bence en iyi seçim C#'tır.