Версия, которая работает в 98 и xp без пересборки. Критичные места (3c-3d) заноплены. Обратите внимание на путь в реестр. 2136690850__VUsb.rar
а это что - никто не в курсе? ключ оговорен как тайм. NETMEMO: .db 0x01, 0x00, 0x00, 0x00 .db 0x03, 0x00 .db 0xF0, 0x01 .db 0x04, 0xFF .db 0x00, 0x00 .db 0xFF, 0xFF .db 0xFD, 0xFF и ответ на KEY_FN_SET_CHIPER_KEYS - keyType2 = 0x1A orig -> c0 9c e3 75 f6 49 12 00 decrypted -> xx xx 28 10 00 00 xx xx
похоже это спец функа для тайм-хаспа. через нее идут запросы get_time_hasp_ID, get_date, get_time, get_expire_programms_list... запрос постоянен - 2 байта(chiper), ответ - 6.
Chingachguk 1. в strepped.log - сначала ответ потом запрос 2. первый вызов 0x9C - GetTimeHaspID (параметр запроса - 0x28 0x10 0x00 0x00 ответ - похоже правильный, но длинна не 6 байт т.к. сразу теряются сеансовые ключи) 3. второй и третий - GetHaspTime & GetHaspDate ----- кажись протупил - щас исправлюсь - декоденый лог чуть исправлен. хотя потеря сеансовых ключей осталась :-( _863218831__logs.rar
новый лог - _188473308__log_new.rar -------------------------------------- разобрался с потерей сеансовых ключей - ответ на 0х9С только 4 байта Точно известно что проходят запросы GetTHaspID,GetHaspTime,GetHaspDate. Еще в HaspEdit существует функция вычитки FAS - она похоже тоже проходит через 0x9C. -------------------------------------- А вот при попытке сделать SetTime | SetDate - мусор какой-то и в итоге получаю что нету ключа с такими паролями.
legion_ua Сенькс ! Реально мы особо много ключей не смотрели, поэтому часть функций просто у нас не поддерживается. В частности, новые драйвера (>4.95) используют 0xA0. Поэтому в процедуре обработки функций: Код (Text): void EmulateKey(PKEYDATA pKeyData, PKEY_REQUEST request, PULONG outBufLen, PKEY_RESPONSE outBuf) { ... // // Analyse fn number // LogMessage ("Analyse fn number\n"); switch (request->majorFnCode) { case KEY_FN_SET_CHIPER_KEYS: ... Если функция неподдерживается, то происходит абстрактный вызов: Код (Text): // Crypt status & encoded status Chiper(&keyResponse.status, 2, pKeyData); Ну и и сеансовые ключи разрушаются. Если будет время, я посмотрю твои новые функции. Вообще конечно имея настоящий ключ достаточно сделать пару-тройку логов и дописать поддержку неизвестных функций. Размер ответа и контроль за сеансовыми ключами удобно делать логгируя аксус - процедуру отправки данных - это тройка вызовов в одной подпрограмме: ; - KeInitializeEvent ; - IoBuildDeviceIoControlRequest ; - IofCallDriver, and check error 103h и процедуру аналога Chiper в аксусе (в ней меняются Key1 & Key2).