Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› Мониторинг HASP HL через перехват DeviceIoControl
Посл.ответ Сообщение


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

Создано: 28 марта 2008 02:52 · Поправил: ToBad
· Личное сообщение · #1

Возникла проблема с попыткой самостоятельной эмуляции HASP HL. Внедряю в процесс dll в которой хукаю CreateFileA и DeviceIoControl. Веду логи выполнения функций и контролирую входной и ответный буфер. Данные передаваемые и получаемые с помощью функции 9C402458 постоянно разные. Как я понял почитав форум, давно уже подобное делали, так же на Wasm я нашел статейки. Вот я только одного не понял, можно это расшифровать или нет и как мне быть если я хочу без использования всем известных логгеров и эмуляторов сделать что то своё основанное на перехвате DeviceIoControl. Ведь как я понял весь обмен программы и драйвера происходит именно так.
Вот пример работы с реальным ключом:


\?\usb#hasp...
Func: 9C4024A0, InSize: 0004, OutSize: 0004, BytesRet: 0003
B2BAEFBE44
BEBAFE2A44

Func: 9C402450, InSize: 0006, OutSize: 0006, BytesRet: 2AFEBABE
01000000040000
0100FAFA560300

\?\usb#hasp...
Func: 9C402458, InSize: 0100, OutSize: 0100, BytesRet: 12F674
7A4D5BA3508E8B8DFD9004D93170FB19A0B19A685B532AD5A3A094FB14B8FB6730603B
D5F15E3AF55A2EE530AF48CB8257790E7853D0C37DE2EEB4C2BE2CCBEA3C6ABB249167
0710DF200B6448EB5F1E4B48D027AC831B49C7481C62FCCA71273D2F0E900C910E961C
A762A00CCBB05D75163E1A5E1345DB8FAE0B2D8BA7FD01111B892FF35828EAAF83481A
EEC5915216F4D1B192704D10EBB594704B14F5D5BAB4ADA59E5C19CC863B41F3EAEEF9
FB02B3C1707E925E37509C0200B704812751A98360B88E6DCB25FB5EC71E09EA4CB6A4
73E53321ED3E3720E9418F6FD23D40854C925A9F6CF87A0EDF31353B4B9D7514F29172
0ED129271F09D12A352EE442

7A50539E4C9597A4159C21F9549E445BE7FBE798AE916B19E3E1DA586F0423611F12B0
4867DFBF86B2B873C70E6C3931474C82EEB172AAA7F322DCBB2C7E3EC9DB8A5F4A3D1E
EF943683E0EA2586B423814513381B52CDA7FCF11FB233B12FA80601EA72FD8A509460
E468FD45BEB7BDDF8BDE473CFF4429C59D28D0C6A54522BA0CC2B3C0637B879DB6BED9
F1F6020A1E3E5E82868F99B8D6F3112D375779A19B948C837FBCF73779B9FB40315E63
948977C6B503EF204B385F020017CBD0D39A38D5EF12AF516C8D36D0E707A950688E24
BB73B0658521B87ABF861EE90BB368BA8A1FB58A1AAD8312A06BCFF3425362AB76E42C
FE6BB89D537AF15683DD1C42

\?\usb#hasp...
Func: 9C402458, InSize: 0100, OutSize: 0100, BytesRet: 12F62C
73ECBCB76EEACDFBFFFAE0601A30AB6798245A2622B7A374E13B970BD9D44DA0A5B287
DBC3996B797F8D570D3C59994555E7054FC139030863B2EDAB21E12740B4DEB53B6494
B5087C5C1ADC508011246B8100E9E78F56A5EA3027AA3DF51DD5C153634EF8DC89AD19
4CFDEEE50986E4323DEF6F1AE853A59B7705B2C0EC70FDA24E783D5A4188796D6D6F73
69696B6F7C8B7C8C7A8978867E9BB8D4DF01EDEAE60DF61C02E40DFA1E12F215FA285A
4C42203E805E658C71B16A0200D5777DCC903BE712C1E71AC7F930D7FD34E103AB6082
22C7EB0CB579BA8727C8F22FE60ABA912D06A177DAF5576FD5E95065BFAB9242517EEF
445B8A19D5008D27FA33E342

