![]() |
eXeL@B —› Вопросы новичков —› Помогите разобраться с прогой |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 14 февраля 2007 11:52 · Поправил: Tolkin · Личное сообщение · #1 Есть прога T-FLEX CAD 10. написана на VC++. ничем не упакована. Защищена ключем HASP HL. Суть в том , что от ключа толку мало,т.к. например в версии 9.015 достаточно было сделать retn в процедурах выхода (PostQuitMessage) и прога нормально работала! В последующих версиях эта оплошность была немного исправлена. В даной 10 версии например, если сделать retn на вызовах PostQuitMessage прога продолжает работать, но только все кнопки на панелях заблокированы(неактивны). А вот блокированы они изначально или после проверки наличия ключа, я не знаю. Проблема еще и в том, что класс всех панелей - Afx:00400000:8:00010011:00000010:00000000 и стандартные сообщения для работы с кнопками как для ToolBar они не используют. Подскажите в каком направлении надо двигаться, на что ставить бряки или что искать в проге? Как в даном классе окон происходит работа с кнопками панелей, может кто знает? прога здесь: ftp://ftp.topsystems.ru/T-FLEX ftp://ftp.topsystems.ru/T-FLEX 10/T-FLEX CAD 10.zip login: support ; password: eligarf1002 ![]() |
|
Создано: 01 марта 2007 03:01 · Личное сообщение · #2 Вот какие функции вызываются: 0041B770 Breakpoint at <Prog.hasp_login>
![]() |
|
Создано: 01 марта 2007 04:54 · Личное сообщение · #3 Хм, интересно... Я ранее с TORO/HL API не работал. Если сравнивать лог TORO (интересно на каком уровне он работает? похоже между ключом и aksusb? или между aksusb и hardlock?) и текущий лог, то получаецца: У тебя: 0041B770 Breakpoint at <Prog.hasp_login> ; Тут ты где-то передал "пароль" - vendor - на доступ к ключу. Как же hardlock проверил vendor? Ведь не ; по инфе из реестра (-?) В то же время у TORO: Hasp In:> HaspInitPacket PW1=17003 (0x426B) , PW1=27009 (0x6981) Hasp Out:> HaspInitPacket Status=0 (0x0) Hasp In:> HaspGeneration ... Hasp In:> HaspID ... Hasp In:> HaspStatus ... Hasp In:> HaspTimeID ... HaspHL In:> Hasphl_logout HaspHL Out:> Hasphl_logout Status=4 (0x4) P1=4 P2=1 Hasp In:> HaspInitPacket Hasp In:> HaspGeneration Hasp In:> HaspID Hasp In:> HaspStatus Hasp In:> HaspTimeID ; И только сейчас - decrypt: ; (у тебя в этот момент должен пройти второй вызов: ; 0041B9E0 Breakpoint at <Prog.hasp_decrypt> HaspHL In:> Hasphl_decrypt, Length=32 Получается, что этот Vendor id - проверяется только (?) по информации из HaspID & HaspTimeID? 2. Интересно что за фуфел "hasp_legacy_decrypt"? У TORO далее по логу: HaspHL In:> Hasphl_decrypt, Length=48 Hasp In:> HaspDecrypt Length=8 Hasp In:> HaspDecrypt Length=8 HaspHL In:> Hasphl_decrypt, Length=16 ; и далее уже - про чтение памяти. HaspHL In:> Hasphl_get_size 3. В некотором приближении (пока писал это) у TORO "Hasp In:>" означает "с уровня входа в hardlock" а "HaspHL In:>" означает "с уровня между hardlock и aksusb" (или между самим ключом и aksusb?..) - ? 4. Далее идет чтение памяти, видимо тут все понятно.. 5. Только вот если: у TORO "Hasp In:>" означает "с уровня входа в hardlock" а "HaspHL In:>" означает "с уровня между hardlock и aksusb" то почему в логе TORO сначала идет строка "HaspHL In:> Hasphl_decrypt, Length=16", а затем уже "Hasp In:> HaspDecrypt Length=8" ?? Ведь у ключа нет функции для 8-ми байт, а есть только для 16*N.. Любопытна... ----- The one derivative you manage is the one I abhore (c) Slipknot ![]() |
|
Создано: 01 марта 2007 09:44 · Поправил: Tolkin · Личное сообщение · #4 на счет hasp_login - при вызове этой API вызов функции DeviceIoControl происходит 16 раз, и 12 из них с буфером 0х100, так что уж лучше работать с Hasp Api ![]() А эмуляция Hasp_login ---> просто вернуть eax=0 (а в драйвере как надо извратится то!) hasp_legacy_decrypt() Описание Дешифрует буфер, сохраняя обратную совместимость с HASP4. Синтаксис hasp_status_t HASP_CALLCONV hasp_legacy_decrypt( hasp_handle_t handle, void * buffer, hasp_size_t length ) ) Параметры Возвращаемые ответы Применение Выполнение функции зависит от дескриптора, сгенерированного вызо' вом hasp_login(). Идентификатор функции должен быть задекларирован как «PROGRAM NUMBER FEATURE». Если операция дешифрования не заканчивается успешно, данные, указываемые буфером, остается неопределенными. Смотри также hasp_legacy_encrypt() handle (дескриптор) дескриптор для сессии buffer (буфер) указатель буфера, который будет дешифровываться length (длина) размер (в байтах) дешифруемого буфера – минимально 8 байт. HASP_STATUS_OK запрос был успешно выполнен HASP_INV_HND неверный дескриптор HASP_TOO_SHORT длина дешифруемого буфера слишком коротка HASP_ENC_NOT_SUPP ключ не поддерживает тип дешифрования HASP_CONTAINER_NOT_FOUND контейнер функции больше не доступен ![]() |
|
Создано: 01 марта 2007 10:46 · Личное сообщение · #5 > а в драйвере как надо извратится то! Ну отчего же ;) Если моя теория верная (выше насчет "SN" или этого нового "HaspTimeID"), то нужно просто вернуть их верными. А вот если делать "Глашу", то тут согласен. А вот насчет "legacy_encrypt" все стало еще более непонятно ;) Если для H4 длина буфера действительно может быть 8 байт, и это объясняет строки лога TORO: Hasp In:> HaspDecrypt Length=8 Hasp In:> HaspDecrypt Length=8 Но делает непонятным две другие вещи: 1) Откуда он их снимает? 8 байт НЕЛЬЗЯ снять с уровня aksusb-ключ так как там 4-х байтный hashdword, также (по крайней мере ранее) их нельзя снять и с aksusb-hardlock. Такой буфер можно снять либо с app-hardlock либо между этого магического "FEntevdev" и hardlock'а. 2) Если 1) верно, то что означают в логе TORO два разных идентификатора "HaspHL In" и "Hasp In"? Может просто это H4 - HL - разные функи разных типов ключей? ----- The one derivative you manage is the one I abhore (c) Slipknot ![]() |
|
Создано: 02 марта 2007 05:58 · Личное сообщение · #6 |
|
Создано: 04 марта 2007 21:41 · Личное сообщение · #7 Можно пару замечаний ![]() Я тут тож как то ваял дампер (перехват DeviceIoControl ) для хаспа. так же ловил буфер размером 0х2000 - и у меня сложилось ощущение что это сделано специально т.к. мой дампер например валился при попытке этот буфер отловить ![]() Про тему логов - у торо можно спросить - чем отличаются те или иные надписи если че... Но я думаю Ваши рассуждения были верны. Кстати неплохо было бы сделать сигнатуры для ИДА от новых функций хаспа. ![]() |
|
Создано: 05 марта 2007 02:05 · Личное сообщение · #8 |
|
Создано: 05 марта 2007 05:18 · Личное сообщение · #9 |
|
Создано: 08 марта 2007 02:45 · Личное сообщение · #10 |
|
Создано: 08 марта 2007 12:29 · Поправил: Chingachguk · Личное сообщение · #11 > пала!!! Поздра! ![]() > в виде DLL Чтобы прога импортировала у нее, а DLL под ногами? ps В соседней теме, в этом же разделе где ты недавно написал - там другой глюч, "hardlock". pps sataron, а ты что думаешь по поводу моих мыслишек насчет VendorId as function SN? ----- The one derivative you manage is the one I abhore (c) Slipknot ![]() |
|
Создано: 09 марта 2007 09:01 · Личное сообщение · #12 |
|
Создано: 10 марта 2007 03:07 · Личное сообщение · #13 |
|
Создано: 12 марта 2007 06:03 · Личное сообщение · #14 |
|
Создано: 16 марта 2007 17:33 · Личное сообщение · #15 |
|
Создано: 02 апреля 2007 16:51 · Личное сообщение · #16 |
|
Создано: 03 апреля 2007 15:57 · Личное сообщение · #17 Chingachguk пишет: ) Откуда он их снимает? 8 байт НЕЛЬЗЯ снять с уровня aksusb-ключ так как там 4-х байтный hashdword, также (по крайней мере ранее) их нельзя снять и с aksusb-hardlock. Такой буфер можно снять либо с app-hardlock либо между этого магического "FEntevdev" и hardlock'а. Ну если глянуть внутрь логера от Торо то увидим что он цепляется к L"\DosDevices\FEnteDev" Так же некоторые фи-ии HaspHL это просто обертка для старых ф-ии Hasp`а, т.е. если отслеживать путь от точки входа в Новую ф-ию мы увидим что многие из них просто вызывают старые добрые Hasp ф-ии и затем просто возвращают их результат в программу. ![]() |
|
Создано: 05 апреля 2007 22:35 · Личное сообщение · #18 |
|
Создано: 13 апреля 2007 10:13 · Личное сообщение · #19 |
<< . 1 . 2 . |
![]() |
eXeL@B —› Вопросы новичков —› Помогите разобраться с прогой |