Криптование простыми инструкциями

Тема в разделе "WASM.CRYPTO", создана пользователем Magnum, 27 июл 2008.

  1. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    САБЖ
    есть идея реализовать простой алгоритм криптования, чтобы на выходе получались целиком валидные опкоды.

    Т.е. берем массив опкодов
    к примеру

    {
    op reg32, imm32
    op reg32, reg32
    op reg32, [ebp-...]
    сmp + j*
    ...
    }

    и имеющимися опкодами представляем шифруемый блок
    т.е. после шифрования получается полностью валидный код

    Как вы думаете, стоит ли идея дальнейшего развития (к примеру АВ анализируют энтропию, а такой метод теоретически должен АВ сбить с толку) ?
     
  2. McHren

    McHren New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    25
    Тут необходимо обеспечить мутацию кода на выходе, так как количество "валидных" опкодов невелико, и есть большой риск скатиться к шифрованию по словарю (таблице), что не есть хорошо для массового шифрования, а для ручного единичного крипта много кто так и делает, или похоже, + хороший мусор в разумных пределах.
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    т.е. предлагается оставить только opcode, а всё остальное поксорить?
    это минимальный дизасм придёться добавить, чтобы пройтись по коду и поксорить префиксы и MODRM и т.д.
     
  4. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Насколько сабж понял я, предлагается создать специальную "таблицу соответствий" одного опкода другому, и при шифровке их подменять. При расшифровке, естессно, подменять обратно.

    ЗЫ: Или шифровать надо не кодес, а данные?
     
  5. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    имеется ввиду шифрование данных

    Если к примеру любую информацию можно зашифровать только 1 и 0, то
    разнообразными иснтрукциями и подавно.

    Естевственно размер увеличится, но это не главное.
     
  6. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    В принципе, идея достаточно оригинальна. Даже если брать по минимуму, у проца наберётся 98 штук опкодов. Если сосчитать возможные при них операнды, то наверняка будет возможно закодировать опкодом не только один байт (т.е. покрыть цифру в 256 комбинаций), но и сразу два байта.
     
  7. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Чтобы исключить (или по крайней мере свести к минимуму повторы), можно предварительно упаковать шифруемый блок.

    Тогда зашифрованный блок можно по определенным правилам разбавить вызовами апи, джампами и условиями, а потом все вместе растворить в секции кода.
     
  8. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Ну тем более. Только прыжки надо в таком случае расставлять аккуратно, а то в середину команды как-то подозрительно =) Наилучший результат будет достигнут, если юзать комплексный подход: скажем, пакер -> криптор -> опкоды.
     
  9. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Я думаю с прыжками проблем не будет

    Поскольку

    1. Вставили блок 1
    2. Вставили прыжок на начало блока 3
    3. Вставили блок 2
    4. Вставили блок 3
    ...

    Блок в любом случае начинается с валидного опкода и прыжка в середину инструкции быть не может. Тут даже дизасм длин не нужен.