· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› IsDebuggerPresent?

<< . 1 . 2 . 3 . 4 .

Посл.отвђт Сообщенiе


Дата: Апр 6, 2004 23:30:20

"сгодиться"- не довод;


Дата: Апр 6, 2004 23:52:17

а как VirtualProtec-то Ж)

А никак. Думаешь, ты один такой умный?


Дата: Апр 8, 2004 16:56:13

Я тут немного отсутствовал...

Asterix
Кстати, не совсем в тему, может ты знаешь как в Дельфи сделать процедуру без пролога и эпилога
Однозначно - незнаю, сам недавно с этим бился.
Получается, если использовать передачу параметров через регистры (т.е. процедура описана с ключевым словом register) и число параметров не более трех.
Придется видимо на Си переходить :(
Кстати, процедура подсчета тактов есть position independed code, так что ее можно просто сдампить.

У меня на 98-й прекрасно всё определяется, также Max, по его словам, тестировал на разных OC
Нее, ОС была одна, только машины разные.
То что я делал, на языке статистики называется нерепрезентативной выборкой, со всеми вытекающими последствиями.
Прикольный эффект получается при работе примера под вмваре.
Если бы нормально протестировать это дело, можно было бы определять и ринг3 отладчики и эмуляторы.


Дата: Апр 8, 2004 18:09:06 · Поправил: RobinFood

Max
Если бы нормально протестировать это дело, можно было бы определять и ринг3 отладчики и эмуляторы.

Случаи разные бывают... вот, например, беру последний тест, переделанный Asterix-ом, просто запускаю его. Получаю [b]Debugger Not Found[b]. Запускаю его под WinDbg, делаю
sxn av
g
Получаю [b]Debugger Found[b]. Пока все логично и хорошо.
Теперь опять запускаю под WinDbg, но на этот раз делаю
sxn av
g 403530
wt MessageBoxA
g
и примерно с одинаковой вероятностью получаю разные результаты.

P.S. 403530 - это EntryPoint. Я до сих пор не знаю, как его обозвать, чтобы WinDbg меня понимал.
image00400000!entry ему не нравится, а других вариатнов я не знаю.


Дата: Апр 8, 2004 18:27:39

RobinFood
Да все возможно...
Я ж для этого и выводил результаты теста на экран - по ним можно понять че происходит - может порог неверно выбран (для твоей машины), а может че другое...
А по результатам примера Астерикса сложно о чем-то судить.


Дата: Апр 8, 2004 18:34:58

RobinFood

WinDbg это ring-3 или ring-0 отладчик?


Дата: Апр 8, 2004 19:22:12

Max
Я ж для этого и выводил результаты теста на экран - по ним можно понять че происходит - может порог неверно выбран (для твоей машины), а может че другое...

Я и так могу сказать, че происходит. wt - это команда пошаговой трассировки ;-D

Asterix
WinDbg это ring-3 или ring-0 отладчик?

И то, и другое. Только для работы в ring-0 нужен второй комп. Естественно, я его запускал в ring-3.


Дата: Апр 8, 2004 19:46:37

RobinFood
wt - это команда пошаговой трассировки
Тогда могу предположить, что в этом случае время паттерна, как и время эксепшена становится [очень] большим (сравнимым?), так как после каждой инструкции срабатывает эксепшн, что ведет к переключению в контекст отладчика.
Все таки, хотелось бы увидеть цифры, а не гадать...

З.Ы. В принципе, автоматическую пошаговую трассировку тоже можно поймать, анализируя время паттерна, но это уже другая история... :)


Дата: Апр 9, 2004 10:35:43

Max
Тогда могу предположить, что в этом случае время паттерна, как и время эксепшена становится [очень] большим (сравнимым?), так как после каждой инструкции срабатывает эксепшн, что ведет к переключению в контекст отладчика.

Так я специально для этого ее и использовал.
У нас есть два замера времени. Уменьшить больший интервал я не могу никак. Зато могу увеличить меньший, что я и сделал :)

Все таки, хотелось бы увидеть цифры, а не гадать...

Ок, сделаю чуть позже.

З.Ы. В принципе, автоматическую пошаговую трассировку тоже можно поймать, анализируя время паттерна, но это уже другая история... :)

Ее можно поймать и другими, более надежными способами :)

Но речь не об этом. Я сильно подозреваю, что это далеко не единственный способ увеличить меньшее время. Наверняка достаточно просто запустить параллельно очень ресурсоемкую задачу с повышенным приоритетом. Например, антивирусное сканирование, которое встречается довольно таки часто. И тогда с очень большой вероятностью твой метод будет давать ложные срабатывания, как при наличии отладчика (ну, это не страшно), так и при его отсутствии (а вот тут возмутятся честные пользователи).

Значит, тебе придется либо пытаться переходить на GetThreadTimes, что может и не получиться, либо отказываться от этой затеи.

Либо думать об альтернативных методах - например, об измерении количества переключений контекста (см. начало седьмой главы Рихтера). Гм... любопытно... а как это количество вообще измеряется?


Дата: Апр 9, 2004 17:53:30

Сделал.

debugger found 51 times of 100

threshold = 970374000
patterntime = 1940748
excepttime = 2561849248

minpatterntime = 727848
minexcepttime = 81189896

maxpatterntime = 4294824792
maxexcepttime = 4271786300

Больше ждать не стал, надоело - эти 100 циклов заняли примерно 3,5 часа. Да уж, действительно "байтораздирающее зрелище". Кстати, был момент, когда я думал, что даже метод с отладкой неработоспособен. В этот момент было 18 из 25 - но потом все равно счет сравнялся :)

А с антивирусом затея провалилась... 400 из 400. Ну ничего, может, я еще что-нибудь придумаю ;)


Дата: Апр 9, 2004 18:32:48

а что, мой результат - 18 из 180 не считается плохим??
повертье мне и не тратьте времени зря.
да, уберите консоли и так тестируйте. получите ложные found-ы.
(консоли - медленнее работают)


Дата: Апр 9, 2004 18:46:03

RobinFood
Да стрелять надо за такие эксперименты :)
Не надо относиться к этому примеру как к полноценной защите, это только маленький кирпич заточеный под один из видов антиотладки.
Ну где ты видел, чтобы время cpuid (patterntime) было равено 1940748?
Самое большее, что я наблюдал среди все видов процов (протестированных мной, а их немного), это порядка двух тысяч тактов.
Так что вставь в экзампел строчку if patterntime > 5000 then format c:, и будет тебе счастье!

З.Ы. Любые цифры полезны, так что спаибо за тест.


Дата: Апр 9, 2004 19:03:21

je_
patterntime = 74
excepttime = 9327748

Мля, такое ощущение, что разговариваешь со стенкой!
Я ж уже писал и не раз, "То что я делал, на языке статистики называется нерепрезентативной выборкой"
Пример сделан чтобы показать, что отношение excepttime/patterntime без отладчика сильно отличается от excepttime/patterntime под отладчиком! Понятие "сильно отличается" очень относительное. Коэффициенты подбираем сами...


Дата: Апр 9, 2004 20:18:02

ув. Max

Вы - как автор идеи - должны либо строго доказать
годность (что подразумевает безошибочность) метода (обнаружения дебуггера),
либо признать метод неполноценным.


Дата: Апр 9, 2004 20:44:36 · Поправил: Asterix

je_

Хоть один разработчик современных протекторов ограничивается одним единственным методом обнаружения отладчика??
Имхо, никто никому ничего не должен доказывать, метод безусловно работает, но если кто-то захочет его использовать он должен понимать соотношения всяческих excepttime/patterntime и правильно задавать/проверять условия.

<< . 1 . 2 . 3 . 4 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.096