eXeL@B —› Протекторы —› Помогите понять работу триала (EXECryptor) |
Посл.ответ | Сообщение |
|
Создано: 07 ноября 2008 04:31 · Поправил: Модератор · Личное сообщение · #1 Столкнулся с тем, что программка отслеживает перевод календаря вперёд не используя драйвера... Триал на 30 дней. Лицензия определяет дату окончания. Можно перевести безболезненно на день вперёд. Как только перевожу на два и более (в пределах рабочего периода), при запуске Clock manipulation detected! Программа не использует GetSystemTime и GetLocalTime. Делает CreateFile на kernel32.dll к которому в системе всегда закрыт доступ на запись и изменение аттрибутов. Хотя он содержит именно дату открытия, тоесть момент запуска винды. Я перехватываю доступ к нему и подкидываю файл лежащий на другом диске, с нужными мне аттрибутами и датой. Не помогает... Что интересно, любой перевод даты вперёд (а в последствии и назад) отрабатывает без этого сообщения если компьютер был перезагружен. Пробывал вгонять комп в спячку - не помогает. В общем получается так, что где-то живёт дата запуска винды, которая не теряется при спящем режиме... Может это время последнего обращения к какой либо хитрой ветке реестра ? Вроде утилита была типа LastWrite (определяла время последнего обращения к ветке реестра). Или время открытия занятого системой файла... Ещё вспоминается, что где-то в винде была функция какая то определяющая время работы ? Или то сетевого подключения касалось ? В общем вопрос мой в том, какие есть возможности определения не только текущего времени не стандартными подходами, но и времени работы винды ?... |
|
Создано: 07 ноября 2008 08:06 · Поправил: Spirit · Личное сообщение · #2 |
|
Создано: 07 ноября 2008 10:36 · Личное сообщение · #3 |
|
Создано: 07 ноября 2008 12:30 · Поправил: MACKLIA · Личное сообщение · #4 ToBad пишет: В общем получается так, что где-то живёт дата запуска винды, которая не теряется при спящем режиме.. Когдато дату загрузки ,именно обычной загрузки я получал так: Edit1.Text:=DateToStr(GetFileDateTime('C:\WINDOWS\system32\config\syst em')) при последующем использовании спящего режима она тоже не теряется. ToBad пишет: Хотя он содержит именно дату открытия, тоесть момент запуска винды. Только при переводе даты ,и его дата открытия автоматически изменяется . ----- Что один человек сделал , другой всегда сломать может... |
|
Создано: 07 ноября 2008 12:56 · Личное сообщение · #5 |
|
Создано: 07 ноября 2008 13:33 · Поправил: kioresk · Личное сообщение · #6 «Clock manipulation detected!» — это стандартное крипторовское сообщение о смене даты. Если патч устраивает, то можешь просто отключить проверку изменения системной даты, об этом уже писал ранее в теме по криптору (EXECryptor 2.x – Отключение проверки системной даты). Если патч не подходит, и интересует как именно криптор определяет смену даты, то в принципе могу чуть позже выложить код крипторовской API EXECryptor_GetDate, в которой и проверяется не намухлевал ли ты с датой. |
|
Создано: 07 ноября 2008 14:13 · Поправил: ToBad · Личное сообщение · #7 Spirit пишет: Дык аптайм компа в реестре пишется Понял, погуглю. Spirit пишет: А еще через GetTickCount Тут я делал перехват когда искал определение частоты работы процессора. Выдавал фанарные значения и это никак не отразилось. MACKLIA пишет: Когдато дату загрузки ,именно обычной загрузки я получал так: Edit1.Text:=DateToStr(GetFileDateTime('C:\WINDOWS\system32\config\syst em')) Я тоже подозревал, что может через обращение к системным файлам. Для этого перехватывал обращение к кернелу. Проблема в том, что никуда более программа не лезет. Я имею ввиду другие файлы и папки. Всё это я мониторю. tihiy_grom пишет: Посмотри RegQueryInfoKey. У неё в структуру PFILETIME передается время последней модификации ключа. Это пригодится ! kioresk пишет: «Clock manipulation detected!» — это стандартное крипторовское сообщение о смене даты. Если патч устраивает, то можешь просто отключить проверку изменения системной даты, об этом уже писал ранее в теме по криптору (EXECryptor 2.x – Отключение проверки системной даты). Если патч не подходит, и интересует как именно криптор определяет смену даты, то в принципе могу чуть позже выложить код крипторовской API EXECryptor_GetDate, в которой и проверяется не намухлевал ли ты с датой. Да, скорее всего это именно оно ! На длл был екзекриптор который сняли и отключили проверки. Выходит не все. Патч вполне подходит, буду читать статью ! Конечно посмотреть код API EXECryptor_GetDate тоже очень хочется. Буду ждать ! |
|
Создано: 07 ноября 2008 14:26 · Личное сообщение · #8 |
|
Создано: 07 ноября 2008 14:28 · Личное сообщение · #9 |
|
Создано: 07 ноября 2008 15:31 · Личное сообщение · #10 ToBad пишет: не сам ли криптор читает из реестра SystemBiosDate и SystemBiosVersion, а так же неоднократно вычитывает все возможные данные с помощью cpuid и всё это ксорит с волум сериалом полученным функцией ZwQueryVolumeInformationFile? Сам. Криптор может расчитывать HWID по: 1. Bios (SystemBiosDate и SystemBiosVersion) 2. Hdd (GetFileInformationByHandle, GetVolumeInformationA) 3. Cpu (Cpuid) Соответственно занимается этим API EXECryptor_GetHardwareID. В твоем случае хвид считается по всем трем параметрам. |
|
Создано: 07 ноября 2008 15:34 · Личное сообщение · #11 Maximus тут триал не крипторовский думаю. Даже не совсем триал, а лицензия на определённое время. Когда её вводишь - пишет дату окончания... Думаю клок манипулейшин это наследство от криптора которое к реальному времени лицензии не относится. kioresk нашёл 3 места как описано в статье. Бряк работает только на одном. Пропатчил - работает ! Клок манипулейшин более не помеха ! Теперь становиться понятно как всё работает. Программа расшифровывает свою лицензию и определяет дату до которой работать, затем получает текущую дату от екзекриптора, ну и естественно сравнивает где-то. Буду реверсить после Check_NT что бы патчить непосредственно EXECryptor_GetDate. Думаю теперь дело за малым... Большое спасибо всем кто участвовал в обсуждении моего топика ! |
|
Создано: 07 ноября 2008 15:39 · Поправил: ToBad · Личное сообщение · #12 kioresk да, через попу я всё сделал. Биос и hdd делал перехватом фунок, cpuid - патчем. А всего то нужно найти было вход, выход или просто вызов API EXECryptor_GetHardwareID и пропатчить там... А есть где нибудь инфа по АПИ криптора ? Подозреваю, что в ветке про екзекриптор. Поищу... p.s. Да, точно, куда мои глаза смотрели, в ветке EXECryptor и видео про смену hwid-а есть... |
|
Создано: 07 ноября 2008 20:36 · Личное сообщение · #13 |
|
Создано: 07 ноября 2008 21:46 · Личное сообщение · #14 Maximus пишет: Интересно а как легко найти место получения cpuid, это ж не апи функция а ассемблерная. Я искал хювом в файле все 0FA2, патчил по 3-4 штуки на 9090 и смотрел на hwid. Таким образом вычислил те 7 которые используются у меня. Благо было всего 30-60 подозрительных мест. Потом пропатчил всё согласно тому, что на моём компе попадает в регистры после cpuid. Когда всё сработало - протрейсил от первого вызова до 7-го. По ходу увидел куда сериал волум приплетается. В итоге запатчил всё заново байтами 10-ю... Это получился результат hdd+cpu... Вот теперь буду лезть ещё глубже, что бы прибавить сюда bios. Таким образом планирую выйти в хвост EXECryptor_GetHardwareID и запатчить там. Пока остановился на GetDate. После патча по уроку kioresk клок манипулейшин отстал... Перехват FileTimeToDosDateTime, GetSystemTimeAsFileTime, FileTimeToLocalFileTime, GetSystemTime и GetLocalTime - результата ожидаемого не принёс. Незнаю как выйти на конец EXECryptor_GetDate. Оно должно вернуть 2 dword в формате FileTime или 4 dword в формате SystemTime ? Описание EXECryptor API нигде не нашёл, наверное мне показалось, что его тут выкладывали... |
|
Создано: 07 ноября 2008 23:30 · Поправил: ToBad · Личное сообщение · #15 |
|
Создано: 08 ноября 2008 01:10 · Поправил: kioresk · Личное сообщение · #16 Описание крипторовских API (их назначение, передаваемые/возвращаемые параметры) есть в крипторовском хелпе, поэтому скачай дистрибутив версии 2.3.9 и посмотри что к чему. Сразу оговорюсь, что в хелпе эта функция называется SafeGetDate, но в крипторовском SDK используется именно EXECryptor_GetDate, поэтому я ее так и называю. А тип возвращаемого значения зависит от примененного компилятора. Наример, для Delphi эта функция возвращает дату в формате TDateTime, т.е. для 08.11.2008 в eax будет 0x00003968. В принципе могу посмотреть где начинается эта функция, если выложишь/скинешь файл. П.С. Модераторы добавьте еще к концу темы (EXECryptor). |
|
Создано: 08 ноября 2008 01:26 · Личное сообщение · #17 kioresk пишет: В принципе могу посмотреть где начинается эта функция, если выложишь/скинешь файл. Да я знаю, что ты можешь... Файл (длл) ты распаковывал когда-то в ветке про екзекриптор. Мне хочется самому уметь находить нужные функции. Мне бы отрыть информацию не только ту, что в СДК напишут, но и научится находить нужное с помощью сигнатур... Так как это ты в уроке с Check_NT делал... Как я уже сказал выше - удалось найти и запатчить GetSystemTimeAsFileTime. Потрейсю завтра, может найду возврат из GetDate... У меня ещё есть вопросик. В программе (смотрю по логу перехватываемых функций) группа из считывания инфы о биосе и сериал волума повторяется более 30 раз. Только потом идёт опрос даты. Зачем может понадобится программе столько раз получать hwid ? |
|
Создано: 08 ноября 2008 01:29 · Личное сообщение · #18 |
|
Создано: 08 ноября 2008 10:34 · Личное сообщение · #19 |
|
Создано: 08 ноября 2008 16:25 · Поправил: Модератор · Личное сообщение · #20 |
|
Создано: 09 ноября 2008 20:54 · Личное сообщение · #21 Научился распаковывать программы, запакованные EXECryptor по вашим статьям, теперь хочу научиться снимать триал. Все мои попытки разобраться с триалом EXECryptor’a, потерпели не удачу. Я так понял, чтобы снять триал с программы, которая была запакована EXECryptor, нужно найти начало функции EC_GetDate, как написано в статье от kioresk, с чем собственно у меня и проблема не как не получается её найти в коде программы. Всё что у меня получилась найти это только, инструкцию setnz byte ptr [ebp-1] (0F 95 45 FF). Пробовал также найти начало функции EC_GetDate, по ответу ToBad , железный бряк на API FileTimeToDosDateTime, который у меня не срабатывает, иле Trace into от инструкций setnz byte ptr [ebp-1], с этим у меня тоже не что не получилось, OLLYDBG не до конца трассирует код, появляется окно. После чего OLLYDBG прекращает трассировку. У меня вопрос, как найти начало функции EC_GetDate, если какой ни будь универсальный способ поиска начало функции EC_GetDate. р.s Прошу проcщения у Модераторов данного форума, за создания рения мною темы в разделе для новичков. Пользуясь поискам по форуму он, меня, не привел, к этой теме. Позже я в той теме, когда разберусь с триалом EXECryptor, выложу своё видео по распаковки EXECryptor. |
|
Создано: 10 ноября 2008 11:39 · Личное сообщение · #22 An_ton пишет: У меня вопрос, как найти начало функции EC_GetDate, если какой ни будь универсальный способ поиска начало функции EC_GetDate. Конечно есть, просто никто об этом не писал, хотя сложного ничего в этом нет. Крипторовские API очень просто найти, для этого достаточно взять криптор, посмотреть SDK, защитить какой-нибудь пустой проект и посмотреть внимательно на то, что получится в итоге (периодически подглядывая в SDK). А вот чтобы пойти дальше — понадобиться ДеВМ, который на паблике пока выкладывал только VolX (и то ограничив доступ к нему). An_ton пишет: Позже я в той теме, когда разберусь с триалом EXECryptor, выложу своё видео по распаковки EXECryptor. Чтобы разобраться с криптором, надо изучать как он работает — иначе ты будешь просты долбиться непонятно куда. А от видео вообще нет никакого толка, и об этом уже сто раз писали на этом форуме. |
|
Создано: 10 ноября 2008 12:25 · Личное сообщение · #23 |
eXeL@B —› Протекторы —› Помогите понять работу триала (EXECryptor) |