Посл.ответ |
Сообщение |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 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.01↘0 Статус: Участник
|
Создано: 28 марта 2008 07:13 · Личное сообщение · #2
Советую сначала перехватить в ядре обработчик IRP пакетов драйвера HASP, и смотреть что он делает допустим с вот этим. Найти смещения и в иде посмотреть алгоритм шифрования.
А уже узнав что как и зачем он шифрует реализовать можно в виде DLL что бы меньше гемора было.
\?\usb#hasp...
Func: 9C4024A0, InSize: 0004, OutSize: 0004, BytesRet: 0003
B2BAEFBE44
BEBAFE2A44
| Сообщение посчитали полезным: |
Ранг: 43.2 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 28 марта 2008 10:08 · Личное сообщение · #3
Насколько я помню - алго шифрации пакетов HASP в паблике в виде исходников не проскакивали.
Но их можно достать:
- из Глашиного эмулятора (Инферно как-то даже асмовые исходники без обфускации выкладывал)
- из хармеровского эмулятора (0.8 или 0.9 - но тут тоже надо обфускацию убирать )
- из сатароновского логгера (драйвера) - насчет обфускации не помню, но вроде вообще не обфускан
| Сообщение посчитали полезным: |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 28 марта 2008 10:47 · Личное сообщение · #4
AlexVel пишет:
Но их можно достать
Тоесть, я правильно понял, что каждый эмуль и драйвер так или иначе получает теже данные что и я из DeviceIoControl, отличается лишь метод перехвата, и так или иначе все их расшифровывают ?
А исходники vusbbus.sys тоже должны содержать в себе агло ?
ClickF1 пишет:
Советую сначала перехватить в ядре обработчик IRP пакетов драйвера HASP
Думаю это будет очень сложно, ведь там не один sys файл, наверняка это пакетик неплохо гуляет по ним пока не дешифрован. Да и коде наверное без обфускации не обошлось.
Тогда проще искать алго в программе ломаемой, ведь она шифрует и передает и получая расшифровывает пакеты. Просто наверняка уже это не раз делали, не хотел изобретать велосипед...
AlexVel пишет:
Инферно как-то даже асмовые исходники без обфускации выкладывал
А где их качнуть ?
| Сообщение посчитали полезным: |
Ранг: 352.4 (мудрец), 4thx Активность: 0.15↘0 Статус: Участник retired
|
Создано: 28 марта 2008 11:25 · Личное сообщение · #5
ToBad пишет:
А где их качнуть ?
в инете. hardlock.asm
| Сообщение посчитали полезным: |
Ранг: 43.2 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 28 марта 2008 15:37 · Личное сообщение · #6
ToBad пишет:
Тоесть, я правильно понял, что каждый эмуль и драйвер так или иначе получает теже данные что и я из DeviceIoControl, отличается лишь метод перехвата, и так или иначе все их расшифровывают ?
да.
А исходники vusbbus.sys тоже должны содержать в себе агло ?
нет. vusbbus.sys сидит не между прогой (АПИ) и драйвером, а между драйвером хаспа и шиной USB (драйвером USB контроллеров). Точнее даже не 'между', а он сам эмулирует виртуальную шину. В нем совершенно другие пакеты (другое криптование). Это еще более низкий уровень (можно сказать что именно уровень общения с железом)
| Сообщение посчитали полезным: |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 28 марта 2008 16:27 · Личное сообщение · #7
AlexVel спасибо за разъяснение !
ssx пишет:
в инете. hardlock.asm
Часа три потратил на поиск, где только не смотрел... Так и не нашел...
Очень прошу выложить повторно если у кого то есть.
Нашёл библиотеку hl_emu.dll с исходниками от 2002 гора, но там алгоритма нет, всё как я понял построено на перехвате уже расшифрованного пакета и имеет значение версия драйвера... Не то, что бы хотелось...
| Сообщение посчитали полезным: |
Ранг: 64.0 (постоянный), 2thx Активность: 0.04↘0.01 Статус: Участник
|
Создано: 28 марта 2008 17:47 · Личное сообщение · #8
Вопрос в тему. А при изменении версий дров к хаспу шифрование пакетов не меняется?
и для хасп4 и хасп HL оно одинаковое или разное?
про хасп 4 както писали, что там идет шифрование типа xor xx, ror(rol) xx
| Сообщение посчитали полезным: |
Ранг: 128.8 (ветеран), 21thx Активность: 0.06↘0.05 Статус: Участник
|
Создано: 28 марта 2008 19:41 · Личное сообщение · #9
Tolkin
"и для хасп4 и хасп HL оно одинаковое или разное?"
Одинаковое.
| Сообщение посчитали полезным: |
Ранг: 128.8 (ветеран), 21thx Активность: 0.06↘0.05 Статус: Участник
|
Создано: 28 марта 2008 19:45 · Личное сообщение · #10
"про хасп 4 както писали, что там идет шифрование типа xor xx, ror(rol) xx"
но не так примитивно всё же
| Сообщение посчитали полезным: |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 28 марта 2008 20:10 · Личное сообщение · #11
Hugo Chaves на васме три статейки есть, вроде там проверили, что в хл это не xor xx, ror(rol) xx
| Сообщение посчитали полезным: |
Ранг: 352.4 (мудрец), 4thx Активность: 0.15↘0 Статус: Участник retired
|
Создано: 28 марта 2008 22:51 · Личное сообщение · #12
AlexVel пишет:
Насколько я помню - алго шифрации пакетов HASP в паблике в виде исходников не проскакивали.
проскакивал на чуть ли не на руборде код Хармера на С.
| Сообщение посчитали полезным: |
Ранг: 397.0 (мудрец), 179thx Активность: 0.17↘0.1 Статус: Участник
|
Создано: 30 марта 2008 10:03 · Личное сообщение · #13
ssx
у CrackZa был старый Хармов соурс...
----- ...или ты работаешь хорошо, или ты работаешь много... | Сообщение посчитали полезным: |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 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.2↘0 Статус: Участник
|
Создано: 30 марта 2008 11:43 · Поправил: ToBad · Личное сообщение · #15
Да, с Си я не дружен, как и следовало ожидать так просто ничего не компилируется: 'PAPI_PACKET' : undeclared identifier
Если у кого нибудь есть время и желание, прошу помочь в переводе исходничков на Delphi.
| Сообщение посчитали полезным: |
Ранг: 23.8 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.15↘0 Статус: Участник retired
|
Создано: 30 марта 2008 13:20 · Личное сообщение · #17
ToBad пишет:
Да, с Си я не дружен, как и следовало ожидать так просто ничего не компилируется: 'PAPI_PACKET' : undeclared identifier
это не С виноват, а отсутствие определения структуры пакета.
| Сообщение посчитали полезным: |
Ранг: 43.2 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 30 марта 2008 16:11 · Личное сообщение · #18
sataron пишет:
было бы интересно сравнить сырцы
Ну насколько я знаю (а знаю я много ), ты на C пишешь.
А у ToBad сырцы на Delphi будут
Устанешь сравнивать
| Сообщение посчитали полезным: |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 31 марта 2008 00:26 · Личное сообщение · #19
Что касается исходников перехвата DeviceIoControl, то тут я использовал всем известные библиотеки от Рема, ну а исходники остального выглядят очень жутко, так как писал в спешке только для того, что бы проверить принцип, работает ли перехват и увидеть что передается. Sataron-у ушло в личку.
ssx пишет:
это не С виноват, а отсутствие определения структуры пакета.
Понимаю. Ведь это лишь кусочек кода Хармера. Вы могли бы поделится полной версией исходников ?
| Сообщение посчитали полезным: |
Ранг: 337.6 (мудрец), 224thx Активность: 0.21↘0.1 Статус: Участник born to be evil
|
Создано: 01 апреля 2008 01:34 · Личное сообщение · #20
ToBad
[.]minator'a все мучаешь ?
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным: |
Ранг: 64.0 (постоянный), 2thx Активность: 0.04↘0.01 Статус: Участник
|
Создано: 22 апреля 2008 20:21 · Личное сообщение · #21
AlexVel верно сказал, "алго шифрации пакетов можно достать... - из сатароновского логгера (драйвера) - насчет обфускации не помню, но вроде вообще не обфускан" - не обфускан и легко алго достаются, сам проверил
| Сообщение посчитали полезным: |
Ранг: 450.3 (мудрец), 13thx Активность: 0.2↘0 Статус: Участник
|
Создано: 23 апреля 2008 02:08 · Личное сообщение · #22
Tolkin пишет:
не обфускан и легко алго достаются
Я всё понял. Тему добивать обязательно буду сразу как разберусь со срочными делами.
| Сообщение посчитали полезным: |