протестируйте свой любимый отладчик на предмет палева с DRx регистрами через GetThreadContext и их сброса через SetThreadContext (см. http://nezumi.org.ru/souriz/adbg-getcontext.zip). Олька, WinDbg - все они палятся, позволяя отлаженной программе снимать аппаратные точки останова. soft-ice не палится (не показывает DRx и не дает их менять), но вот soft-ice, запущенный под VMWare, показывает в DRx мусор, что может использоваться для его детекции.
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. ну и чем он может в данном случае помочь?!
EFlags : 00000303h [TF is set] Dr0 : 00400000h Dr1 : 00000000h Dr2 : 00000000h Dr3 : 00000000h Dr6 : FFFF0FF0h Dr7 : 00000000h это с ollydbg_hardware_breakpoint'ом ну и чем он мне помог?
я сейчас полусонный, надо будет посмотреть сорец и понять что значит палятся, ибо по написанному кажется что больше палится как раз айс
// offtop гы-гы, действительно лольно получаеццо, наши кодеры(Hellsp@wn&Archer) покрыли большую часть фантомкой - сделали hook NtSetContextThread , а этот банальный GetThreadContext упустили ;(, вот как вариант по железке задетектить ольку есть возможность! Нуно сделать новую опцию hook NtGetContextThread, чтобы в структуре для хитрых протов, значения отладочных регистров всегда были равны нулю… Hellspawn
Мы не забыли. Там есть много тонких моментов =) Когда я придумаю как получше реализовать, то прикрутим... Ведь надо возвращать не просто нули, а то, что прога сама могла туда положить =)
Обьясните, (немного пьяненькому) - это можно считать за отладчик? Он хороший хоть? Чтото никак его не полюблю Вобщем я так и не понял о чем мне должны были прокукарекать ;(
Hellspawn Так вроде как вариантов нет - ИМХО(!), если только привязку жесткую делать, но сейчас модификаций ольки столько, разве что только для своей сборки делать!!! Для работы с железными бряками он нужных фунок не делал, ну или я их не заметил, хотя помню, тщательно искал, но не нашел… Ты же мог сам заметить, жесткий контроль автор в отношении SEH`а сделал, да и вобще много чего еще Но в функе Sethardwarebreakpoint он запись по определенным адресам делает, структура парсинга этих бряков такая Код (Text): t_hardbpoint struc 1 addr_ dword ? ; Base address of hardware breakpoint size_ dword ? ; Size of hardware breakpoint type_ dword ? ; Type of breakpoint, one of HB_xxx reserved dd 4 dup (?) ; Reserved for the future t_hardbpoint ends HB_FREE equ 0 ; Breakpoint is not used HB_CODE equ 1 ; Active on command execution HB_ACCESS equ 2 ; Active on read/write access HB_WRITE equ 3 ; Active on write access HB_IO equ 4 ; Active on port I/O HB_ONESHOT equ 5 ; One-shot on command execution HB_STOPAN equ 6 ; One-shot on command and stop HB_TEMP equ 7 ; Temporary on command execution На чистой ольке эти адреса хранятся t_hardbpoint по адресу 004D8D70h Тут идет запись Код (Text): 004087E8 MOV DWORD PTR DS:[EAX*4+4D8D70],EDI 004087EF MOV EDX,DWORD PTR SS:[EBP+C] 004087F2 MOV DWORD PTR DS:[EAX*4+4D8D74],EDX 004087F9 MOV DWORD PTR DS:[EAX*4+4D8D78],ESI узнать какие мы в ольке ставили железные бряки, сравнить их с присутствующими в текущем контексте Thread`а и вместо совпавших при сравнении, возвращать в структуре нули и соответствующие этому обнулять/устанавливать флаги в регистрахDrX..7. А я даже обозначил бы лично, что просто смело возвращать нули и все, ведь в легендарном фантомке имеюццо опции которые в любой момент можно вкл/выкл!!! Кому надо включат, кому не надо выключат, главное чтобы было! Но тебе виднее, у тебя же исходники
Хм, надо будет поглядеть на досуге... Надо просто не много разграничить, когда прога ставит бряки, а когда ольга, ну я вроде теперь в теме =) (примерто так как я делал в протект дрх, но и там не всё гладко) з.ы. у тя есть моя аська? стукни как-нить...
А что без хардварных бряков нет дебага? kaspersky я не понял, что значит айс не дает менять DRx регистры? к сожалению не могу запустить сейчас айса(в системе стоят и старфорс и секьюром %) Просто в таком случае прога поставив бряк и обнаружив что он не поставился может считать что запалила отладчик, или я опять не понимаю?
Hellspawn неа, я неявляюсь нооркаманом подпольного движения аськЬю %), у меня даже постоянного мыла нет О-я даже обозначил бы, что превад таких вещей - ЗЛО, лучше почуть писать апэтом, пусть остается в архивах форумов(!), кому нужно будет заюзают поиск, потом еще спасибо за это скажут… даже сам Рем у малоимущего народа в свое время просил поделиццо с ним инфой PSDK ольки наверно хотел ольку вывести на новый уровень, хотя конкретные цели он и не обозначил прошло время, и появилась(…), но мы могли иметь гораздо больше сейчас, если бы ему помогли тогда… - ИМХО
kaspersky Суть в подходе используемом в отладчике для работы бряков. Если он основан на DR регистрах - считай можешь отлаживать только свой код, или код не принадлежащий защитным механизмам. Причина того - даже перехват GetThreadContext и SetThreadContext может с легкостью обходится защитным механизмом программы. Поскольку Microsoft не признает регистры отладки как эксклюзивный ресурс, то отладчик для защитных механизхмов ВООБЩЕ НЕ ДОЖЕН ИХ ПОЛЬЗОВАТЬ. Крис ты прекрасно понимашь, что, к примеру, технология x-VT (я намеренно опустил Pacifica) спокойно может обойти любую существующую на сегодняшний день защиту, а DR регистры это уже вчерашний день => неактуально и нефундаментально.