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

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

  1. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Задача - зашифровать всю память процесса. Далее при доступе к участку памяти расшифровать нужный кусок, а потом опять зашифровать.

    Требования два.

    1. Должно работать на многопоточных приложениях
    2. Размер расшифровываемого блока должен быть МЕНЕЕ 1 страницы, т.е. расшифровывать постранично нельзя. По причине (1). Если приложение многопоточное и весит 8 кб, то скорее всего все 8 кб будут в открытом доступе.
    Нужно размер блока сократить до 20-100 байт примерно.

    Помогите советом.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Скачай армадиллу :)
    ну или статьи по взлому армадиллы
     
  3. Clerk

    Clerk Забанен

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

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Задача - сбить сигнатурный сканер памяти :)
    Чтобы при сканировании памяти антивирусы не могли найти в ней сигнатуру
     
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Какие ав так работают, если не секрет?
     
  6. Clyde

    Clyde New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    154
    др веб точно
     
  7. VaZoNeZ

    VaZoNeZ New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    121
    Ищут сигнатуру в памяти? Да ну, серьезно?
     
  8. Clyde

    Clyde New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    154
    Да, сканируют ап процессов
    кто не верит скачайте CureIt и убедитесь сами
    В самом начале проверяет запущенные процессы
     
  9. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Время от времени сканирует память процессов.

    Может легче процесс тогда скрыть?
     
  10. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Msoft
    ВинДефендер, ДрВеб, БитДефендер, Нод32

    Возьми криптор, накрой им малварь, и запусти со включенным нод32.
    Если файл удалился - значит сработал сканер памяти.
    Алертов при этом никаких не будет ;)

    sysexit
    Чтобы процесс скрыть - его нужно сперва запустить.

    Задача стоит конкретно - зашифровать память. :)
     
  11. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Зашифруйте файл
    Запустите файл
    Скройте процесс
    Расшифруйте малварь
    ???
    PROFIT
     
  12. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    sysexit
    в данном случае криптор рассматривается как мальвар. Так что скрывальщик процессов тоже надо прятать от поиска процессов. Как-то так.
     
  13. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    sysexit
    Как скрыть процесс без руткита?
    Удаление из лдр не спасает.
     
  14. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    это что?
     
  15. Clerk

    Clerk Забанен

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

    Из юзермода код не скрыть. Можно его изменять динамически.
     
  16. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Clerk
    На сколько я понимаю, всё равно придётся снимать PAGE_NOACCESS (для доступа к странице),
    а это для
    не подойдёт.

    Единственное, из K-mode можно для доступа к странице добавить в каталог страниц ещё элемент, но это на мой взгляд это - извращение.
    Тем более, что
    для каждого доступа к памяти будет прогпамму тормозить.
    dyn
    Вобщем из U-mode не получится, из K-mode - сложно.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    qwe8013
    PAGE_NOACCESS снимать не нужно, это редирект на другой регион. Вот семпл для кодосекции(потоковая расшифровка инструкций, в памяти всегда расшифрована только одна, семпл из пакета Хатчессона с простейшей надстройкой):
    Код (Text):
    1. .data
    2. gpLastIp    PVOID ?
    3. gLastIpLength   ULONG ?
    4.  
    5. .code crypt
    6.     include Crypt.inc
    7. .code
    8.     include VirXasm32b.asm
    9.  
    10. Encrypt proc Ip:PVOID, IpLength:ULONG
    11.     mov ecx,IpLength
    12.     mov eax,Ip
    13. @@:
    14.     xor byte ptr [eax + ecx - 1],96H    ; ACD0BEFAH
    15.     loop @b
    16.     ret
    17. Encrypt endp
    18.  
    19. VEH proc uses ebx ExceptionPointers:PEXCEPTION_POINTERS
    20. Local Buffer[16]:BYTE
    21.     mov eax,ExceptionPointers
    22.     mov eax,EXCEPTION_POINTERS.ExceptionRecord[eax]
    23.  
    24.     cmp EXCEPTION_RECORD.ExceptionCode[eax],STATUS_BREAKPOINT
    25.     mov ebx,EXCEPTION_RECORD.ExceptionAddress[eax]
    26.     jne Chain
    27.    
    28.     cmp ebx,offset gpBase
    29.     jb Chain
    30.  
    31.     cmp ebx,offset gpLimit
    32.     cld
    33.     jnb Chain
    34.    
    35.     mov edi,gpLastIp
    36.     mov ecx,gLastIpLength
    37.     .if Edi
    38.     mov eax,0CCH    ; Int3
    39.     rep stosb
    40.     .endif
    41.  
    42.     lea eax,gcBase
    43.     sub eax,offset gpBase
    44.     lea esi,[ebx + eax]
    45.    
    46.     lea edi,Buffer
    47.     mov ecx,15
    48.     rep movsb
    49.  
    50.     lea esi,Buffer
    51.     invoke Encrypt, Esi, 15
    52.    
    53.     CAll VirXasm32
    54.     movzx ecx,al
    55.     mov edi,ebx
    56.     mov gLastIpLength,ecx
    57.     mov gpLastIp,ebx
    58.     rep movsb
    59.    
    60.     mov eax,EXCEPTION_CONTINUE_EXECUTION
    61. Exit:
    62.     ret
    63. Chain:
    64.     xor eax,eax
    65.     jmp Exit
    66. VEH endp   
    67.  
    68. Start:
    69.     invoke RtlAddVectoredExceptionHandler, 1, addr VEH
    70.     %APIERR
    71. gpBase::
    72.     ...
    73. gpLimit:
    74. end Start
    Исходный код покриптован ксором и заменён на 0xCC.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Забыл там сохранить Esi & Edi, но и без них работает :)
     
  19. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Windows 2003 x64 server - упало :dntknw:
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    dyn
    Раздел WIN32. Оно и должно было упасть. Код 32-х битный.