Сейчас на форуме: _MBK_, vsv1 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите разобраться с прогой
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 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



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 01 марта 2007 03:01
· Личное сообщение · #2

Вот какие функции вызываются:

0041B770 Breakpoint at <Prog.hasp_login>
0041B9E0 Breakpoint at <Prog.hasp_decrypt>
0041BBE0 Breakpoint at <Prog.hasp_legacy_decrypt>
0041B9E0 Breakpoint at <Prog.hasp_decrypt>
0041C580 Breakpoint at <Prog.hasp_read>
0041C580 Breakpoint at <Prog.hasp_read>
0041C580 Breakpoint at <Prog.hasp_read>
0041C580 Breakpoint at <Prog.hasp_read>
0041B9E0 Breakpoint at <Prog.hasp_decrypt>
0041BBE0 Breakpoint at <Prog.hasp_legacy_decrypt>
0041C2F0 Breakpoint at <Prog.hasp_get_sessioninfo>
0041C000 Breakpoint at <Prog.hasp_free>
0041B770 Breakpoint at <Prog.hasp_login>
0041BBE0 Breakpoint at <Prog.hasp_legacy_decrypt>
0041B9E0 Breakpoint at <Prog.hasp_decrypt>
0041C2F0 Breakpoint at <Prog.hasp_get_sessioninfo>
0041C000 Breakpoint at <Prog.hasp_free>
0041B9E0 Breakpoint at <Prog.hasp_decrypt>





Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 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




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 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 контейнер функции больше не доступен




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 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




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 02 марта 2007 05:58
· Личное сообщение · #6

Tolkin пишет:
на счет hasp_login
- при вызове этой API вызов функции DeviceIoControl происходит 16 раз, и 12 из них с буфером 0х100,
так что уж лучше работать с Hasp Api

Про это я и говорил с самого начала



Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 марта 2007 21:41
· Личное сообщение · #7

Можно пару замечаний
Я тут тож как то ваял дампер (перехват DeviceIoControl ) для хаспа.
так же ловил буфер размером 0х2000 - и у меня сложилось ощущение что это сделано специально т.к. мой дампер например валился при попытке этот буфер отловить

Про тему логов - у торо можно спросить - чем отличаются те или иные надписи если че... Но я думаю Ваши рассуждения были верны.

Кстати неплохо было бы сделать сигнатуры для ИДА от новых функций хаспа.



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 05 марта 2007 02:05
· Личное сообщение · #8

Кстати, я тут проверил в проге, пакет с буфером 0х2000 посылается только при отсутствии ключа, а при наличии ключа такаго вызова DeviceIoControl нет



Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 05 марта 2007 05:18
· Личное сообщение · #9

Наводит на размышление что изначально прога при запуске уже знает что ключик то вставлен....



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 08 марта 2007 02:45
· Личное сообщение · #10

Наконец дошли руки и --- защита пала!!!

Эмулятор HASP API выполнил в виде DLL.




Ранг: 113.0 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 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




Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 09 марта 2007 09:01
· Личное сообщение · #12

Всем спасибо за участие, особенно Chingachguk за направление в нужное русло

А DLL внедряю на стадии запуска проги плюс обычный перехват api.

Для единичного использования (делать под конкретную прогу) метод помоему наиболее простой и быстрый. Весь инструментарий - прога + ключ + Olly



Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 марта 2007 03:07
· Личное сообщение · #13

Tolkin
Поздравляю! Почти месяц наблюдал за твоими усилиями!
Сам я в этих вопросах ни бум-бум, а взлом t-flex-10 нужен.
Поделишься? Спасибо! def281@yandex.ru



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 12 марта 2007 06:03
· Личное сообщение · #14

def281 смотри приват



Ранг: 64.0 (постоянный), 2thx
Активность: 0.040.01
Статус: Участник

Создано: 16 марта 2007 17:33
· Личное сообщение · #15

дальнейшее развитие - здесь
forum.ru-board.com/topic.cgi?forum=35&topic=9366&start=1840



Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 02 апреля 2007 16:51
· Личное сообщение · #16

vj;tChingachguk пишет:
pps sataron, а ты что думаешь по поводу моих мыслишек насчет VendorId as function SN?

Не думаю... по неким сведениям этот VendorId никуда кроме как в hasp_login не используеться



Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 апреля 2007 15:57
· Личное сообщение · #17

Chingachguk пишет:
) Откуда он их снимает? 8 байт НЕЛЬЗЯ снять с уровня aksusb-ключ так как там 4-х байтный hashdword, также (по крайней мере ранее) их нельзя снять и с aksusb-hardlock. Такой буфер можно снять либо с app-hardlock либо между этого магического "FEntevdev" и hardlock'а.


Ну если глянуть внутрь логера от Торо то увидим что он цепляется к L"\DosDevices\FEnteDev"

Так же некоторые фи-ии HaspHL это просто обертка для старых ф-ии Hasp`а, т.е. если отслеживать путь от точки входа в Новую ф-ию мы увидим что многие из них просто вызывают старые добрые Hasp ф-ии и затем просто возвращают их результат в программу.



Ранг: 0.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 апреля 2007 22:35
· Личное сообщение · #18

Tolkin помоги с T-flex 10, ты ведь его сломал, поделись кряком надо позарез...



Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 апреля 2007 10:13
· Личное сообщение · #19

Люди, поедлитесь со мной DLL-кой для 10-го тефлекса
очень очень позарез нужно
Зранее всем Спасибо!


<< . 1 . 2 .
 eXeL@B —› Вопросы новичков —› Помогите разобраться с прогой
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати