Зашифровать память процесса и расшифровывать поблочно. Как?

Тема в разделе "WASM.WIN32", создана пользователем dyn, 19 сен 2010.

  1. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Clerk
    Читайте внимательный,
    делается это с той целью что бы не криптовать\декриптовать каждый раз, а раскриптовать и положить в отдельный буфер, поднимая этим производительность.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    IceCrashLdr
    Это нарушает условие задачи - код будет обнаружен при скане памяти. Дальше можно не читать.
     
  3. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Clerk
    Глупости.

    Можно и копировать криптованый код, просто будет постоянно время тратится на декрипт.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    IceCrashLdr
    Не глупости. Задача состоит в сокрытии кода в адресном пространстве.
    Описатель региона памяти в моём понимании это дескриптор, селектор которого находится в сегментных регистрах. Что под этим вы понимаете ?

    В общем совершенно не понятно. Опишите по пунктам.
     
  5. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    IceCrashLdr
    У вас сигнатурный скан по другую сторону баррикад.
    Появление раскриптованого куска кода достаточной длины будет означать детект.
    Идея все в открытом виде вывалить в память - конечно, блестящая, но уже реализовано в системном загрузчике.
     
  6. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Сигнатуру вируса он не найдет.

    Извиняюсь, не правильно выразился(сейчас в нескольких проектах, и некоторые термины схожие, поэтому выражаюсь довольно плохо).
    Описатель региона - просто структура, которая будет иметь: Адрес блока, размер блока, счетчик ссылок.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    IceCrashLdr
    Так всётаки мб опишите механизм по пунктам ?
     
  8. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Разбивает код на участки менее 32 байт.
    Код (Text):
    1. typedef struct _CodeMemoryRegion{
    2.   DWORD address;      //
    3.   DWORD size;           // WORD, BYTE
    4.   DWORD refCounter;  // WORD, BYTE
    5. }CodeMemoryRegion,
    6. PCodeMemoryRegion;
    Делаем крипт.
    -----------------------------------------
    Старт программы.
    хук на DispatchException.(Как точно называет не помню)

    Код (Text):
    1. ptr = Alloc(OriginalMemorySize);
    2. CopyDecryptCode(ptr);
    3. VirtualProtect
    4. memset( , 0xCCCCCCCC , )
    5. goto OEP;
    Код (Text):
    1. HookDispatchException:
    2.   проверяем  exception.
    3.   ищем  CodeMemoryRegion, EXCEPTION_POINTER.eip сравнивая с CodeMemoryRegion.address.
    4.   if ( CodeMemoryRegion.refCounter == 0 )
    5.       memcpy(EXCEPTION_POINTER.eip, CodeMemoryRegion.address, CodeMemoryRegion.size);
    6.   ++CodeMemoryRegion.refCounter;
    7.   сохраняем указатель на CodeMemoryRegion в переменную потока.
    8.   восстанавливаем все флаги, якобы исключения небыло.
    9.   goto EXCEPTION_POINTER.eip;
    HookDispatchException2:
    проверяем exception.
    ...
    ...
    из переменной потока вытаскиваем указатель на CodeMemoryRegion.
    Код (Text):
    1.    --CodeMemoryRegion.refCounter;
    2.   if ( CodeMemoryRegion.refCounter == 0 ) {
    3.       memset( , 0xCCCCCCCC , )
    4.   }
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    IceCrashLdr
    Дешифровка только по одной инструкции. Максимальный размер - 15 байт.
    VEH. Проблема в асинхронном вызове. Видимо больше нет способа кроме спин-блокировок http://cracklab.ru/f/index.php?action=vthread&forum=6&topic=16762.
    Остальное - недоработанный механизм, который у меня в семпле и использовался.
     
  10. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Скорость выполнения... Обычный код инструция около 1-3 , 6-7 байт. Так что выполнения кода будет медленнее 5+ раз.

    Как то я его и забыл... (

    Вот только я не вкурил, как нормально можно разбить код на инструкции или участки памяти... ((
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    IceCrashLdr
    Ну выше семпл не тормозит. Под отладчиком да, но это обусловлено межпроцессорным взаимодействием, диспатч исключений при отладочном порте замедляется в тысячи раз.

    Нормально - декрипт по одному байту, пока будет увеличиваться размер инструкции возвращаемый лде.
     
  12. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Интерестно будет накрыть где идет много операция , а не простоев, но в принципе жить будет :)

    Теперь вкурил, как всегда начал думать о глобально дизассме.
     
  13. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Clerk
    А как избежать выполнения ложных команд? Например, зашифрованный код 0х60 ..... - инструкция 0х60 будет выполнена, а на самом деле она была частью друго зашифрованного опкода.
     
  14. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    gorodon
    Clerk ответил
    Нормально - декрипт по одному байту, пока будет увеличиваться размер инструкции возвращаемый лде.
    Вот и делает декрипт от ip.
     
  15. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    VEH метод Clerk'а довольно не плох, если еще мозгами дошевелить. Но наэмуляторах от MS все равно у меня "палится" пока что.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    RET
    Это каким образом и что вобще значит ?