Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

Нулевое кольцо защиты (Ring0)   Найти похожие ветки 

 
SDW-syscoder   (2004-02-23 09:36) [0]

Каким способом можно выполнить участки кода программы (процедуры или функции), написанные с использованием asm-вставок в этом кольце защиты, т.к. ОС Windows XP(2000) не разрешает на прямую работать с регистрами, прерываниями и портами компьютера.
Компонент TVicHW32 не впаривать:).


 
KSergey ©   (2004-02-23 09:43) [1]

Писать собственный драйвер - наиболее корректно для работы с портами в данных системах. (как - см. DDK; только не надо спрашивать что это такое - см. прайс MS)
Или все-таки воспользоваться готовыми универсальными, т.к. хлопотное это дело.


 
12345678   (2004-02-23 09:58) [2]

http://www.securitylab.ru/42927.html
hehe


 
Игорь Шевченко ©   (2004-02-24 18:21) [3]

12345678   (23.02.04 09:58)

Ну-ну. Хотел бы я знать, что можно сделать с этой информацией.
А то, что можно подсоединиться к ядерному отладчику в XP, так это давно известно...Благо сам отладчик умеет это делать...


 
N169   (2004-02-24 19:28) [4]

Поищите в интернете архивчик callgate.zip и почитайте книгу MATT PIETREK Windows 95 System programming SECRETS
Там описан способ выполнения user mode кода в ring0.
(Некоторые перцы используют описанный там приём для портирования кода из-под ДОС. Но результаты иногда не очень...)


 
KSergey ©   (2004-02-25 08:30) [5]

>  [4] N169   (24.02.04 19:28)
> Поищите в интернете архивчик callgate.zip и почитайте книгу
> MATT PIETREK Windows 95 System programming SECRETS

Вот только проканают ли "Windows 95 SECRETS" в качестве WinNT SECRETS - что-то сомнения меня разбирают...


 
Kerk ©   (2004-02-25 09:26) [6]

Вот для WinNT. Способ для настоящих извращенцев... %))

http://www.sbvc.net/articles/33.html


 
Игорь Шевченко ©   (2004-02-25 11:04) [7]

Kerk ©   (25.02.04 09:26)

Туфта это, похоже...


 
h0use ©   (2004-02-25 17:23) [8]

И все же, вот тут скачал програмку, котрая читает MSR регистры, без какого-то там труда, я же никак не могу заставить работать оператор rdmsr  в асме :( Подскажите, может кто-то уже читал MSR из Делфы?


 
Digitman ©   (2004-02-25 17:56) [9]


> h0use ©   (25.02.04 17:23) [8]


"Делфа"-то при чем ?
Суть вопроса - как без использования драйвера режима ядра получить управление в Ринг0 ..


 
h0use ©   (2004-02-25 18:02) [10]

Хорошо, Делфа не причем...вообще кто-нибудь читал из чего-нибудь MSR без написания драйвера?


 
Digitman ©   (2004-02-25 18:13) [11]


> h0use ©   (25.02.04 18:02) [10]


ссылка ж приведена в  [6]

исследуй указанный код - сразу ответ на вопрос будет : моно или низя


 
Klev   (2004-02-25 21:45) [12]

Таким развратом в Делфях заниматься?
Зачем?
Всегда же есть MASM, TASM...


 
NightAngel ©   (2004-02-25 23:22) [13]

Код для Win95/98.

// Код переданной функции будет выполнятся с уровнем привилегий PL0.
// Примечание: Это будет работать, только на Win9x/ME.
// Пользоваться сервисами WinAPI нельзя. Вместо них используются сервисы VMM/VxD
procedure CallRing0(Ring0Func:pointer);
const
ExceptionUsed = 5;
var
 IDT       : array [0..7] of byte;
 lpOldGate : dword;
asm
 pushad
 sidt fword ptr IDT
 mov ebx, dword ptr [IDT+2]
 add ebx, 8*ExceptionUsed
 mov dx, word ptr [ebx+6]
 shl edx, 16d
 mov dx, word ptr [ebx]
 mov [lpOldGate], edx
 mov eax, Ring0Func
 mov word ptr [ebx], ax
 shr eax, 16d
 mov word ptr [ebx+6], ax
 push ebx
 int ExceptionUsed
 pop ebx
 mov ebx, dword ptr [IDT+2]
 add ebx, 8*ExceptionUsed
 mov edx, [lpOldGate]
 mov word ptr [ebx], dx
 shr edx, 16d
 mov word ptr [ebx+6], dx
 popad
end;


 
N169   (2004-02-26 08:48) [14]

callgate через модификацию LDT - туфта?
Вот вам пример работающей проги: PicProg для Windows от фирмы «Телесистемы».
Упомянутым выше способом они "портировали" на винду свой старый код для ДОС.
Так что, всё работает. На WinNT (Y2K,XP) тоже.
Не верите - закачайте, посмотрите, проверьте.


 
h0use ©   (2004-02-26 09:32) [15]

Хорошо, я согласен, раз без написания драйвера никак без извратов попасть в Ring0, тогда скажите, где можно найти пример примитивного драйвера для NT и для Win 9х отдельно и возможно ли бинарный код каким-то образом засунуть в компонент, так чтоб при вызове этого компонента соотвт код записывался в файл и после этого удалялся?


 
Digitman ©   (2004-02-26 09:56) [16]


> возможно ли бинарный код каким-то образом засунуть в компонент


а что, по твоему, компонент содержит кроме бинарного кода ?
там сплошь и рядом - бинарный код)

