NTCALL - макрос Ms Rema

Тема в разделе "WASM.WIN32", создана пользователем Guest, 11 янв 2006.

  1. Guest

    Guest Guest

    Публикаций:
    0
    Проверьте правильно ли я перевел на асм (масм32) макрос от Мс Рема для записи в массив с адресами функций, вот оригинал
    Код (Text):
    1.  
    2. //макрос для простого доступа к SST ядра
    3. #define NTCALL(_function) KeServiceDescriptorTable->ntoskrnl.ServiceTable[_function]
    4.  
    5. NTCALL(OpenProcId) = new_NtOpenProcess;
    6.  


    Вот то что получилось:
    Код (Text):
    1.  
    2.         mov eax,offset KeServiceDescriptorTable
    3.     mov     eax,[eax]
    4.     mov ecx,OpenProcId
    5.     lea edx,offset new_NtOpenProcess
    6.     mov     [eax+ecx*4],edx
    7.  
    8.  




    p.s. я в синтаксисе c++ не особо силен, потому прошу помощи
     
  2. Guest

    Guest Guest

    Публикаций:
    0
    Так и не дождавшись ответов выкладываю свою универсальную ф-ю перехвата, подходит как для установки так и для снятия


    Код (Text):
    1.  
    2. catch_NtOpenProcess proc    uses edi esi ebx dwProcCode:dword,lpszNewProcName:dword
    3.  
    4.     if  DEBUG_FLAG
    5.         invoke  DbgPrint,$CTA0("catch_NtOpenProcess")
    6.     endif
    7.  
    8.     ; çàïðåùàåì ïðåðûâàíèÿ
    9.     cli
    10.     mov eax,cr0
    11.     push    eax
    12.     ; ñáðîñèòü WP bit
    13.     and eax,0FFFEFFFFh
    14.     mov cr0, eax
    15.  
    16.     lea eax,KeServiceDescriptorTable
    17.     mov eax,[eax]
    18.     mov eax,[eax]
    19.     mov edx,dwProcCode
    20.     mov ebx,lpszNewProcName
    21.     xchg    ebx,[eax+edx*4]
    22.     mov TrueNtOpenProcess,ebx
    23.        
    24.     pop eax    
    25.     ; âîñòàíîâèòü ñîäåðæèìîå CR0
    26.     mov cr0,eax
    27.     ; ðàçðåøàåì ïðåðûâàíèÿ
    28.     sti
    29.    
    30.     if  DEBUG_FLAG
    31.         invoke  DbgPrint,$CTA0("end_catch_NtOpenProcess")
    32.     endif
    33.        
    34.     ret
    35. catch_NtOpenProcess endp
    36.  
    37.  




    Установка перехвата

    invoke catch_NtOpenProcess,122,addr new_NtOpenProcess



    Снятие

    invoke catch_NtOpenProcess,122,TrueNtOpenProcess