Зачастую так и происходит - программист создает программу, которая в будущем будет вирусом, запускает виртуальную машину, под которую написан вирус, запускает ее там и проверяет работоспособность. Может происходить иначе, вирус создается на втором устройстве и закидывается на основное, также для проверки.