и что значит "засунуть" ?


> при вызове этого компонента


что означает в твоем понимании "вызов компонента" ?
есть вызов некоего метода некоего класса/объекта, но термин "вызов компонента" - это нонсенс


> соотвт код записывался в файл


а для чего нулевое кольцо-то ? что, разве в файл нельзя записать данные в 3-м кольце ?


> после этого удалялся


кто ?!


 
Игорь Шевченко ©   (2004-02-26 11:17) [17]

N169   (26.02.04 08:48)


> Вот вам пример работающей проги: PicProg для Windows от
> фирмы «Телесистемы».
> Упомянутым выше способом они "портировали" на винду свой
> старый код для ДОС.
> Так что, всё работает. На WinNT (Y2K,XP) тоже.
> Не верите - закачайте, посмотрите, проверьте.


Ссылочку ?


 
Kerk ©   (2004-02-26 11:24) [18]

Игорь Шевченко ©   (25.02.04 11:04) [7]

Почему туфта? Там же к статье пример идет... вполне рабочий..


 
h0use ©   (2004-02-26 12:06) [19]


> а что, по твоему, компонент содержит кроме бинарного кода
> ?
> там сплошь и рядом - бинарный код)
>
> и что значит "засунуть" ?

Это значит, что есть например vxd и можно ли ее добавить как ресурс в ресурсный файл компоненты, а потом собственно из ресурса пререписать во временно созданный файл и проинициализировать?

> что означает в твоем понимании "вызов компонента" ?
> есть вызов некоего метода некоего класса/объекта, но термин
> "вызов компонента" - это нонсенс

Вызов метода компонента, конечно...а точнее его конструктора.

> а для чего нулевое кольцо-то ? что, разве в файл нельзя
> записать данные в 3-м кольце ?

Записать можно, не в этом была основа вопроса

> кто ?!

собственно созданный vxd файл


 
Игорь Шевченко ©   (2004-02-26 12:13) [20]

Kerk ©   (26.02.04 11:24)

"Вполне рабочий пример" только перезагрузил мне компьютер. И все.

Еще раз - туфта.


 
Игорь Шевченко ©   (2004-02-26 12:19) [21]

h0use ©   (26.02.04 12:06)


> Это значит, что есть например vxd и можно ли ее добавить
> как ресурс в ресурсный файл компоненты, а потом собственно
> из ресурса пререписать во временно созданный файл и проинициализировать?


Можно. Некоторые утилиты Руссиновича так и работают.


 
Kerk ©   (2004-02-26 12:29) [22]


> Игорь Шевченко ©   (26.02.04 12:13) [20]

У меня работает.
Win2k Prof + sp4


 
Игорь Шевченко ©   (2004-02-26 12:44) [23]

Kerk ©   (26.02.04 12:29)

Система аналогичная, результат описан выше. Вот ты сам подумай, если бы можно было так легко и просто входить в нужный режим, стали бы Руссинович с Когсуэллом какие-то драйверы режимая ядра изобретать для своих утилит ? Ссылки на то, что "они не знали" не принимаются, так как знают они гораздо больше, чем "Voodoo // SMF из Siberian Bears Virus Club"


 
Polevi ©   (2004-02-26 13:12) [24]

>Kerk ©   (26.02.04 12:29) [22]
у меня Win2k Server sp4 - "Отказано в доступе к устройству"


 
Kerk ©   (2004-02-26 13:25) [25]


> Polevi ©   (26.02.04 13:12) [24]

Права админские?


> Игорь Шевченко ©   (26.02.04 12:44) [23]

Я лично писал утилиту, которая работает с PhysicalMemory (read/write) в WinXP как часть курсового по системному ПО. Руссинович это тоже делал у него на сайте исходники были.

