Кто может подсказать в чём ошибка в данном коде: Код (Text): format PE DLL native 4.0 at 10000h entry main include '%include%\win32a.inc' include 'Driver.mac' section '.text' code readable writeable executable notpageable aException08xAt db 0ah,0dh,'Exception: %08X at address: %08X',0ah,0dh,0 seh_adr dd 0 seh_ebp dd 0 seh_esp dd 0 ;*******************************************MAIN********************** ***** proc main,pDriverObject,pDriverPath int3 ;pushad ;pushfd push seh_proc_2 push dword[fs:0] mov [fs:0], esp mov [seh_adr],EXTR mov [seh_ebp],ebp mov [seh_esp],esp call test1 EXTR: int3 pop dword[fs:0] add esp, 4 ;popfd ;popad mov eax,STATUS_DEVICE_CONFIGURATION_ERROR return endp ;********************************************************************* ************* seh_proc_2: push ebp mov ebp, esp mov eax, [ebp+8] push dword[eax+0Ch] push dword[eax] push aException08xAt call [DbgPrint] add esp, 0Ch lea eax, [seh_adr] push dword[eax] push dword[eax+4] push dword[eax+8] mov eax, [ebp+10h] pop dword[eax+0B4h] pop dword[eax+0C4h] pop dword[eax+0B8h] xor eax, eax leave retn ;********************************************************************* ************* proc test1 xor eax, eax mov eax, [eax] retn endp ;*******************************************IMPORT******************** ********** section '.idata' import data readable writeable syslibrary ntoskrnl,"ntoskrnl.exe" include 'ntoskrnl.inc' ;********************************************* mov eax,main ;********************************************* section '.reloc' data fixups readable discardable По ходу где то со стеком не расчитал, на метке EXTR стек уже готов к выполнению retn.
R-0 ни при чём, ты перепутал EBP и ESP Код (Text): DWORD Ebp; // [eax+8] [seh_esp] DWORD Eip; // [eax] [seh_adr] DWORD Esp; // [eax+4] [seh_ebp]
Интересная фишка.. почему то не всегда ставится seh фрейм... Пробовал ставить в обработчике NtCreateFile/NtOpenFile (перехват через KeServiceDescriptorTable), SI пишет что фрейм установлен, но при mov eax,[eax](eax=0) наблюдаем BDS. Или опять у меня баги...
нее... вот каркас функции перехватчика: Код (Text): ;*******************************************HOOK********************** ********* HOOK1:;*********************createfile******************** ;int3 push ebp mov ebp, esp cli pushad pushfd mov eax,[ret_createfile] mov [returnh],eax jmp HOOK HOOK2:;*********************openfile*********************** ;int3 push ebp mov ebp, esp cli pushad pushfd mov eax,[ret_openfile] mov [returnh],eax jmp HOOK ;*******************************************HOOK********************** ********* HIGH_PRIORITY = 1Fh HOOK: mov [BuffAdr],edx ; установим максимальный приоретет потока invoke KeGetCurrentThread mov [KTread],eax invoke KeQueryPriorityThread,eax mov [KPTread],eax invoke KeSetPriorityThread,[KTread],HIGH_PRIORITY ;int3 ;****** установим seh фрейм push seh_proc push dword[fs:0] mov [fs:0], esp mov [seh_adr],ERRM mov [seh_ebp],ebp mov [seh_esp],esp int3 nop ;xor eax,eax ;mov eax,[eax] nop ERRM: ;******* снимим seh фрейм pop dword[fs:0] add esp, 4 ;************************ ; востановим приоретет потока invoke KeSetPriorityThread,[KTread],[KPTread] popfd popad sti mov esp, ebp pop ebp jmp [returnh] полный вариант в аттаче _2058391945__spc_test.asm
сволочь m$ делает BSOD в INT_0Eh хандлере; IF PageFault under CLI THEN do BSOD так_шта: или всегда пробуем memory под STI; или патчим INT_0Eh handler..