Broken Sword > "на дебагер из IDA не действует" Ну дык и я говорю, если дебагер просто идет по шагам, не заглядывая далеко вперед, то ес-но все шито-крыто. Разница в том, что Оля дизасмит и анализирует код из загруженного образа, который затем и исполняет\дебажит, а IDA (видимо) берет данные из отдельного образа, а дебажит или эмулит другой _BC_ Ссылка просто для прикола или там можно найти нечто инересное и познавательное ? И чего на лбу написать посоветуешь, шоб лучше смотрелось ?
Код (Text): Ticks for access to page 000080000000000056456881 <- data 000000000000000056742267 <- code 000000000000000000003000 <- limit IsDebuggerPresent: Yes Получено после многократного запуска (не под отладчиком) Asterix зело стремный метод отпределения отладчика
masquer Не понял, почему при (56 млн. >> 3 тыс.) выдается Yes, а не No ... Это мой глюк или твой ? PS: И что у тебя за винда интересная, которая при многократных запусках постоянно подгружает данные с диска, а не берет их из файлового кэша То, что метод "стремный" (по крайней мере в сырой тестовой реализации) думаю все понимают и поэтому широко улыбаются ))
Для AMD метод не катит (ибо TIME_STAMP_COUNTER переписывается полностью в отличие от Интела). То есть, остановился, снял текущее значение TSC, проанализировал что надо и сколько надо, перед переходом на следующую - подкорректировал TSC как тебе надо (с учетом вышеприведенных тестов ) Интел в отличие от АМД дает перезаписывать только нижние 32 разряда 64 бит TSC.
leo Не знаю, чей глюк и заметно ли это в моей цитате, вот строка о данных: 000080000000000056456881 <- data Винда хр сп2, проц а64 х2
Под VMWare & Win2000 & Olly: --------------------------- IsDebuggerPresent by RDTSC --------------------------- Ticks for access to page 000000000000000000020783 <- data 000000000000000000007168 <- code oooooooooooooooooooo3000 <- limit IsDebuggerPresent: No --------------------------- OK --------------------------- А это обычной системе WinXP_SP2: --------------------------- IsDebuggerPresent by RDTSC --------------------------- Ticks for access to page 000000000000000000000686 <- data 000000000000000000000259 <- code oooooooooooooooooooo3000 <- limit IsDebuggerPresent: Yes --------------------------- ОК ---------------------------
Все-таки алгоритм дельный - его только надо сделать статистически надежным. Например производить сравнение доступа со страницами, к которым отладчик попросту не протянет щупальца (выделенные во время выполнения, например - спроецированный в память файл).
masquer Отрицательную разность двух TSC придется считать глюком винды или происками какого-нить FakeRDTSC В коде вроде все верно - берется разность 64-битных значений и наличие минуса тут никак не объяснишь. Придется на всякий пожарный делать fabs ) alpet, Asterix AMD как всегда рулит !!! И с VMWare тоже видимо все ясно Вот решил попробовать в качестве опорного значения использовать время чтения из страницы, выделенной VirtualAlloc. Без отладчика время доступа к этой странице и второй странице кода получается примерно одинаковым. Но интересно, что под Олей без плагина HideDebugger время доступа к аллоку стабильно увеличивается примерно в 2 раза (по сравн.с безотладочным), а при включении защиты от IsDebuggerPresent разница сохраняется, но уменьшается до 25% (хотя если просто в самой проге сбросить этот флаг, то остаются те же 2 раза). Выходит, что BeingDebugged каким-то хитрым образом и на выделение страниц физ.памяти влияет
leo Можно как вариант запускать из процесса, дополнительный процесс (или внедрять DLL в чужой процесс), который будет так-же производить бенчмарк, и отдавать результаты по какому-нибудь IPC, для сверки. Вряд-ли Olly сможет начать себя отлаживать, если DLL внедрить в нее
Уже опробовано в плагине и выдало такие результаты под отладчиком ) --------------------------- IsDebuggerPresent by RDTSC --------------------------- Ticks for access to page 000000000000000000005260 <- data 000000000000000000003852 <- code oooooooooooooooooooo3000 <- limit IsDebuggerPresent: No
syser палится: 3000 <- limit 32392 <- data 444 <- code я б тебе с удовольствием вытесал. еще б 10$ приплатил. тебе не пох?
Asterix > "Уже опробовано в плагине" Насколько я понял, это ты SetProcessWorkingSetSize, предложенный S_T_A_S_'ом, попробовал ? Отлично Но видимо в таком случае возможна обратная проверка, т.е. обращение к страницам, которые заведомо должны быть инициализированными - заголовок PE, секция импорта, основная куча, куча LDR. Сегодня проверить не смогу, но завтра обязательно поковыряюсь И еще интересный момент: Оля должна каким-то образом отлавливать запись в секцию кода. Скорее всего, при переходе к новой странице кода в окне дизассемблера, она должна проверять флаг модификации страницы (не знаю как это возможно из ring3?) и соответвенно перечитывать и дизасмить измененную страницу. В таком случае можно попробовать в самой проге модифицировать страницу и вызвать SetProcessWorkingSetSize, чтобы сделать ее недействительной. Ну а затем прыгнуть на конец предыдущей страницы, чтобы изменения попали в окно дизасма (это конечно уже получается не так скрытно, но найти применение видимо можно). Кстати подобный вариант - установить OEP на конец страницы (без SetProcessWorkingSetSize), я уже попробовал и "скромный" W32Dasm на этот трюк поймался )) А куда ему деваться, ведь он должен показать последующий код. Видимо и дебагер ИДЫ должен купиться на эту фишку, если конечно это не хитрый эмулятор
Ага, поковыряйся. А то самостоятельно изучать тонкости логики загрузчика лень, проще посмотреть, к каким страницам будут обращения в IsDebuggerPresent'е и закоммитить их после выгрузки всего working set'а Вообще, сама идея очень интересная, но применительно к антиотладке толк не очень большой - плохо согласуется с упаковкой\криптовкой секций.
[offtop] Broken Sword Во-первых, на всех нормальных форумах реклама в подписи запрещена, во-вторых, это не первый прецедент с твоей стороны. Всё просто. Рекомендация написать рекламный слоган про diprotector на лбу и ходить с ним по городу -- тонкий намек на ошибочный выбор целевой аудитории и места размещения для рекламы diprotector'a. [/offtop]
но тут-то не запрещена, или уже есть правила с учетом фич нового форума? У меня лично показ подписей вообще отключен Насчет целевой аудитории - согласен, тут ее скорее нет, чем она есть
000000000000000000011389 <- data 000000000000000000000331 <- code oooooooooooooooooooo3000 <- limit IsDebuggerPresent: Yes Olly: 000000000000000000000017 <- data 000000000000000000000705 <- code oooooooooooooooooooo3000 <- limit IsDebuggerPresent: Yes XP SP1 Duron 950