День добрый вновь. Активно погружаюсь в разработку виртуализаторов. Написал каркас для виртуализатора, то есть присутствует диспетчер с хендлерами. Хендлеров немного, в частности работа с базовыми инструкциями mov/nop/add/SSE. Также реализовал XOR-шифрование каждого байт-кода, чтобы в отладчике все не отображалось. Метка которая хранит байт-код на выполнение выглядит так:
Добавил замену простых математических операций на сложные алгоритмы где результат один и тот же.
Также реализована техника jump table, чтобы программа проходила нормально по таблице перехода.
Результат выполнения:
Но есть проблема, которую поймут только более опытные люди - я не понимаю, как еще можно усложнить анализ ВМ. Придерживаюсь мнения, что если сделать единую точку входа (условно, как у того же VMProtect), это будет легко палиться потому-что есть паттерн который всем известен. Мой вопрос заключается в том, как наиболее логично поступить? Чтобы хоть как-то усложнить анализ ВМ, а то в отладчике все прекрасно видно:
На скрине прекрасно видно, где инициализируется VM, видно, как принимается один байт-код, ну и MBA-обфускация как на ладони видна.
Был бы благодарен, если бы люди опытнее что-то посоветовали, заранее спасибо.
Добавил замену простых математических операций на сложные алгоритмы где результат один и тот же.
Также реализована техника jump table, чтобы программа проходила нормально по таблице перехода.
C:
cmp rax, 255
ja op_error
push rax
jmp qword [dispatch_table + rax*8]
Но есть проблема, которую поймут только более опытные люди - я не понимаю, как еще можно усложнить анализ ВМ. Придерживаюсь мнения, что если сделать единую точку входа (условно, как у того же VMProtect), это будет легко палиться потому-что есть паттерн который всем известен. Мой вопрос заключается в том, как наиболее логично поступить? Чтобы хоть как-то усложнить анализ ВМ, а то в отладчике все прекрасно видно:
На скрине прекрасно видно, где инициализируется VM, видно, как принимается один байт-код, ну и MBA-обфускация как на ладони видна.
Был бы благодарен, если бы люди опытнее что-то посоветовали, заранее спасибо.