· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Ещё один способ перехода в ring 0 ???

Посл.отвђт Сообщенiе


Дата: Окт 20, 2003 23:58:54

Hi, ASM’щики.
Подскажите пожалуйста: может ли такой способ перехода в
ring 0 работать вообще, и если да, в каком направлении
искать ошибку, какую литературу почитать?

ТЕОРИЯ:
Задача начинает выполнятся с уровня CPL, указанного
селектором кодового сегмента (первые два бита в образе
регистра CS) внутри TSS, когда происходит переключение
задач.

Я СДЕЛАЛ СЛЕДУЮЩЕЕ:
Создал поток(назовём его Ring0Thread), позволил ему
выполнить несколько инструкций, (дальнейшие действия
первичный поток выполняет в рамках критической секции,
Ring0Thread засыпает) получил контекст Ring0Thread
функцией GetThreadContext, обнулил первые два бита в
образе регистра CS, возвратил контекст на место функцией
SetThreadContext, (далее первичный поток выходит из
критической секции, Ring0Thread просыпается), Ring0Thread
попробовал выполнить mov eax,dr0 и в результате:

WinXP это приложение снял(если не выполнять “запрещённой
команды” приложение продолжает нормально работать);
А Win98 показал мне синий экран сразу после разморозки
Ring0Thread.

Очень интересно узнать ваше мнение по этому вопросу.
Спасибо за внимание.


Дата: Окт 21, 2003 00:16:37

byte

Как бы ты в кольце-3 не извращался - ничего у тебя не получится. Я не беру во внимание PhysicalMemory, но твои контексты тебе не помогут, DPL ты не изменишь. Программа profi (поиск по форуму!) благодаря багу в шлюзе 2e могла обходить ЧАСТЬ ограничений (и то, я ее не гонял, а кто-нибудь, кстати, гонял?), так в XP+ и int 2E не стало...


Дата: Окт 21, 2003 00:35:11 · Поправил: byte

А разве ring 0 здача не может пользоваться сегментом с DPL 3(а также 2,1,0), в литературе (процессоры Pentium4 Athlan и Duron авторы: Михаил Гук, Виктор Юров) именно так сказано?


Дата: Окт 21, 2003 01:04:03

PhysicalMemory

А на счёт этого спосибо, поковыряюсь в этой теме.


Дата: Окт 21, 2003 03:01:32 · Поправил: Valery

А разве ring 0 здача не может ...

Task Switch на tss с cpl=0 при dpl !=0 даст #GP, т.к. для несогласованного сегмента кода обязательно dpl=cpl, а для согласованного обязательно dpl<=cpl. Проверь сам.

Только в одном случае cpl, dpl и вся компания игнорируются и даже не имеют смысла - непосредственно после перехода в PM, до сериализации через control transfer, сpl считается равным 0 независимо от унаследованного из RM значения CS.

А по железу Гук пишет неплохие пособия... :)

Кстати.. а почему ты уверен так, что когда переключаешь треды бывает task switch?


Дата: Окт 21, 2003 13:41:43

Извините что “неоперативно” общаюсь, не могу часто в
Net'е висеть. А можно task switch по-другому
назвать, а то я не совсем понял о чём речь.


Дата: Окт 21, 2003 14:19:55

Я прсто хотел сказать, что в винде манипуляции с TEB не через tss делаются. А task switch - переключение задач - в интеловской терминологии именно tss


Дата: Окт 21, 2003 15:17:29

byte
Баг со структурой context в NT4 без сервис паков вроде еще работал. Но в этой дыре давно уже торчит сервис пак 8)


Дата: Окт 21, 2003 18:52:16

PhysicalMemory

А на счёт этого спосибо, поковыряюсь в этой теме.



"What most people don't know is that NT charges its Object Manager subsystem with providing a namespace (see my article on the Object Manager for more information), and the Object Manager allows virtually anything to be mapped as part of it, just like UNIX's file system namespace. And what even fewer people know is that NT has a mechanism that lets an application view (and even modify, with the proper security configuration) a system's physical memory. Its a section (memory mapping) object that is named \Device\PhysicalMemory in NT's namspace (you can verify its existance by using our WinObj tool)."

http://www.sysinternals.com/ntw2k/info/tips.shtml


Сырец -
http://vip.6to23.com/NowCan1/tech/NTMEM.htm


Дата: Окт 21, 2003 18:54:15

Я прсто хотел сказать, что в винде манипуляции с TEB не через tss делаются

Гы-гы. Разумеется, для этого KPCR есть:
typedef struct _KPCR // processor control region
        {
/*000*/ NT_TIB             NtTib;		//ring-0 exceptions list
/*01C*/ struct _KPCR      *SelfPcr;
/*020*/ struct _KPRCB     *Prcb;
/*024*/ KIRQL              Irql;
/*028*/ DWORD              IRR;
/*02C*/ DWORD              IrrActive;
/*030*/ DWORD              IDR;
/*034*/ DWORD              Reserved2;
/*038*/ PKIDTENTRY		   IDT;		//struct _KIDTENTRY *
/*03C*/ PKGDTENTRY		   GDT;		//struct _KGDTENTRY *
/*040*/ PKTSS			   TSS;		//struct _KTSS *

typedef struct _KTSS {
  /*0x0*/ unsigned short Backlink;
  /*0x2*/ unsigned short Reserved0;
  /*0x4*/ DWORD Esp0;
  /*0x8*/ unsigned short Ss0;
  /*0xa*/ unsigned short Reserved1;
  /*0xc*/ DWORD NotUsed1[4];
  /*0x1c*/ DWORD CR3;
  /*0x20*/ DWORD Eip;
  /*0x24*/ DWORD NotUsed2[9];
  /*0x48*/ unsigned short Es;
  /*0x4a*/ unsigned short Reserved2;
  /*0x4c*/ unsigned short Cs;
  /*0x4e*/ unsigned short Reserved3;
  /*0x50*/ unsigned short Ss;
  /*0x52*/ unsigned short Reserved4;
  /*0x54*/ unsigned short Ds;
  /*0x56*/ unsigned short Reserved5;
  /*0x58*/ unsigned short Fs;
  /*0x5a*/ unsigned short Reserved6;
  /*0x5c*/ unsigned short Gs;
  /*0x5e*/ unsigned short Reserved7;
  /*0x60*/ unsigned short LDT;
  /*0x62*/ unsigned short Reserved8;
  /*0x64*/ unsigned short Flags;
  /*0x66*/ unsigned short IoMapBase;
  /*0x68*/ KiIoAccessMap IoMaps[1];		//struct _KiIoAccessMap
  /*0x208*/ BYTE IntDirectionMap[32];
} KTSS, *PKTSS;


Дата: Окт 21, 2003 20:06:05

Ok. Я получил исчерпывающий ответ на свой вопрос, думаю
блокировать эту тему не стоит - пусть послужит примером
для тех, кто захочет повторить мой "подвиг" (а может
кто-то захочет высказаться).

Большое СПАСИБО: volodya; Valery; Black_mirror - за
консультацию, а так же всем кто уделил внимание этой
теме.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.143