73E9C4BC6ADBBDE8E3CBB02DF6007A3359E214DBF5B0917BE33A91FDE7B83594BDC657
A7CB9D737D8741F7E8521549F13404DD40AA5EEA2AC7D2C94365287AB693BB1092B461
04A9C714C167540827C2061B39C2405E3D8944F6E97828375E170999AB974575E75B8A
416AE54FCA49B81566FC24CE8ABF5E3EE1D4A61B7B9BFE2756C1C7948D7C24CA7719C7
6A1AC8751FDD9C5C1BD8945B1FEB986607AA5419E6C05DF9D47853F0C8734FFBE8D26B
57FBF0E8BFBBB0A47F7FB7020001B338338F837AF268DC54CE48C844B2A08B877CFC82
6AD35CE94CB7C42404E03B4AB5B8C41FFC927007E786690DF2865EC72031408D5CCA1A
08D23F7A335FDB59D3FCA742




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

Создано: 28 марта 2008 07:13
· Личное сообщение · #2

Советую сначала перехватить в ядре обработчик IRP пакетов драйвера HASP, и смотреть что он делает допустим с вот этим. Найти смещения и в иде посмотреть алгоритм шифрования.
А уже узнав что как и зачем он шифрует реализовать можно в виде DLL что бы меньше гемора было.
\?\usb#hasp...
Func: 9C4024A0, InSize: 0004, OutSize: 0004, BytesRet: 0003
B2BAEFBE44
BEBAFE2A44




Ранг: 43.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 28 марта 2008 10:08
· Личное сообщение · #3

Насколько я помню - алго шифрации пакетов HASP в паблике в виде исходников не проскакивали.
Но их можно достать:
- из Глашиного эмулятора (Инферно как-то даже асмовые исходники без обфускации выкладывал)
- из хармеровского эмулятора (0.8 или 0.9 - но тут тоже надо обфускацию убирать )
- из сатароновского логгера (драйвера) - насчет обфускации не помню, но вроде вообще не обфускан




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

Создано: 28 марта 2008 10:47
· Личное сообщение · #4

AlexVel пишет:
Но их можно достать


Тоесть, я правильно понял, что каждый эмуль и драйвер так или иначе получает теже данные что и я из DeviceIoControl, отличается лишь метод перехвата, и так или иначе все их расшифровывают ?
А исходники vusbbus.sys тоже должны содержать в себе агло ?


ClickF1 пишет:
Советую сначала перехватить в ядре обработчик IRP пакетов драйвера HASP


Думаю это будет очень сложно, ведь там не один sys файл, наверняка это пакетик неплохо гуляет по ним пока не дешифрован. Да и коде наверное без обфускации не обошлось.
Тогда проще искать алго в программе ломаемой, ведь она шифрует и передает и получая расшифровывает пакеты. Просто наверняка уже это не раз делали, не хотел изобретать велосипед...

AlexVel пишет:
Инферно как-то даже асмовые исходники без обфускации выкладывал


А где их качнуть ?



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 28 марта 2008 11:25
· Личное сообщение · #5

ToBad пишет:
А где их качнуть ?

в инете. hardlock.asm



Ранг: 43.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 28 марта 2008 15:37
· Личное сообщение · #6

ToBad пишет:
Тоесть, я правильно понял, что каждый эмуль и драйвер так или иначе получает теже данные что и я из DeviceIoControl, отличается лишь метод перехвата, и так или иначе все их расшифровывают ?

