Хай пипл. Есть вопрос, а то сам уже запарился и уперся в стену. Пытаюсь прогу отключить от ХАСПА. Ключ без памяти. Прога не шифрована - чистый код. Внутри есть вызовы 01, 3D функции. Нашел пароль... Но хочется совсем убрать ХАСП. При старте прога один раз вызывает 3D функцию. В стек кидает следующие DW: 12D940h 12D944h 12D948h 12D94Ch PASSWORD2 PASSWORD1 00h 64h 3Dh затем идет вызов hasp(3D, 64, 00, Pass1, Pass2, Par1, Par2, Par3, Par4) Вопрос вот в чем - хочу узнать что за блок расшифровывается, а затем просто его расшифровать и записать в ехе. Потом просто занопить все вызовы хаспа. По документации par1=0, par2-размер буфера, par3 - сегмент буфера, par4 - смещение буффера. Если 32-ые API - то par3 ненужен. А вот у меня какие-то странные цифры лезут. Ну не может быть буфер размером 12D948h!!! Как быть? =(
Код (Text): ; ; void HASPAPI hasp( int service, ; int seed, ; int lptnum, ; int pass1, ; int pass2, ; int HASP_FAR* p1, ; int HASP_FAR* p2, ; int HASP_FAR* p3, ; int HASP_FAR* p4 ); ... ; ; Check for 3D ; .data ArgSize dd 8 Arg3D db 0dbh,0feh,01eh,06bh,0e4h,01bh,0dbh,0b0h ;Arg3D db 8 dup(0) db 8 dup(0) Ans3D db 095h,078h,04bh,035h,05eh,0bch,0dch,048h,06ch,08ah,0e2h,00dh,022h,0bah, 0f8h,0c3h MsgArg3D db 'ARG 3D=???????????????????????????????? Result=????????',0Dh,0Ah,0 Result dd 0 .code LOCALHASP_DECODEDATA = 61 mov esi,offset Arg3D mov edi,offset MsgArg3D+7 mov ecx,16 call Get_HexStr ; mov esi,offset Result ; mov edi,offset MsgArg3D+31 ; mov ecx,4 ; call Get_HexStr push offset MsgArg3D call Write_Log xor eax, eax mov p1,eax mov p3,eax mov p2,8 mov p4,offset Arg3D push offset p4 ; p4 push offset p3 ; p3 push offset p2 ; p2 push offset p1 ; p1 push dword ptr Key2 ; Key2 push dword ptr Key1 ; Key1 push USBHASP_DEFAULT ; HASP_DEFAULT ; lptnum push dword ptr Seed ; Seed push 3Dh ; service call dword ptr ProcHaspAddr