современный вирус - это огромый комплекс программ, которые выполняют множество функций - поиск уязвимости, взлом, заражение, борьба с антивирусами, выполнение "полезной нагрузки"
что бы научиться писать антивирусы - надо научиться писать вирусы.
язык - С/ассемблер (хотя есть вирусы для ворда)
реверс инжиниринг ... - изучай ассемблер опять же, возьми дизассемблер, экспериментируй. научись просто "ломать" программы - например отключать защиты, проверки и т.д.
это интересно, но занимает уйму времени.