Чатал много статей, посвященных снятию навсеных пакеров\криптором с использованием отладчика. А если для этих целей использовать не отладчик, а запускать подопытную программу под эмулятором процессора, т.е. пошагово эмулировать выполнение всех процессорных команд подопытной программы? Теоретически это дает много преимуществ, среди которых: принципиальная невозможность обнаружения отладки подопытной программой, полный контроль над выполняемой программой, набор воздействий на подопытную программу ограничен только фантазией исследователя, подопытная программа может использовать отладочные регистры процессора и прочие антиотладочные приемы без вреда для виртуального процессора. Имеет ли смысл разработки подобного эмулятора? Может такой эмулятор уже существует и я изобретаю велосипед?
Mantrid Не надейся. Все эти эмуляторы определяются с таким же успехом, как и дебагеры. Вернее тем на что у тебя хватит сил. Да есть эмулятор bochs, правда отладочные средства у него убогие.
Если честно, ожидал более оптимистичных заявлений на этом форуме. В принципе существует рабочая версия эмулятора (после достижения нужного результата бросил этим заниматься из-за нехватки ресурсов). По классификации эмуляторов из какого-то умного журнала мой эмулятор можно отнести к перпроцессным (эмулируется выполнение отдельного процесса), в работе используется стандартный debug api (в основном для доступа к памяти подопытного процесса). Теоретически в моем случае отладку можно определить по флагу трассировки, функцией IsDebuggerPresent, по значению FS:[18H] (точно не помню адрес). На практике упаковщик от Sentinel никакого неудовольствия от эмулятора не выказывал , про AsPack я вообще молчу. на подмену значений из памяти, API шпион и автоматизированный поиск OEP сил хватило
Следует различать эмуляцию и виртуализацию. vmware - это "виртуализатор", большая часть кода виртуальной машины выполняется непосредственно процессором, соответственно полного контроля над каждой инструкцией нет. Из эмуляторов, кроме boch, для таких целей можно попробовать simics - относительно быстрый, неплохие возможности для отладки.