А получив доступ на запись в физ.память. Добавить новый селектор в GDT - (IMHO) дело техники...


 
Игорь Шевченко ©   (2004-02-26 13:32) [26]

Kerk ©   (26.02.04 13:25)

Повторяю вопрос - какой тогда смысл в написании драйверов, если есть такой простой и легкий путь получения доступа в режим ядра ?


 
Kerk ©   (2004-02-26 13:37) [27]


> Игорь Шевченко ©   (26.02.04 13:32) [26]

Ну... если тебя послушать, то в Win9x VXD вообще были не нужны.
Переход в Ring0 через \Device\PhysicalMemory недокументирован.
И, возможно, они эту дырку каким-нибудь сервис-паком прикроют...


 
Игорь Шевченко ©   (2004-02-26 13:40) [28]

Kerk ©   (26.02.04 13:37)


> то в Win9x VXD вообще были не нужны


Не надо путать кислое с плоским. VxD в Win9x необходимы, так как на них основана вся работа системы.


> Переход в Ring0 через \Device\PhysicalMemory недокументирован.


Похоже, что просто не работает...


 
Kerk ©   (2004-02-26 13:48) [29]


> Не надо путать кислое с плоским. VxD в Win9x необходимы,
> так как на них основана вся работа системы.

Я имел ввиду, что для перехода в Ring0 в Win9x не обязательно писать драйвер. Это все знают и это никого почему-то не удивляет.


> > Переход в Ring0 через \Device\PhysicalMemory недокументирован.
>
> Похоже, что просто не работает...


А почему ты считаешь, что это невозможно?
Физическую память на запись открыть можно. Добавить новый селектор в GDT тоже можно.

Если пример из статьи у тебя не работает, это еще не о чем не говорит.


 
Игорь Шевченко ©   (2004-02-26 13:54) [30]


> А почему ты считаешь, что это невозможно?
> Физическую память на запись открыть можно. Добавить новый
> селектор в GDT тоже можно.


Тебя, как написавшего курсовой, не затруднит написать РАБОТАЮЩИЙ пример ? Чтобы точки над i расставить окончательно.


 
Digitman ©   (2004-02-26 13:56) [31]

Цитирую А.В.Коберниченко "Недок.возможности Win NT" :

"..Кроме того, процесс (даже запущенный пользователем с правами администратора) не может открыть эту секцию с правом записи данных (т.е. с правом SECTION_MAP_WRITE). Все, что может процесс пользователя, это открыть секцию на чтение данных, спроецировать отдельные участки секции и попытаться определить по находящимся там данным диапазон физических адресов.."

Что, врет Коберниченко, так получается ?


 
Kerk ©   (2004-02-26 14:04) [32]


> Игорь Шевченко ©   (26.02.04 13:54) [30]

ОК. Сегодня займусь написанием примера.
О результатах доложу.


> Digitman ©   (26.02.04 13:56) [31]

Ну наверно не врет. Но почему ты не допускаешь, что он может ошибаться.
Сразу открыть на SECTION_MAP_WRITE на самом деле нельзя.
Нужно сначала поменять права доступа.
GetSecurityInfo/SetEntriesInAcl/SetSecurityInfo

P.S. Вообще сразу с двумя мастерами спорить сложно - сказывается психологическое давление голубых значков. :)


 
Polevi ©   (2004-02-26 14:10) [33]

>Kerk ©   (26.02.04 13:25) [25]
парава админиские, так уж я прывык на своей машине с такитми правами работать :)


 
Digitman ©   (2004-02-26 16:13) [34]


> Kerk ©   (26.02.04 14:04) [32]


а ты не спорь ... просто дискутируй на полном серьезе и на равных ... можно подумать - напрягает тебя кто-то ...

стартовал я этот пример у себя (W2k Pro WS SP3) - получил "blue dead screen" .. как и ожидал ... и знаю - почему)


 
N169   (2004-02-26 21:00) [35]

Игорь Шевченко ©   (26.02.04 11:17) [17]

http://www.telesys.ru/picprog/picpupgr.shtml
файл с дистрибутивом ppw_b6.exe


 
Kerk ©   (2004-02-27 08:56) [36]

Вот написал. Переходит в Ring0 и пищит спикером.

http://kerk-files.narod.ru/ring0.zip

Тестировал только в WinXPpro + SP1. Работает как часы.
Честное слово... :)))


 
Polevi ©   (2004-02-27 10:09) [37]

гм, пищит


 
h0use ©   (2004-02-27 11:15) [38]

