САБЖ есть идея реализовать простой алгоритм криптования, чтобы на выходе получались целиком валидные опкоды. Т.е. берем массив опкодов к примеру { op reg32, imm32 op reg32, reg32 op reg32, [ebp-...] сmp + j* ... } и имеющимися опкодами представляем шифруемый блок т.е. после шифрования получается полностью валидный код Как вы думаете, стоит ли идея дальнейшего развития (к примеру АВ анализируют энтропию, а такой метод теоретически должен АВ сбить с толку) ?
Тут необходимо обеспечить мутацию кода на выходе, так как количество "валидных" опкодов невелико, и есть большой риск скатиться к шифрованию по словарю (таблице), что не есть хорошо для массового шифрования, а для ручного единичного крипта много кто так и делает, или похоже, + хороший мусор в разумных пределах.
т.е. предлагается оставить только opcode, а всё остальное поксорить? это минимальный дизасм придёться добавить, чтобы пройтись по коду и поксорить префиксы и MODRM и т.д.
Насколько сабж понял я, предлагается создать специальную "таблицу соответствий" одного опкода другому, и при шифровке их подменять. При расшифровке, естессно, подменять обратно. ЗЫ: Или шифровать надо не кодес, а данные?
имеется ввиду шифрование данных Если к примеру любую информацию можно зашифровать только 1 и 0, то разнообразными иснтрукциями и подавно. Естевственно размер увеличится, но это не главное.
В принципе, идея достаточно оригинальна. Даже если брать по минимуму, у проца наберётся 98 штук опкодов. Если сосчитать возможные при них операнды, то наверняка будет возможно закодировать опкодом не только один байт (т.е. покрыть цифру в 256 комбинаций), но и сразу два байта.
Чтобы исключить (или по крайней мере свести к минимуму повторы), можно предварительно упаковать шифруемый блок. Тогда зашифрованный блок можно по определенным правилам разбавить вызовами апи, джампами и условиями, а потом все вместе растворить в секции кода.
Ну тем более. Только прыжки надо в таком случае расставлять аккуратно, а то в середину команды как-то подозрительно =) Наилучший результат будет достигнут, если юзать комплексный подход: скажем, пакер -> криптор -> опкоды.
Я думаю с прыжками проблем не будет Поскольку 1. Вставили блок 1 2. Вставили прыжок на начало блока 3 3. Вставили блок 2 4. Вставили блок 3 ... Блок в любом случае начинается с валидного опкода и прыжка в середину инструкции быть не может. Тут даже дизасм длин не нужен.