Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
 
 Ring0 - Вызов функции с PL0 (в нулевом кольце защиты). ОС: Win9x/Me (VC)
 
 
 
 //Test.cpp
 
 #include <windows.h>
 
 #include <stdio.h>
 
 #include "ring0.h"
 
 
 
 
 
 DWORD __fastcall CheckRing0(void);
 
 
 
 
 
 int main(int argc, char* argv[])
 
 {
 
 DWORD dwPL;
 
 
 
   dwPL = CheckRing0();
 
   printf("Ring - %d\n", dwPL);
 
 
 
   CallRing0((PRING0FUNC)CheckRing0, 0, &dwPL);
 
   printf("Ring - %d\n", dwPL);
 
 
 
   return 0;
 
 }
 
 
 
 
 
 DWORD __fastcall CheckRing()
 
 {
 
   __asm
 
   {
 
     xor   eax,eax
 
     mov   ax,cs
 
     and   al,3
 
   }
 
 }
 
 
 
 
 
 ********************************************************************
 
 
 
 //Ring0.h
 
 #ifndef __RING0_H__
 
 #define __RING0_H__
 
 
 
 
 
 typedef DWORD (__fastcall *PRING0FUNC)(DWORD dwParams);
 
 
 
 
 
 BOOL  CallRing0(PRING0FUNC pRing0Func, DWORD dwParams, LPDWORD lpdwRetValue);
 
 
 
 
 
 #endif // __RING0_H__
 
 
 
 
 
 ********************************************************************
 
 //Ring0.cpp
 
 #include <windows.h>
 
 #include "ring0.h"
 
 
 
 
 
 /******************************************************************************/
 
 /*                         !!! Только для Win9x !!!                           */
 
 /******************************************************************************/
 
 
 
 void  Ring0FarFunc();
 
 
 
 __declspec(naked) BOOL CallRing0(PRING0FUNC pRing0Func, DWORD dwParams,
 
                                  LPDWORD lpdwRetValue)
 
 {
 
   __asm
 
   {
 
     push  ebp
 
     mov   ebp,esp
 
     push  esi
 
 
 
     /* Определяем базовый адрес LDT */
 
     sldt  ax                  /* AX = селектор LDT */
 
     and   eax,0FFF8h
 
     jz    NoFreeEntries
 
 
 
     push  esi
 
     sgdt  FWORD PTR [esp-2]
 
     pop   esi                 /* ESI = базовый адрес GDT */
 
     add   esi,eax
 
 
 
     movzx ecx,WORD PTR [esi]
 
     inc   ecx
 
     shr   ecx,3               /* ECX = число дескрипторов в LDT */
 
     mov   edx,[esi+1]
 
     mov   dl,[esi+7]
 
     ror   edx,8               /* EDX = базовый адрес LDT */
 
     mov   esi,edx
 
 
 
     /* Ищем свободный дескриптор в LDT */
 
 EntryLoop:
 
     cmp   BYTE PTR [esi+5],0
 
     je    FoundFreeEntry
 
     add   esi,8
 
     loop  EntryLoop
 
 
 
 NoFreeEntries:
 
     xor   eax,eax
 
     jmp   Done
 
 
 
 FoundFreeEntry:
 
     /* Найден свободный дескриптор LDT */
 
 
 
     /* Преобразуем дескриптор LDT в шлюз вызова */
 
     mov   eax,OFFSET Ring0FarFunc
 
     mov   DWORD PTR [esi],eax
 
     mov   DWORD PTR [esi+4],eax
 
     mov   DWORD PTR [esi+2],0EC000028h
 
 
 
     /* Вызываем процедуру через шлюз вызова */
 
     mov   eax,esi
 
     sub   eax,edx
 
     or    al,7                /* AX = селектор шлюза вызова */
 
     push  ax
 
     push  eax
 
     mov   eax,[pRing0Func]
 
     mov   ecx,[dwParams]
 
     call  FWORD PTR [esp]
 
     add   esp,6
 
     mov   ecx,[lpdwRetValue]
 
     jecxz FreeEntry
 
     mov   DWORD PTR [ecx],eax
 
 
 
 FreeEntry:
 
     /* Освобождаем дескриптор LDT */
 
     xor   eax,eax
 
     mov   DWORD PTR [esi],eax
 
     mov   DWORD PTR [esi+4],eax
 
     inc   eax
 
 
 
 Done:
 
     pop   esi
 
     pop   ebp
 
     ret
 
   }
 
 }
 
 
 
 __declspec(naked) void Ring0FarFunc()
 
 {
 
   __asm
 
   {
 
     call  eax
 
     retf
 
   }
 
 }
 
 
 
 
 
 


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS