Антиотладка с RDTSC

Тема в разделе "WASM.RESEARCH", создана пользователем volodya, 16 янв 2005.

  1. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Люди, приведите мне пример таргета (какой-нибудь exe), который использует подобную защиту и пришлите мне его на мыло, если не трудно.

    Я потом этот топик вообще удалю. Мне просто нужна подобная экзешка.
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    volodya

    Ты никак за упаковщиков взялся ?!

    Не забудь пож-ста про PEB.NtGlobalFlag (Enable heap checking) и IsDebuggerPresent по хипу от bogrus'a (тут или тут)



    А с rdtsc есть некоторые проблемы на P4 model 15.3.х (Prescott) под XP - о-очень большой разброс результатов, под 9х такого нет (см.rdtsc в wintest)
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    leo




    Ты прав, похоже это Hyper-Threading, т.е. один физический процессор предоставляет ОС два своих логических, она об этом не знает и шлет одновременно два потока в эти, по её мнению - физически независимые камни. В нем декодер только один и декодирование выполняется поочередно, а исполнительных частей несколько больше, по-этому многие команды двух разных потоков исполняются действительно одновременно ... многие, но не все, т.ч. для некоторых приложений (последовательностей команд) от этого может быть не польза, а наоборот тормоза, видимо вот и разброс, а 9x не поддерживает многопроцессорность.



    А вообще, то переключение задач ведь может произойти в любой момент, чтоб использовать rdtsc в антиотладке, нужно брать статистику, но никак не "первый попавшийся" результат
     
  5. GPcH

    GPcH Member

    Публикаций:
    0
    Регистрация:
    2 авг 2004
    Сообщения:
    136
    Люди, приведите мне пример таргета (какой-нибудь exe), который использует подобную защиту и пришлите мне его на мыло, если не трудно.

    Я потом этот топик вообще удалю. Мне просто нужна подобная экзешка.


    Обработай DotFIx FakeSigner'ом любой файл и в опициях укажи "Antitracing" - будет rtdsk в наглядном виде :)
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Да, сама по себе идея хорошая, но вот можно ли ее реализовать, чтобы и надежно было и не выкладывать механизм контроля на блюдечке для исследования.

    Понятно, что вариант Max это только тест для иллюстрации возможности. Если брать его в чистом виде, то получается нечто не логичное - генерим исключение и всплываем в отладчике - нате изучайте и раскручивайте клубочек. Такие подставы обычно используются с другим прицелом: заинтересовать исследователя, чтобы он задержался и покапался в этом месте, тогда уж задержка точно будет измеряться секундами и никакие переключения задачи не исказят результат. А для замера времени обработки эксепшена логично было хотя бы замаскировать его вызов (например, делить на 0 в результате правдоподобных вычислений или косить под дурачка, передавая инвалидные указатели в API и т.п.). Но главная проблема здесь все таки - выбор порогового уровня задержки и возможность ложного срабатывания.

    Кстати многочисленные cpuid вокруг rdtsc по-видимому совершенно никчему - тут все настолько приблизительно, что лишний десяток или сотня тактов никакой роли не играет.
     
  7. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    leo

    Если брать его в чистом виде, то получается нечто не логичное - генерим исключение и всплываем в отладчике - нате изучайте и раскручивайте клубочек





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



    volodya

    неужели ты решил добить третью часть? ;)
     
  8. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Так можно написать собиратель тактов для этих проверок: делаем базу, анализируем и заносим туда все rdtsc, потом поочередно запускаем прогу, патча за каждым rdtsc код типа "mov база,eax" и "mov база,edx", давим её и переходим к следующему rdtsc. Как соберем, то готовим плугин к олли, который при трассировании будет делать mov eax,база. Грубо конечно, но можно попытатся додумать
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Может быть надёжнее будет "изменить логику работы" чего-нибудь вроде KiUserExceptionDispatcher, пусть корректирует TSC.



    [edit]

    Хотя я туплю.. wrmsr обнулит старшие 32 бита :-/
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Уж и не знаю, куда заметки по RDTSC строчить.

    Запостил в продолжение "IsDebuggerPresent?"

    А то volodya грозился прибить эту тему - жалко будет непосильных трудов и бессонных ночей :)
     
  11. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Ну, не буду :)
     
  12. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Неплохой пример антиотладки с RDTSC -- StarForce ;)

    Там замеры TSC связаны с таймером (VTD_Get_Real_Time

    для 9x). Кроме того, используются дублирующие переменные для результатов предыдущих замеров. Если вдруг контролируемый участок выполнялся >1 сек., то ... ;)

    Могу кинуть кусок откомментированного пкода (SF1) если

    интересно ...
     
  13. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    _BC_



    А можно и прямо в форум :)
     
  14. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
  15. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    SVKP.. очень культурн.ый RDTSC