да.
А исходники vusbbus.sys тоже должны содержать в себе агло ?
нет. vusbbus.sys сидит не между прогой (АПИ) и драйвером, а между драйвером хаспа и шиной USB (драйвером USB контроллеров). Точнее даже не 'между', а он сам эмулирует виртуальную шину. В нем совершенно другие пакеты (другое криптование). Это еще более низкий уровень (можно сказать что именно уровень общения с железом)




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

Создано: 28 марта 2008 16:27
· Личное сообщение · #7

AlexVel спасибо за разъяснение !

ssx пишет:
в инете. hardlock.asm


Часа три потратил на поиск, где только не смотрел... Так и не нашел...
Очень прошу выложить повторно если у кого то есть.

Нашёл библиотеку hl_emu.dll с исходниками от 2002 гора, но там алгоритма нет, всё как я понял построено на перехвате уже расшифрованного пакета и имеет значение версия драйвера... Не то, что бы хотелось...



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

Создано: 28 марта 2008 17:47
· Личное сообщение · #8

Вопрос в тему. А при изменении версий дров к хаспу шифрование пакетов не меняется?
и для хасп4 и хасп HL оно одинаковое или разное?
про хасп 4 както писали, что там идет шифрование типа xor xx, ror(rol) xx



Ранг: 128.8 (ветеран), 21thx
Активность: 0.060.05
Статус: Участник

Создано: 28 марта 2008 19:41
· Личное сообщение · #9

Tolkin

"и для хасп4 и хасп HL оно одинаковое или разное?"

Одинаковое.



Ранг: 128.8 (ветеран), 21thx
Активность: 0.060.05
Статус: Участник

Создано: 28 марта 2008 19:45
· Личное сообщение · #10

"про хасп 4 както писали, что там идет шифрование типа xor xx, ror(rol) xx"

но не так примитивно всё же




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

Создано: 28 марта 2008 20:10
· Личное сообщение · #11

Hugo Chaves на васме три статейки есть, вроде там проверили, что в хл это не xor xx, ror(rol) xx



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 28 марта 2008 22:51
· Личное сообщение · #12

AlexVel пишет:
Насколько я помню - алго шифрации пакетов HASP в паблике в виде исходников не проскакивали.

проскакивал на чуть ли не на руборде код Хармера на С.



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

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

ssx

у CrackZa был старый Хармов соурс...

-----
...или ты работаешь хорошо, или ты работаешь много...





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

Создано: 30 марта 2008 11:25
· Личное сообщение · #14

BfoX пишет:
у CrackZa был старый Хармов соурс...


Ага, нашёл, вот он:

// First/Last step packet decrypt/encrypt
//////
void __fastcall Decrypt( BYTE * Buffer )
{
int i;
WORD Seed = ((PAPI_PACKET)Buffer)->CryptSeed;

if (!((PAPI_PACKET)Buffer)->CryptVer)
return;

for( i = 0xFE; i > 0xBD; i-- )
{
Seed -= *(WORD*)(Buffer + i) ^ i;
Seed = (Seed << 0x0F) | (Seed >> 0x01);
*(WORD*)(Buffer + i) += Seed;
}

for( i = 0xB8; i >= 0; i-- )
{
Seed += *(WORD*)(Buffer + i) ^ i;
Seed = (Seed << 0x0F) | (Seed >> 0x01);
*(WORD*)(Buffer + i) -= Seed;
}

((PAPI_PACKET)Buffer)->CryptSeed = Seed;
}

////////////////////////////////////////////////////////////////////// /////////
void __fastcall Encrypt( BYTE * Buffer )
{
int i;
WORD Seed = ((PAPI_PACKET)Buffer)->CryptSeed;

if (!((PAPI_PACKET)Buffer)->CryptVer)
return;

for( i = 0; i < 0xB9; i++ )
{
*(WORD*)(Buffer + i) += Seed;
Seed = (Seed >> 0x0F) | (Seed << 0x01);
Seed -= *(WORD*)(Buffer + i) ^ i;
}

for( i = 0xBE; i < 0xFF; i++ )
{
*(WORD*)(Buffer + i) -= Seed;
Seed = (Seed >> 0x0F) | (Seed << 0x01);
Seed += *(WORD*)(Buffer + i) ^ i;
}

((PAPI_PACKET)Buffer)->CryptSeed = Seed;
}


