/*-----------------------------------------------------------------------*/
/* R I N G 0, I S S U E # 1 */
/*-----------------------------------------------------------------------*/
Отлучение программ от HASP-ключа
by Dr_Net/TSRH
Target : HASP - guard
Author : Dr_Net [[email protected]] [http://www.uofg.cc ,
http://tsrh.cjb.net]
Toolz : Soft-Ice v4.xx , IDA v4.xx , ручка прямая и лист бумаги .
ATTENTION : Вся приведенная в этом документе информация
предназначена для ознакомления , но _не для применения на практике_ !
Автор ничего и никого не несет .
-=Интро=-
Статья предназначена для подготовленных крякеров , имеющих опыт
работы с различными защитами . Но это может быть первый тутор по снятию
защит донглов . Труд представляет собой сосредоточие разрозненных знаний
о HASP-guard . Я не буду приводить конкретный пример программы ,
защищенной хаспом , а дам общие представления о защите . Видов HASP
существует великое множество , я приведу только самые распространенные .
HASP-4 LPT-ключ без памяти
MemoHASP LPT-ключ с памятью (от 112 до 496байт)
NetHASP[X] LPT-ключ с памятью (5 100 пользователей) сетевой
TimeHASP LPT-ключ с памятью (16 байт) и реалтаймом
Не смотря на различное строение ключей , механизмы защиты имеют схожий
алгоритм .
-=Основа защиты=-
Через обращение к функции , размещенной в коде программы [или в
dll] , происходит обмен данными программы с донглом . Среди крякеров
функция получила название HaspReg() , так как параметры передаются через
регистры . Она возвращает различные значения . Вот таблица , в которой
описано большинство параметров функций и нужных программе значений .
SERVICE BH=FUNC, BL=PORT RETURN
01h.ISHASP SERVICE AX : 0 - HASP NOT FOUND1 - HASP FOUND
02h.HASPCODE AX : 1ST RETURN CODE BX : 2ND RETURN
CODE
CX : 3RD RETURN CODE DX : 4TH RETURN
CODE
03h.READMEMO BX : DATACX : STATUSDI=MEMORY ADDR.
(ЧИТАЕТ 1 БАЙТ ПО АДРЕСУ DI)
05h.HASPSTATUS AX : MEMORY SIZE BX : HASP TYPE CX :
ACTUAL LPT_NUM
06h.HASPID AX : IDLOW BX : IDHIGH CX : STATUS
32h. READBLOCK CX : STATUS
На самом деле их намного больше , но эти чаще всего используют . В
некоторых случаях достаточно изменить код результата выполнения [ecx=0]
-=Для углубленного изучения предлагаю код HaspCode (bh=2)=- Для
ленивых в айсдамп встроена команда /haspcode [параметры]
HaspCode:
mov edx,HaspBuffer
movzx eax,word [pwd2] ; Password 2
movzx ebx,word [pwd1] ; Password 1
shl eax,10h
mov ax,bx
mov [edx],eax
xor dword [edx], 09071966h
xor eax,eax ; Clear eax
call sub_401108
xor ebx,ebx
mov edi,HaspBuffer+14h
loc_4011F9:
xor eax,eax
mov esi,eax
jmp short loc_401220
loc_4011FF:
movsx edx,byte [ebx+HaspBuffer+4]
shl edx,3
lea ecx,[edx+HaspTable] ; Points at table entry.
mov eax,esi
mov dl,[eax+ecx]
mov ecx,esi
shl ecx,3
add ecx,ebx
mov [edi+ecx],dl
inc esi
loc_401220:
cmp esi,byte 8
jb loc_4011FF
inc ebx
cmp ebx,byte 8
jb loc_4011F9
call sub_40112E
retn
;------ Functions ------
sub_401108:
mov cl,[edx]
and cl,7
mov [edx+eax+4],cl
sar dword [edx],3
inc ax
cmp ax,8
jl sub_401108
retn
sub_40112E:
movzx ecx,word [seed] ; Seed Code
mov ax,cx
lea edi,[HaspBuffer+0Ch]
xor esi,esi
loc_40113E:
mov byte [esi+edi],0
xor edx,edx
loc_401144:
movzx eax,ax
imul ecx,eax,01989h
mov eax,ecx
add ax,5
mov ecx,7
sub ecx,edx
movzx ebx,ax
sar ebx,9
and ebx,3Fh
mov bl,[ebx+HaspBuffer+14h]
shl bl,cl
or [edi+esi],bl
inc dx
cmp dx,8
jl loc_401144
inc si
cmp si,8
jl loc_40113E
movzx eax,word [edi]
mov esi,[dClient_EAX]
mov [esi],eax
movzx eax,word [edi+2]
mov esi,[dClient_EBX]
mov [esi],eax
movzx eax,word [edi+4]
mov esi,[dClient_ECX]
mov [esi],eax
movzx eax,word [edi+6]
mov esi,[dClient_EDX]
mov [esi],eax
retn
pwd1: dw 0
pwd2: dw 0
seed: dw 0
HaspBuffer: times 84 db 0
HaspTable: db
00h,00h,00h,00h,00h,00h,00h,00h,00h,01h,00h,01h,00h,01h,00h,01h
db
01h,00h,01h,00h,01h,00h,01h,00h,00h,00h,01h,01h,00h,00h,01h,01h
db
01h,01h,00h,00h,01h,01h,00h,00h,00h,00h,00h,00h,01h,01h,01h,01h
db
01h,01h,01h,01h,00h,00h,00h,00h,01h,01h,01h,01h,01h,01h,01h,01h
-=Последние слова=-
Есди вам что-нибудь непонятно или у вас возникли денежные
предложения - пишите или ищите меня ...
ICQ 114366611
IRC dalnet #uofg #xtin
MAIL [email protected] or [email protected]
-=Словарь=-
Донгл[dongle] - ключ ака hardware-устройство , висящее на
каком-либо порту . [конкретно subj - LPT]
Greetz jump out to TeaM | TsrH , UOFG crew [special for aSL!] ,
HangUp , XTIN , Nerf and All DeveLopErz AroUnd the w0rlD .