Темида в любом случае первично виртуализирует код в своей виртуальной машине, но просто пихать весь код под защищенную, но ОЧЕНЬ медленную виртуалку нет смысла. Опционально можно раскидать по коду макросы, которые вложенные участки кода виртуализируют через какую-то другую виртуальную машину(коих там дохера + есть вариант запилить кастомную), структура которой посложнее, а скорость исполнения помедленее. Например имеет смысл оборачивать черными макросами критичные участки кода, которые содержат какую-то секретную логику, например выбор пары множителей для RSA-ключа. Ну и там есть еще дохера вариантов, как усложнить жизнь условному реверсеру, включая сжатие и шифрование ресурсов и первичных объектов.
Проблема темиды еще и в том, что можно просто пересобрать файл с немного другой логикой и другими виртуальными машинами и похерить прогресс реверсера. При этом, ничего не мешает пересобирать так хоть ежедневно(разумеется, если мы говорим не про NCSoft
) В случае с либами Л2, там просто обернут код простой виртуальной машиной, которая не сильно замедляет производительность.
Т.е вот TIGER32(Red) используется, например для первичной виртуализации, а SHARK32(White), SHARK32(Black), EAGLE32(Black) для некоторых макросов. В ластовых версиях, там можно еще и на каждую конкретную машину создавать несколько экземпляров, которые будут работать рандомно, на разных участках кода.