# протестируйте свой отладчик

Тема в разделе "WASM.HEAP", создана пользователем kaspersky, 8 ноя 2007.

  1. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    протестируйте свой любимый отладчик на предмет палева с DRx регистрами через GetThreadContext и их сброса через SetThreadContext (см. http://nezumi.org.ru/souriz/adbg-getcontext.zip).

    Олька, WinDbg - все они палятся, позволяя отлаженной программе снимать аппаратные точки останова.

    soft-ice не палится (не показывает DRx и не дает их менять), но вот soft-ice, запущенный под VMWare, показывает в DRx мусор, что может использоваться для его детекции.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    для Olly есть плагин "Anti Anti BPM"
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Anti Anti Hardware Breakpoint
    This plug-in for OllyDbg was written to hook into NTDLL and restore the DRx registeres after a Structured Exception Handler (SEH) event. Essentially, an anti anti hardware breakpoint plug-in.

    ну и чем он может в данном случае помочь?!
     
  4. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    EFlags : 00000303h [TF is set]
    Dr0 : 00400000h
    Dr1 : 00000000h
    Dr2 : 00000000h
    Dr3 : 00000000h
    Dr6 : FFFF0FF0h
    Dr7 : 00000000h

    это с ollydbg_hardware_breakpoint'ом ;)
    ну и чем он мне помог? ;)
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    я сейчас полусонный, надо будет посмотреть сорец и понять что значит палятся,
    ибо по написанному кажется что больше палится как раз айс :)
     
  6. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    В сисере проблема решается на раз-два
     
  7. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    // offtop
    гы-гы, действительно лольно получаеццо, наши кодеры(Hellsp@wn&Archer) покрыли большую часть фантомкой - сделали hook NtSetContextThread ;), а этот банальный GetThreadContext упустили ;(, вот как вариант по железке задетектить ольку есть возможность! Нуно сделать новую опцию hook NtGetContextThread, чтобы в структуре для хитрых протов, значения отладочных регистров всегда были равны нулю…
    Hellspawn ;) :)
     
  8. Hellspawn

    Hellspawn New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2006
    Сообщения:
    310
    Адрес:
    Москва
    Мы не забыли. Там есть много тонких моментов =) Когда я придумаю как получше реализовать, то прикрутим... Ведь надо возвращать не просто нули, а то, что прога сама могла туда положить =)
     
  9. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Обьясните, (немного пьяненькому) - это можно считать за отладчик? Он хороший хоть? Чтото никак его не полюблю :dntknw:
    Вобщем я так и не понял о чем мне должны были прокукарекать ;(
     
  10. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    Hellspawn
    Так вроде как вариантов нет - ИМХО(!), если только привязку жесткую делать, но сейчас модификаций ольки столько, разве что только для своей сборки делать!!!
    Для работы с железными бряками он нужных фунок не делал, ну или я их не заметил, хотя помню, тщательно искал, но не нашел…
    Ты же мог сам заметить, жесткий контроль автор в отношении SEH`а сделал, да и вобще много чего еще
    Но в функе Sethardwarebreakpoint он запись по определенным адресам делает, структура парсинга этих бряков такая
    Код (Text):
    1. t_hardbpoint struc 1
    2.         addr_       dword   ?       ; Base address of hardware breakpoint
    3.         size_       dword   ?       ; Size of hardware breakpoint        
    4.         type_       dword   ?       ; Type of breakpoint, one of HB_xxx  
    5.         reserved    dd 4 dup (?)    ; Reserved for the future
    6. t_hardbpoint ends
    7.  
    8. HB_FREE             equ     0               ; Breakpoint is not used
    9. HB_CODE             equ     1               ; Active on command execution
    10. HB_ACCESS           equ     2               ; Active on read/write access
    11. HB_WRITE            equ     3               ; Active on write access
    12. HB_IO               equ     4               ; Active on port I/O
    13. HB_ONESHOT          equ     5               ; One-shot on command execution
    14. HB_STOPAN           equ     6               ; One-shot on command and stop
    15. HB_TEMP             equ     7               ; Temporary on command execution
    На чистой ольке эти адреса хранятся t_hardbpoint по адресу 004D8D70h
    Тут идет запись
    Код (Text):
    1. 004087E8    MOV DWORD PTR DS:[EAX*4+4D8D70],EDI
    2. 004087EF    MOV EDX,DWORD PTR SS:[EBP+C]            
    3. 004087F2    MOV DWORD PTR DS:[EAX*4+4D8D74],EDX      
    4. 004087F9    MOV DWORD PTR DS:[EAX*4+4D8D78],ESI
    узнать какие мы в ольке ставили железные бряки, сравнить их с присутствующими в текущем контексте Thread`а и вместо совпавших при сравнении, возвращать в структуре нули и соответствующие этому обнулять/устанавливать флаги в регистрахDrX..7.
    А я даже обозначил бы лично, что просто смело возвращать нули и все, ведь в легендарном фантомке имеюццо опции которые в любой момент можно вкл/выкл!!! Кому надо включат, кому не надо выключат, главное чтобы было!
    Но тебе виднее, у тебя же исходники :)
     
  11. Hellspawn

    Hellspawn New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2006
    Сообщения:
    310
    Адрес:
    Москва
    Хм, надо будет поглядеть на досуге... Надо просто не много разграничить, когда
    прога ставит бряки, а когда ольга, ну я вроде теперь в теме =) (примерто так как я
    делал в протект дрх, но и там не всё гладко)

    з.ы. у тя есть моя аська? стукни как-нить...
     
  12. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    А что без хардварных бряков нет дебага?

    kaspersky
    я не понял, что значит айс не дает менять DRx регистры? к сожалению не могу запустить
    сейчас айса(в системе стоят и старфорс и секьюром %) Просто в таком случае прога
    поставив бряк и обнаружив что он не поставился может считать что запалила отладчик,
    или я опять не понимаю?
     
  13. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    Hellspawn
    неа, я неявляюсь нооркаманом подпольного движения аськЬю %), у меня даже постоянного мыла нет :dntknw:
    О-я даже обозначил бы, что превад таких вещей - ЗЛО, лучше почуть писать апэтом, пусть остается в архивах форумов(!), кому нужно будет заюзают поиск, потом еще спасибо за это скажут…
    даже сам Рем у малоимущего народа в свое время просил поделиццо с ним инфой PSDK ольки
    наверно хотел ольку вывести на новый уровень, хотя конкретные цели он и не обозначил
    прошло время, и появилась(…), но мы могли иметь гораздо больше сейчас, если бы ему помогли тогда… - ИМХО
     
  14. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    kaspersky

    Суть в подходе используемом в отладчике для работы бряков. Если он основан на DR регистрах - считай можешь отлаживать только свой код, или код не принадлежащий защитным механизмам. Причина того - даже перехват GetThreadContext и SetThreadContext может с легкостью обходится защитным механизмом программы. Поскольку Microsoft не признает регистры отладки как эксклюзивный ресурс, то отладчик для защитных механизхмов ВООБЩЕ НЕ ДОЖЕН ИХ ПОЛЬЗОВАТЬ. Крис ты прекрасно понимашь, что, к примеру, технология x-VT (я намеренно опустил Pacifica) спокойно может обойти любую существующую на сегодняшний день защиту, а DR регистры это уже вчерашний день => неактуально и нефундаментально.