Пищит, то оно пищит, но вот добавил я туда для теста вызов rdmsr и все упало синим экраном :(


 
VMcL ©   (2004-02-27 11:17) [39]

[36]

Аналогично (WinXP Prof + SP1).
В натуре пищит :)

З.Ы. Приду, дома проверю на Win2K, Win98SE... и FreeBSD 5.1 ))


 
Игорь Шевченко ©   (2004-02-27 11:35) [40]

Kerk ©   (27.02.04 08:56)

Хорошая работа. Насчет туфты беру сови слова обратно. Правда, не пищит, но и компьютер не перезагружает, уже плюс.

Лучше бы вместо пищания сделать чтение управляющих регистров процессора. И сравнить с результатами w2k_mem Свена Шрайбера.


 
Kerk ©   (2004-02-27 14:48) [41]

2h0use
В общем, технология перехода в Ring0 продемонстрирована. Осталось только без глюков реализовать.

> Игорь Шевченко ©   (27.02.04 11:35) [40]
> Хорошая работа.


Старался... :)


 
Игорь Шевченко ©   (2004-02-27 15:01) [42]

Kerk ©   (27.02.04 14:48)

На досуге можно почитать в MSDN, почему и когда рекомендуется и не рекомендуется использовать Device\PhysicalMemory.
Другой вопрос, стоит ли овчинка выделки - использовать такой способ для перехода в нужный режим. Драйвером как-то стабильнее и предсказуемее получается.


 
Kerk ©   (2004-02-27 15:18) [43]

Игорь Шевченко ©   (27.02.04 15:01) [42]
Тут ты все верно сказал. Но иногда бывает просто не удобно из-за какой-то мелочи драйвер писать.


 
Игорь Шевченко ©   (2004-02-27 15:25) [44]

Kerk ©   (27.02.04 15:18)


> Но иногда бывает просто не удобно из-за какой-то мелочи
> драйвер писать.


Например, из-за какой ? Судя по тому, что указанный способ не получил широкого распространения, он обладает недостатками, которые перевешивают его достоинства.


 
SDW-syscoder   (2004-02-27 16:58) [45]

// Вот написал. Переходит в Ring0 и пищит спикером.
// http://kerk-files.narod.ru/ring0.zip

Примерчик-то отличный, даже система не падает. Я пока не разбирался в коде и хочу заранее поинтересоваться: можно ли организовать и/или выполнить две процедуры или функции в Ring0.


 
BiN ©   (2004-02-27 17:28) [46]

Запищало на 3-й раз!!! - во время ПЕРЕЗАГРУЗКИ "№;:№%;№:%;!"?*(
:/


 
Kerk ©   (2004-02-28 10:18) [47]


> SDW-syscoder

насчет твоего rdmsr. я тут поэкспериментировал.

1)
mov ecx,0 // номер MSR-регистра для чтения
rdmsr

все ок.

2)
mov ecx,1
rdmsr

все ок

3)
mov ecx,2
rdmsr

"синий экран смерти"

делаем выводы...


> можно ли организовать и/или выполнить две процедуры или
> функции в Ring0

а какая разница сколько процедур выполнять?


> BiN ©   (27.02.04 17:28) [46]

Система какая?


 
Kerk ©   (2004-02-28 10:25) [48]

> Игорь Шевченко ©   (27.02.04 15:25) [44]
Например, чтобы просто прочитать регистр MSR писать целый драйвер не удобно.
Мне кажется тут бессмысленно спорить - это дело вкуса.


 
Anatoly Podgoretsky ©   (2004-02-28 12:47) [49]

Kerk ©   (28.02.04 10:18) [47]
Выводы простые, хакерские методы они и есть хакерские.


 
BiN ©   (2004-02-28 17:05) [50]

Kerk © Система какая?
W2k SP4

Пока будешь каждый регистр тестировать, эту дыру (а это и есть дыра) прикроют. Так что удачного пищания :)


 
Kerk ©   (2004-02-29 11:49) [51]


> BiN ©   (28.02.04 17:05) [50]

Этой дыре уже не один год...
А про регистры я писал, потому что h0use сказал, что у него rdmsr не работает... я ему показал, что она работает...


> Anatoly Podgoretsky ©   (28.02.04 12:47) [49]

хакерские - не значит плохие и неправильные.


 
VMcL ©   (2004-02-29 13:08) [52]

>>Kerk ©  (29.02.04 11:49) [51]
>хакерские - не значит плохие и неправильные.

hack ~ ломать => хакерские ~ ломающие => плохие, но вполне могут быть правильными :))


 
Игорь Шевченко ©   (2004-02-29 22:13) [53]

Kerk ©   (29.02.04 11:49)


