Как удалить рег-ключ ExeCryptor?

Тема в разделе "WASM.RESEARCH", создана пользователем Bobs, 28 фев 2009.

  1. Bobs

    Bobs New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    13
    Собственно, сабж. Интересует программная реализация сего действа. Наверняка кто-то делал, подскажите, плиз.
     
  2. Bobs

    Bobs New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    13
    Свои ключи ExeCryptor в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved. Проблема в том, что они "скрытые" и обычниыми API их не удалить - RegDeleteKey и SHDeleteKey...
     
  3. Clerk

    Clerk Забанен

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

    Bobs New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    13
    Нет, "скрытые" здесь означает, что ключ нельзя ни открыть, ни удалить стандартным regedit.
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Bobs
    Возможно нет прав. Попробуйте стать владельцем ключа - right click -> permissions.
    Или они невидимые?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Bobs
    Сказал ведь, используй натив. Винапи не может работать с такими строками, например если в конце два нуля, поэтому регэдит и не отображает.
     
  7. Bobs

    Bobs New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    13
    Извиняюсь за тупой вопрос, но что значит натив? Какой-нибудь пример можно.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    NtOpenKey, NtDeleteKey etc.
     
  9. Bobs

    Bobs New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    13
    Clerk
    То есть, я так понимаю, удаление такого ключа возможно только посредством драйвера?
     
  10. _tmp17628

    _tmp17628 New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2009
    Сообщения:
    144
    Bobs
    ZwOpenKey, ZwDeleteKey etc
     
  11. netuser

    netuser Юрий

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    166
    Bobs
    Я так понял, адрес ключа известен, вот только удалить его даже с правами админа не удаётся. Попробуй воспользоваться стандартным планировщиком с правами system, который позволяет просматривать и модифицировать все ветви реестра без исключения, защищенные в том числе.
     
  12. Bobs

    Bobs New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    13
    netuser
    Ключ этот можно удалить и посредством программы Registry Trash Keys Finder, она находит ключи этого протектора, и даже позволяет просматривать содержимое ключей и удалять такие ключи. У меня же появилась необходимость реализовать это в своей программе, и я не знаю как это сделать, если только не писать драйвер.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это многих вводит в заблуждение, думою следует обьяснить.
    Это сервисы, не правильно говорить о них как об экспортах, правильно говорить как об идентификаторах.
    NtOpenKey подразумевает под собой ID сервиса, а это число посредством которого он и будет вызван(индекс в таблице дескрипторов), например для вызова тогоже NtOpenKey мы можем использовать код:
    Код (Text):
    1.     mov eax,0x77
    2.     mov edx,esp
    3.     int 0x2e
    Сдесь 0x77 это и есть идентификатор сервиса NtOpenKey.
    Также подразумевать под NtOpenKey функцию будет не совсем верно, так как функция имеет некоторую модель вызова, поэтому её конвенция вызова относительна. Относительно экспорта она будет одной, относительно шлюза совсем другой. В юзермоде экспортируются переходники(заглушки, стубы) для вызова сервиса Zw* и Nt*, они имеют общую точку входа. Ядерные хэндлеры сервисов имеют сответственно имена Nt*. Также неверно говорить про соответствие имени хэндлера сервиса в ядре и экспортируемого стуба в юзермоде. Некоторые считают что для для хэндлера сервиса в ядре(Nt*) соответствующий стуб в ntdll будет иметь имя Zw*, это не верно, например в некоторых версиях сервис NtSuspendProcess не имеет соответствующего стуба ZwSuspendProcess, но имется экспортируемый стуб с именем NtSuspendProcess. Обычно если говорят про сервис, то говорят имя его ядерного обработчика Nt* и для юзермода подразумевают его индекс.
    Думою понятно обьяснил.
     
  14. seeQ

    seeQ New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2003
    Сообщения:
    71
    все верно, execryptor использует строки с "00".
     
  15. Coderess

    Coderess New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    41
    Код (Text):
    1. .text:7C929C87                 public RtlpNtOpenKey
    2. .text:7C929C87 RtlpNtOpenKey   proc near
    3. .text:7C929C87
    4. .text:7C929C87 arg_0           = dword ptr  8
    5. .text:7C929C87 arg_4           = dword ptr  0Ch
    6. .text:7C929C87 arg_8           = dword ptr  10h
    7. .text:7C929C87
    8. .text:7C929C87                 mov     edi, edi
    9. .text:7C929C89                 push    ebp
    10. .text:7C929C8A                 mov     ebp, esp
    11. .text:7C929C8C                 mov     eax, [ebp+arg_8]
    12. .text:7C929C8F                 test    eax, eax
    13. .text:7C929C91                 jz      short loc_7C929C97
    14. .text:7C929C93                 and     dword ptr [eax+0Ch], 0FFFFFFCFh
    15. .text:7C929C97
    16.  
    17.  
    18. ; Вызов ZwOpenKey
    19.  
    20. .text:7C929C97 loc_7C929C97:                           ; CODE XREF: RtlpNtOpenKey+Aj
    21. .text:7C929C97                 push    eax
    22. .text:7C929C98                 push    [ebp+arg_4]
    23. .text:7C929C9B                 push    [ebp+arg_0]
    24. .text:7C929C9E                 call    ZwOpenKey
    25. .text:7C929CA3                 pop     ebp
    26. .text:7C929CA4                 retn    10h
    27. .text:7C929CA4 RtlpNtOpenKey   endp
    28.  
    29. ; Вызывает следующее
    30. .text:7C90DD3C                 public ZwOpenKey
    31. .text:7C90DD3C ZwOpenKey       proc near               ; CODE XREF: RtlOpenCurrentUser+43p
    32. .text:7C90DD3C                                         ; sub_7C91D18E+F1p ...
    33. .text:7C90DD3C                 mov     eax, 77h        ; NtOpenKey
    34. .text:7C90DD41                 mov     edx, 7FFE0300h
    35. .text:7C90DD46                 call    dword ptr [edx]
    36. .text:7C90DD48                 retn    0Ch
    37. .text:7C90DD48 ZwOpenKey       endp
    Clerk

    Код (Text):
    1. mov eax,0x77
    2. mov edx,esp
    3. int 0x2e
    почему такой вызов? и не sysenter
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Coderess
    Этот универсальнее, впрочем какая разница.
    По адресу 0x7FFE0300 указатель на KiFastSystemCall, а она загружает в Edx указатель на стек и юзоет сервис посредством Sysenter, если процессор её не поддерживает то будет вызов через прерывание.