Неужели это то, что нужно ?... Буду разбираться, пробывать и портировать на Delphi.




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

Создано: 30 марта 2008 11:43 · Поправил: ToBad
· Личное сообщение · #15

Да, с Си я не дружен, как и следовало ожидать так просто ничего не компилируется: 'PAPI_PACKET' : undeclared identifier

Если у кого нибудь есть время и желание, прошу помочь в переводе исходничков на Delphi.



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

Создано: 30 марта 2008 13:13
· Личное сообщение · #16

AlexVel пишет:
- из сатароновского логгера (драйвера) - насчет обфускации не помню, но вроде вообще не обфускан

драйвер не мой - мое только GUI по теме того что не обфускано - у Торо тож в первой версии все лежало как на ладони. В принципе - кому надо и так достанет
Tolkin пишет:
про хасп 4 както писали, что там идет шифрование типа xor xx, ror(rol) xx

Ну есть там такое - когда работаешь на уровне между дровами и прогой когда длинна пакета примерно 0x48 (точно не помню). В данном случае делается эмуляция верхнего (юзеровского ) API для ключа (причем старого Н4).

Код расшифровки буфера обмена на подобии этого:

void DeHashPacket(HaspStruct &packet)
{
MOV EAX,packet
MOV ECX,[EAX+0x10]
JCXZ SHORT exit_
ADD EAX,0x14
loop1: XOR [EAX],0xAA
ROR [EAX],0x4
INC EAX ; <HASPREAD.haspStruct.inbuffer>
DEC ECX
JNZ SHORT loop1
exit_:
}

Но в твоем случае - при подобном перехвате - этот декодер - нафиг не нужен.
Я тоже когда то делал подобный перехватчик на DeviceIoControl - было бы интересно сравнить сырцы



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 30 марта 2008 13:20
· Личное сообщение · #17

ToBad пишет:
Да, с Си я не дружен, как и следовало ожидать так просто ничего не компилируется: 'PAPI_PACKET' : undeclared identifier

это не С виноват, а отсутствие определения структуры пакета.



Ранг: 43.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 30 марта 2008 16:11
· Личное сообщение · #18

sataron пишет:
было бы интересно сравнить сырцы

Ну насколько я знаю (а знаю я много ), ты на C пишешь.
А у ToBad сырцы на Delphi будут
Устанешь сравнивать




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

Создано: 31 марта 2008 00:26
· Личное сообщение · #19

Что касается исходников перехвата DeviceIoControl, то тут я использовал всем известные библиотеки от Рема, ну а исходники остального выглядят очень жутко, так как писал в спешке только для того, что бы проверить принцип, работает ли перехват и увидеть что передается. Sataron-у ушло в личку.

ssx пишет:
это не С виноват, а отсутствие определения структуры пакета.


Понимаю. Ведь это лишь кусочек кода Хармера. Вы могли бы поделится полной версией исходников ?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 01 апреля 2008 01:34
· Личное сообщение · #20

ToBad
[.]minator'a все мучаешь ?

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




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

Создано: 22 апреля 2008 20:21
· Личное сообщение · #21

AlexVel верно сказал, "алго шифрации пакетов можно достать... - из сатароновского логгера (драйвера) - насчет обфускации не помню, но вроде вообще не обфускан" - не обфускан и легко алго достаются, сам проверил




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

Создано: 23 апреля 2008 02:08
· Личное сообщение · #22

Tolkin пишет:
не обфускан и легко алго достаются


Я всё понял. Тему добивать обязательно буду сразу как разберусь со срочными делами.


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


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