
Ronamis, ничего позорного в этом нет. Аббревиатуры, которые я использовал в тексте - это мнемоники и название регистров (ну кроме аббревиатур VX - Virus eXecutioner , AV - Anti-Virus и HLL - High Level Language).
EIP (Extended Instruction Pointer) - указатель инструкции. Содержит число, являющееся адресом следующей исполняемой инструкции в сегменте кода.
NOP (No OPeration) - пустая инструкция, которая заставляет процессор бездействовать 1 такт
MOV AX,AX - пересылка данных в формате "приемник, источник". Т.е. данная команда аналогична команде в C: a=a;
XCHG BX,BX - мнемоника перестановки содержимого операндов. То что было в приемнике оказывается в источнике, а то что было в источнике оказывается в приемнике. Очевидно, что в такой форме записи это просто бессмысленная инструкция.
PUSH DX \ POP DX - пара команд работающих со стеком. В данном случае мы запихнули в стек регистр значение DX и вытащили его обратно в DX.
JMP - это мнемоника безусловного перехода по указанному адресу. Эта команда меняет EIP на значение своего операнда
Jcc - это общий вид мнемоники условного перехода. Вместо 2-х последних символов стоят условия перехода. Аналогична JMP, только для совершения перехода нужно выполнение условия.
Теперь по поводу шифровки. Да ты прав, шифровка происходит по некоторому алгоритму, но соль в том, что дизассемблер шифрованный код воспринимает как просто поля данных. Т.е. он покажет код расшифровщика, разбавленного мусорным кодом и какой-то массив данных. Обойти шифрование можно, если знаешь алгоритм шифрования и непосредственно места, содержащие шифрованный код. Если ошибаешься с хотя бы дним компонентом (сам алгоритм, кусочки шифрованного кода, разбросанные по всему файлу), то получаешь искаженный код. А это уже чревато ошибками при его исполнении и понимании принципа работы.
Но в целом и общем ты абсолютно правильно понял - шифрование процесс обратимый. Тут задача стоит создать относительно трудоемкий процесс расшифровки.