- [Duke's Virus Labs #9] - [Page 23] - Использование Structured Exception Handler (SEH). (c) by Voodoo/SMF Просматривая код вирусов я часто встречал команду типа push dword ptr fs:[0] . Для меня эти инструкции были загадкой. Но ползая по инету я наткнулся на так называемый Structured Exception Handler. Еще при разработке Voodoo v3.1 у меня часто возникали проблемы с ошибками винды при обращении по адресу скажем 000000H. Но я всяческими извратами избавился от этой проблемы ( вроде... ). Как оказалось SEH бы мне сдорово помог. Так например CIH используя SEH "выходит сухим из воды" когда его запускают под WIN NT. А в Win32.Cabanas SEH использовался как anti debug прием. Как оказалось использование SEH не вызывает особых затруднения. В начале следует сохранить исходный Handler : push dword ptr fs:[0] Далее укажем на свой обработчик : push offset NEWSEH_Handler mov fs:[0],sp По завершению следует все вернуть на место : pop dword ptr fs:[0] Пример использования SEH : tasm32 /m3 /ml sehtest,,; tlink32 /Tpe /aa sehtest,sehtest,,import32.lib ===== Cut ===== .386p .model flat ; Good good... 32 bit r0x0r extrn MessageBoxA:PROC ; Defined APIs extrn ExitProcess:PROC .data szTitle db "Structured Exception Handler",0 szMessage db "Intercepted General Protection Fault!",0 .code start: call setupSEH ; The call pushes the offset ; past it in the stack rigth? ; So we will use that :) errorhandler: mov esp,[esp+8] ; Put the original SEH offset ; Error gives us old ESP ; in [ESP+8] push 00000000h ; Parameters for MessageBoxA push offset szTitle push offset szMessage push 00000000h call MessageBoxA push 00000000h call ExitProcess ; Exit Application setupSEH: push dword ptr fs:[0] ; Push original SEH handler mov fs:[0],esp ; And put the new one (located ; after the first call) mov ebx,0BFF70000h ; Try to write in kernel (will mov eax,012345678h ; generate an exception) xchg eax,[ebx] ret end start ===== Cut ===== Источники доп. информации (прилагаются к статье) : http://members.xoom.com/Iczel/Exceptionhandling.html http://members.xoom.com/Iczel/files/SEHinASM.zip