Изощренные методы проверки даты

Тема в разделе "WASM.RESEARCH", создана пользователем gloomyraven, 15 окт 2007.

  1. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Попалась мне програмка, точнее комплекс, стоимостью 9млн рубликов :) защита которой основана на хешах.
    Состоит примерно из 15 модулей, в файле с лицензией есть хеш для каждого модуля. Место, где прога насилует хеши я нашел, а разбираться долго... ладно отошел немного от топика.
    Как я понял прога получает текущую дату, хеширует и сравнивает с тем, что в файле. Но никак не могу отловить то место, где эта дата получается. Функции типа getsystemtime, gettickcount, filetimetosystemtime не использует.
    Есть фарианты, что она берет дату из реестра или дату изменения какого-нть файла, но это тоже не то... А может и напрямую с нтдлл работает (главный модуль в виде сервиса).
    Хотелось бы обсудить кто с какими проверками сталкивался.
     
  2. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    можно получить дату из переменной окружения %DATE%
     
  3. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    PIMAGE_FILE_HEADER->TimeDateStamp;
     
  4. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    KiNDeR
    А %DATE% динамически обновляется или только при загрузке?

    nester7
    По-моему это немного не то, ты имеешь в виду PE заголовок?

    All
    Возможно ли получение даты из сервиса (драйвера) напрямую из биос, т.е. в обход системных библиотек? Как можно отловить это? Или можно, например, выдрать часть кода из kernel32.dll (GetSystemTime) и ntdll и работать с ядром чтобы получить дату? Как еще можно ее получить не затрагивая железо?
    Может есть универсальный метод отловить гада? У меня есть вариант попробовать использовать Windbg (ненавижу его). В нем есть замечательный плагин по слежению за АПИ вызовами на удаленной машине. Сегодня попробую и напишу.
     
  5. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    скорее динамически, т.к. у меня комп не вырубается уже 211 суток, а скрипты с использованием %DATE% работают нормально...
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    gloomyraven
    Не стыкуется - если ты понял, что происходит, то почему не можешь понять - где это происходит? Интуиция?
     
  7. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    crypto
    Смотри: Понять защиту можно как ты сказал интуитивно. Ведь есть файл с хешами, который читается при старте сервиса, есть дата... Если дату менять, то сервис не грузится (найти место где именно он не грузиться почти нереально, там видимо неявные проверки). Я нашел место, где открывается файл с лицензиями(ловится элементарно на CreateFileA). Недалеко от этого места есть функция, которая в цикле берет каждую из 15 хешей и производит с ними математические операции. Разбираться с чем именно сравниваются эти хеши можно, но долго, я думаю есть более простой способ. И этот способ заключается в нахождении места, где получается дата.
     
  8. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    KiNDeR
    Можешь описать поподробнее схему получения даты через %DATE%. Я имею в виду с точки зрения системы, т.е. какие ф-ии используются, где что хранится?
     
  9. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    ну самый очевидный способ это:
    Код (Text):
    1. GetEnvironmentVariable(lpBUFFER, "DATE", sizeof.lpBUFFER)
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    gloomyraven
    Место считывания даты может быть, например, зашифровано в тех кусках кода, которые ты не смотрел. Это можно выяснить, если либо подебужить файл до умопомрачения, либо дизасмить его в IDA и понять общую идею (такие куски довольно быстро определяются).
    ЗЫ
    Там не технология FlexLM случайно используется?
     
  11. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    crypto
    Насчет флехЛМ не знаю, но если дизасмить, то многое не показывается, наверное шифрованный...

    Выкидываю ехешник, кому не лень посмотреть. Файл с лицензиями называется "licenses".
    http://webfile.ru/1557883
    пароль: 12345
     
  12. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Думаю решение лежит на поверхности... не стоило так глубоко копать, я уж собирался ставить хуки на нативАПИ. Нашел место, где вроде че-то с датами делается. Посмотрел импорт: MSVCRT.DLL!localtime и еще пара похожих ф-ий. Только пока не могу найти документацию по ф-иям из MSVCRT... Никто не знает?
     
  13. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    И разве эта библиотека не использует kernel32?
     
  14. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    Пардон по поводу глупого вопроса о MSVCRT :) нашел все в MSDN`е :) Но что-то мне не верится, что в продукте ТАКОЙ стоимости могли тупо проверять дату с использованием run time dll... без шифрования и защиты от отладки...
     
  15. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    gloomyraven
    Я бы тебе мог привести пример дорогого комплекса (скажем, стартовая цена за 1 лицензию 250 килобаксов), который можно было без труда либо кракнуть, либо сгенерить лицензию. Так что, не бери в голову, иногда вся эта безумная математика и обилие кода висит на одной-двух соплях, которые разработчики просто не могут себе представить (они же в код не залазят :))))))
     
  16. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    crypto
    В принципе согласен с тобой, что если делают такой дорогой софт, то не для публичного использования, а для того, чтобы впарить его какой-нибудь компании на заказ и все. И защита у такого ПО будет условной...
     
  17. gloomyraven

    gloomyraven Руслан

    Публикаций:
    0
    Регистрация:
    16 апр 2006
    Сообщения:
    288
    Адрес:
    Москва
    думаю, что если нет больше предложений по сабжу кроме переменных окружения и стандартных функций, то тему можно и закрыть...
     
  18. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    хм... посетила мысль... по мотивам башорга... создать файл, и посмотреть дату создания. Это в первом приближении, для повышенной замороченности дату создания файла можно смотреть не предназначенными для этого API, а вручную открыть раздел как файл, проанализировать бутсектор и т.д, добраться до каталога - ну, короче, вручную. Не уверен, что для НТФС это будет просто, но для фат16/32 - вполне реализуемо за короткий срок, и при этом никаких апи, связанных с датой, употребляться не будет, только CreateFile и ReadFile.
     
  19. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    еще например можно смотреть дату изменения файла какого-нить (например pagefile.sys).
     
  20. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Stariy
    Эта мысль боян.