Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Нулевое кольцо защиты (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;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.027 c
3-1080912855
FireStorm
2004-04-02 17:34
2004.05.02
Как подключиться к БД MYSQL в Дельфи?


3-1081416944
Igorok
2004-04-08 13:35
2004.05.02
Иконки


3-1081357466
Mishenka
2004-04-07 21:04
2004.05.02
Запись переменной длины?


7-1078612457
fishca
2004-03-07 01:34
2004.05.02
Отлов на ATX корпусе нажатия кнопки Power


4-1079030059
BaDeVlad
2004-03-11 21:34
2004.05.02
Как сделать многоуровневую отмену в Richedit?