*** Общая часть *** [HKEY_LOCAL_MACHINE\System\CurrentControlSet\MultiKey\Dumps\xxxxxxxx] xxxxxxxx - пароль ключа Для использования ключей с одинаковыми паролями необходимо добавить любой символ после пароля ключа : ...MultiKey\Dumps\xxxxxxxxa] ...MultiKey\Dumps\xxxxxxxx1] "Name"="xxx" "Copyright"="xxx" "Created"="xxx" "DongleType"=dword:0000000x - тип ключа 1 - HASP 2 - HARDLOCK 3 - SENTINEL 4 - GUARDANT *** HASP *** "SN"=dword:xxxxxxxx - серийный номер "Type"=dword:000000xx - модель 12 - Time HASP 3 0A - HASP4 M1 (deafult) 1A - HASP4 Time EA - HASP HL DA - HASP HL Time "Memory"=dword:00000001 - размер памяти "SecTable"=hex:00,00,00,00,00,00,00,00 - приватная таблица "NetMemory"=hex:03,00,0F,D0,02,00,00,00,FF,FF,FE,FF - ячейки "сетевой" памяти "Option"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00 - дополнительные опции: [0]=0x69 - работа без временной задержки с таблицами криптов-декриптов ключа HaspHL. "Data"=hex: - ячейки памяти "ColumnMask"=dword:000000FF "CryptInitVect"=dword:0000003F Таблично эмулируются функции hasp_decrypt + hasp_encrypt, при отсутствии значений в таблицах значения обрабатываются по внутреннему AES агоритму. При необходимости смены дефолтного ключа AES алгоритма внести в рег-файл его значение: "AesKey"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 Таблицы располагаются в подветках основного расположения дампа: Decrypt: [HKEY_LOCAL_MACHINE\System\CurrentControlSet\MultiKey\Dumps\12345604\DTable]; Encrypt: [HKEY_LOCAL_MACHINE\System\CurrentControlSet\MultiKey\Dumps\12345604\ETable]. Формат записей в таблицах для мультикея версии < 18.1 (все значения шестнадцатеричные): "10:00112233445566778899AABBCCDDEEFF"=hex:FF,EE,DD,CC,BB,AA,99,88,77,66,55,44,33,22,11,00 "20:00112233445566778899AABBCCDDEEFF"=hex:FF,EE,DD,CC,BB,AA,99,88,77,66,55,44,33,22,11,00 "30:00112233445566778899AABBCCDDEEFF"=hex:FF,EE,DD,CC,BB,AA,99,88,77,66,55,44,33,22,11,00 ***************************************************************************************** для мультикея версии >=18.1 в имена запросов 20h и 30h следует брать 32 байта запроса !!! ***************************************************************************************** где - "10:00112233445566778899AABBCCDDEEFF" - запрос в ключ "10(20,30)" - длина запроса в байтах "00112233445566778899AABBCCDDEEFF" - ПЕРВЫЕ 16 байт самого запроса - hex:FF,EE,DD,CC,BB,AA,99,88,77,66,55,44,33,22,11,00 - ответ ключа, берутся только первые 16 байт реального ответа. Например: ================================================================== 2008/10/10 07:13:25.109 <== HaspHL_decrypt: Length = 0x10 2008/10/10 07:13:25.109 <== HaspHL_decrypt: Input Data = 2008/10/10 07:13:25.109 2A E1 F0 A2 | E1 B2 F1 F9 | 9F C8 72 F6 | CA 4B 01 49 2008/10/10 07:13:25.171 ==> HaspHL_decrypt: Output Data = 2008/10/10 07:13:25.171 53 9D 4D 03 | 00 00 00 00 | CB D2 6B 04 | 00 00 00 00 2008/10/10 07:13:25.171 ==> HaspHL_decrypt: Status = 0x00 ================================================================== 2008/10/10 07:13:23.484 <== HaspHL_decrypt: Length = 0x20 2008/10/10 07:13:23.484 <== HaspHL_decrypt: Input Data = 2008/10/10 07:13:23.484 7B 6E 8C DF | D6 51 A3 0C | 47 E1 FA 60 | 51 6C 79 71 2E 0E 0C 38 | C6 99 FE 97 | B2 C2 E1 37 | 7F 61 CD 7A 2008/10/10 07:13:23.546 ==> HaspHL_decrypt: Output Data = 2008/10/10 07:13:23.546 02 B0 3C 6E | DA 88 46 BA | 4C 7E 5A 12 | 8E D6 DE 76 2E 0E 0C 38 | C6 99 FE 97 | B2 C2 E1 37 | 7F 61 CD 7A 2008/10/10 07:13:23.546 ==> HaspHL_decrypt: Status = 0x00 ================================================================== 2008/10/10 07:13:23.609 <== HaspHL_decrypt: Length = 0x30 2008/10/10 07:13:23.609 <== HaspHL_decrypt: Input Data = 2008/10/10 07:13:23.609 7B 6E 8C DF | D6 51 A3 0C | 47 E1 FA 60 | 51 6C 79 71 2E 0E 0C 38 | C6 99 FE 97 | B2 C2 E1 37 | 7F 61 CD 7A 9C F3 2A BD | A4 DA 3B 78 | 97 CC 44 ED | 42 47 42 E6 2008/10/10 07:13:23.671 ==> HaspHL_decrypt: Output Data = 2008/10/10 07:13:23.671 77 64 61 62 | 63 5F 60 61 | A2 B9 AC 60 | 61 62 63 5F 2E 0E 0C 38 | C6 99 FE 97 | B2 C2 E1 37 | 7F 61 CD 7A 9C F3 2A BD | A4 DA 3B 78 | 97 CC 44 ED | 42 47 42 E6 2008/10/10 07:13:23.671 ==> HaspHL_decrypt: Status = 0x00 ================================================================= Получаемая таблица: [HKEY_LOCAL_MACHINE\System\CurrentControlSet\MultiKey\Dumps\12345604\DTable]; "10:2AE1F0A2E1B2F1F99FC872F6CA4B0149"=hex:53,9D,4D,03,00,00,00,00,CB,D2,6B,04,00,00,00,00 "20:7B6E8CDFD651A30C47E1FA60516C7971"=hex:02,B0,3C,6E,DA,88,46,BA,4C,7E,5A,12,8E,D6,DE,76 "30:7B6E8CDFD651A30C47E1FA60516C7971"=hex:77,64,61,62,63,5F,60,61,A2,B9,AC,60,61,62,63,5F Если в протоколе встречается одиночный запрос длиной в 32 (20h) байта, за которым сразу нет запроса длиной 48 (30h) байт (или если сказать по другому, в котором вторые 16 байт запроса НЕ РАВНЫ вторым 16 байт ответа) , то такой запрос необходимо сохранять в таблицу как два запроса по 16 (10h) байт *** HARDLOCK *** "ID"=dword:xxxxxxxx - серийный номер "withMemory"=dword:0000000x - ключ с памятью или без нее "Seed1"=dword:0000xxxx "Seed2"=dword:0000xxxx "Seed3"=dword:0000xxxx "HlkMemory"=hex: - ячейки памяти *** SENTINEL *** "Type"=dword:00000000 - модель "sntMemory"=hex: - ячейки памяти "CellType"=hex: - типы ячеек *** GUARDANT *** ...MultiKey\Dumps\xxxxxxxx] - xxxxxxxx - pwRead - пароль ключа на чтение; "DongleType"=dword:00000004 "pWrite"=dword:23232323 >>>пароль на запись, необязательный параметр, если прога не использует запись "Data" =hex:\ ... (256 байт - полный дамп с дескрипторами)