Проверьте правильно ли я перевел на асм (масм32) макрос от Мс Рема для записи в массив с адресами функций, вот оригинал Код (Text): //макрос для простого доступа к SST ядра #define NTCALL(_function) KeServiceDescriptorTable->ntoskrnl.ServiceTable[_function] NTCALL(OpenProcId) = new_NtOpenProcess; Вот то что получилось: Код (Text): mov eax,offset KeServiceDescriptorTable mov eax,[eax] mov ecx,OpenProcId lea edx,offset new_NtOpenProcess mov [eax+ecx*4],edx p.s. я в синтаксисе c++ не особо силен, потому прошу помощи
Так и не дождавшись ответов выкладываю свою универсальную ф-ю перехвата, подходит как для установки так и для снятия Код (Text): catch_NtOpenProcess proc uses edi esi ebx dwProcCode:dword,lpszNewProcName:dword if DEBUG_FLAG invoke DbgPrint,$CTA0("catch_NtOpenProcess") endif ; çàïðåùàåì ïðåðûâàíèÿ cli mov eax,cr0 push eax ; ñáðîñèòü WP bit and eax,0FFFEFFFFh mov cr0, eax lea eax,KeServiceDescriptorTable mov eax,[eax] mov eax,[eax] mov edx,dwProcCode mov ebx,lpszNewProcName xchg ebx,[eax+edx*4] mov TrueNtOpenProcess,ebx pop eax ; âîñòàíîâèòü ñîäåðæèìîå CR0 mov cr0,eax ; ðàçðåøàåì ïðåðûâàíèÿ sti if DEBUG_FLAG invoke DbgPrint,$CTA0("end_catch_NtOpenProcess") endif ret catch_NtOpenProcess endp Установка перехвата invoke catch_NtOpenProcess,122,addr new_NtOpenProcess Снятие invoke catch_NtOpenProcess,122,TrueNtOpenProcess