> хакерские - не значит плохие и неправильные


Значит. Неправильность их заключается в том, что не гарантируется предсказуемый результат в различных версиях операционных систем, и даже в различных сервис-паках. Учиться надо у Sysinternals.


 
Kerk ©   (2004-03-01 14:49) [54]

2Игорь Шевченко
Чтобы не быть голословным, Игорь, приведи пример ситуации, когда данный метод не сработает.

Что должно случиться, чтобы я не смог открыть \device\physicalmemory и добавить селектор в GDT?


 
Игорь Шевченко ©   (2004-01-23 13:45) [55]

Kerk ©   (01.03.04 14:49)

А предыдущий пример как раз это и показывает...Тот, который у всех себя ведет по-разному.


> Что должно случиться, чтобы я не смог открыть \device\physicalmemory
>


Например, запретят изменять атрибуты защиты у device\physicalmem из режима пользователя.


 
Kerk ©   (2004-03-02 11:37) [56]


> А предыдущий пример как раз это и показывает...Тот, который
> у всех себя ведет по-разному.

Не надо ссылаться на предыдущий пример. Там была попытка перехвата функции NtCreateFile по статически заданному адресу. А в разных ОС (и возможно разных сервис-паках) эта функция по разным адресам сидит. Потому пример и работает через раз.

> Например, запретят изменять атрибуты защиты у device\physicalmem
> из режима пользователя.

Очень и очень маловероятно. Зачем это?
Почему на \.\\PhysicalDrive[X] можно писать что хочешь и вполне легально, а в \Device\PhysMem нельзя?
С точки зрения защиты не логично. Если мне не дадут в память писать, я в MBR запишусь (и не известно что опаснее).. :-)


 
Digitman ©   (2004-03-02 11:53) [57]


> Kerk ©   (02.03.04 11:37) [56]


Касперский, кстати, вполне солидарен с Игорем)... или наоборот)

Ибо смотрит на файлы с подобным кодом (в любой его ипостаси) как на файлы загаженные дерьмом под названием VirTool.Win32.FileName


 
Kerk ©   (2004-03-02 11:56) [58]

Это минус Касперского...
Нормальный вири ловить не может, а подобные ложные срабатывания мешают работе.


 
Игорь Шевченко ©   (2004-03-02 12:14) [59]

Kerk ©   (02.03.04 11:37)

Кстати, насколько я помню, этот пример выполняется только из-под администратора ?


> Если мне не дадут в память писать, я в MBR запишусь (и не
> известно что опаснее)..


Зачем ?


 
Kerk ©   (2004-03-02 14:41) [60]


> Кстати, насколько я помню, этот пример выполняется только
> из-под администратора ?

Абсолютно верно.
Но ведь я и не призываю все драйвера на такие проги заменять. В конце концов поведение дравера действительно куда более предсказуемо. Но согласись, что метод с \device\physmem вполне применим на практике...


> > Если мне не дадут в память писать, я в MBR запишусь (и не
> > известно что опаснее)..
> Зачем ?

Этим я хотел сказать, что прямая работа у физ.диском не менее опасна, и тем не менее документирована и разрешена.


 
Игорь Шевченко ©   (2004-03-02 15:35) [61]

>Но согласись, что метод с \device\physmem вполне применим на >практике...

Может, и применим, только я не вижу, для решения каких задач.


> > > Если мне не дадут в память писать, я в MBR запишусь
> (и не
> > > известно что опаснее)..
> > Зачем ?
>
> Этим я хотел сказать, что прямая работа у физ.диском не
> менее опасна, и тем не менее документирована и разрешена.


Как ни странно, нажатие клавиш Shift+Delete в проводнике тоже разрешено...И даже документировано. Хотя в ряде случаев может быть сопоставимо с записью в MBR


 
Ray Adams   (2004-03-13 16:18) [62]

Народ, я ответил в другом топике уже.
Ижем в google даем поиск по DLPortIO, giveio. Бесплатные дрова и исходниками и примерами на Дельфи , Си , Бейсике.



Страницы: 1 2 вся ветка

Форум: "Система";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.041 c
1-1082060641
Vior
2004-04-16 00:24
2004.05.02
Нехватает LongInteger в ТурбоПаскале


1-1082031629
P0tia
2004-04-15 16:20
2004.05.02
Нажатие клавишь


1-1081926648
an-na2002
2004-04-14 11:10
2004.05.02
AnsiReplaceText


1-1082224240
Andrey_Go
2004-04-17 21:50
2004.05.02
String


6-1079071432
Ozone
2004-03-12 09:03
2004.05.02
Файл в сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский