|
|
| Посл.отвђт | Сообщен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 и правильно задавать/проверять условия. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.096 |