Сейчас на форуме: hgdagon, asfa (+4 невидимых)

 eXeL@B —› Программирование —› SYSENTER
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 25.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 07 июля 2006 11:35
· Личное сообщение · #1

Вот из справочника (инструкции mmx):

SYSENTER
-------------
0F 34 SYSENTER Fast call to privilege level 0 system procedures

SYSEXIT
-------------
0F 35 SYSEXIT Fast return to privilege level 3 user code.

Че правда можно выйти в ring0 с помощью одной этой команды ???




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 июля 2006 11:52
· Личное сообщение · #2

Нужно вроде для вызова ф-й ядра, короче свой код просто этим вызовом в ринг 0 ты не пропихнёшь.



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 07 июля 2006 13:48
· Личное сообщение · #3

RaiN, ещё на разных сервиспаках эффект может быть различный.
Кратко: SYSENTER предназначена для передачи управления ОС, модифицирует регистры ESP, CS и SS при помощи MSR и т.п. и т.д. и заниматься этим любой проге ОС не даст.

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 186.8 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 07 июля 2006 17:28
· Личное сообщение · #4

RaiN, sysenter осуществляет переключение в ring0 и вход в обработчик этого сисэнтера. А адрес обработчика ты из юзера сменить не сможешь, так что вот. Нуна дров песать.



Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 07 июля 2006 19:14
· Личное сообщение · #5

В более старых версиях вместо SYSENTER использовалось int 2Eh. В общем есть регистр такой у процессора MSR SYSENTER, и есть команда SYSENTER. При выполнении команды управление передается коду, адрес которого расположен в этом регистре. Этот же адрес записан в Interrupt Descriptor Table в прерывании int 2Eh. Т.е. по сути одно и тоже - что выполнить команду SYSENTER, что INT 2Eh. После этого действительно будет выполняться код в ринг-0, но это код системный, и ты не можешь его изменять.

-----
Research is my purpose





Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 07 июля 2006 20:11
· Личное сообщение · #6

Зато можно юзать разные функции без использования API-интерфейсов и соответственно обходить все перехватчики уровня пользователя. Например в WXP завершить свой процесс можно так.

push 0 // exit code
push $FFFFFFFF // process handle
push 0 // return 2
push 0 // return 1
mov eax,$101 // service id, для WinXP (2600) NtTerminateProcess = 0101h
// для Win2K (2195) NtTerminateProcess = 00E0h
mov edx,esp // pointer to params
dw $340F // sysenter для Win2K нужно вместо sysenter - int 2Eh



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 07 июля 2006 20:58
· Личное сообщение · #7

BaGiE, неплохо. Я так понял что это же в XP можно рипать код api и использовать sysenter? Метод, коенчно - Г во всех смыслах, да и не для многих функций.

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 07 июля 2006 21:21 · Поправил: BaGiE
· Личное сообщение · #8

если правильно продумать, то так можно юзать многие API и совсем на разных виндах. например вот этот код прячет программу от отладчиков режима пользователя с помощью ZwSetInformationThread. Я думаю не надо пояснять что делает ZwSetInformationThread с параметром HideFromDebugger(17). работает на всех 2000 и XP и конечно на 9x не работает (там надо писать что-то свое), но однако и никакой ошибки не вызывает. И перехват ZwSetInformationThread на уровне Ring3 в данном случае не поможет.

;---------- Ring3 antidebug ----------;
mov eax,[fs:$30]
mov ecx,[eax+$0C]
jecxz @_dbg_w9x
add eax,$AC
cmp word [eax],2195 ; Windows 2000
jne @_dbg_xp
xor eax,eax
push eax
push eax
push 17
push -2
call @f
@@: add dword [esp],@f-@b
mov al,$C7
lea edx,[esp+4]
int $2E ; вызов ZwSetInformationThread
@@: add esp,$14
jmp @_dbg_quit
@_dbg_xp:
cmp word [eax],2600 ; Windows XP
jne @_dbg_quit
xor eax,eax
push eax
push eax
push 17
push -2
push eax
call @f
@@: add dword [esp],@f-@b
mov al,$E5
mov edx,esp
sysenter ; вызов ZwSetInformationThread
@@: add esp,$14
jmp @_dbg_quit
@_dbg_w9x:
; w9x antidebug
; здесь надо писать антиотладку которая будет работать под 9x или выводить сообщение что программа не будет работать под 9x
@_dbg_quit:
;-------------------------------------;



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 08 июля 2006 04:46
· Личное сообщение · #9

Для единообразия и компактности кода, в XP можно так же int 2e использовать, хотя разные номера сервисов конечно нужно учитывать.

BaGiE пишет:
sysenter ; syscall ZwSetInformationThread


syscall - это совершенно другая команда (AMD опкод 0f 05)




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 08 июля 2006 07:53 · Поправил: BaGiE
· Личное сообщение · #10

S_T_A_S_ пишет:
syscall - это совершенно другая команда (AMD опкод 0f 05)

я вообщето знал это, а написал syscall, чтобы было понятно что здесь происходит вызов системного сервиса, но видать немного некорректно выразился




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 08 июля 2006 07:56
· Личное сообщение · #11

S_T_A_S_ пишет:
можно так же int 2e использовать

я пробовал, но у меня выскакивает какое-то исключение




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 08 июля 2006 16:45
· Личное сообщение · #12

кажись теперь допер как пользоваться int2E в xp - а точнее это точно также как и в 2k.
для sysenter надо класть в стек параметры функции и два адреса возврата, а также в eax-номер сервиса, а edx-указатель на параметры вместе с этими двумя dword'ами (с 2мя адресами возврата)
;----------------- тока для XP и наверно для 2003
push PARAMn ;,где n-кол-во параметров
....
push PARAM1
push @RETURN2 ; хер знает для чего, можно "push 0"
push @RETURN1 ; адрес возврата
mov eax,0 ; номер сервиса
mov edx,esp
sysenter
@RETURN1:
add esp,4*(n+1)
;----------------- для 2K,XP и наверно для 2003.
а для int2E надо немного по другому:
push PARAMn
....
push PARAM1
push @RETURN ; (надо тока 1 dword для возврата в ring3)
mov eax,0 ; номер сервиса
lea edx,[esp+4] ; а тут указатель на параметры, но без этого dword
int 2Eh
@RETURN:
add esp,4*(n+1)
;----------------
итого - с int2E действительно удобнее получается, тока номера сервисов подстваляй разные и пользуйся .

P.S. Есть ли у кого нибудь ntdll.dll от NT4, желательно от разных сервпаков. Очень интересно посмотреть как там сделано?



Ранг: 25.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 09 июля 2006 13:12
· Личное сообщение · #13

от winMe есть

3e27_09.07.2006_CRACKLAB.rU.tgz - NTDLL.rar




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 09 июля 2006 18:28
· Личное сообщение · #14

RaiN пишет:
от winMe есть

спасибо конечно, но я че то не понял. в 9x тоже ntdll существует??? впервые это слышу. (хотя я сам у себя никогда ME не ставил)



Ранг: 25.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 10 июля 2006 10:18
· Личное сообщение · #15

BaGiE пишет:
в 9x тоже ntdll существует??? впервые это слышу. (хотя я сам у себя никогда ME не ставил)

У меня миленниум (xp не прет - комп слабый) и ntdll.dll есть
Подумал, мож какая прога с собой притащила, а нет - в version info стоит Windows Millenium Operat..




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 10 июля 2006 10:21
· Личное сообщение · #16

RaiN Интересно а что за машина? Я на celeron 366 RAM 64 video 8 ставил хрюшу и летала...

-----
Yann Tiersen best and do not fuck




Ранг: 25.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 10 июля 2006 10:26
· Личное сообщение · #17

PE_Kill пишет:
Я на celeron 366 RAM 64 video 8 ставил хрюшу и летала

Да? у меня у друга разогнанный celeron 800 xp хотя работает, но трещит и все ресурсы пожирает
А так я хотел тоже поставить, но у нас в Ульяновске хер найдешь магазин с дисками, приходится на другую сторону ехать..




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 02 августа 2006 21:11
· Личное сообщение · #18

Ну только сама ф-я sysenter (как и int 2E) не совсем документирована в винде - официальных доков нету, параметры могут измениться хоть в следующих SP, так что эт не есть хорошо((




Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 02 августа 2006 21:17
· Личное сообщение · #19

HoBleen пишет:
параметры могут измениться хоть в следующих SP

могут, но маловероятно - я че-то не заметил чтобы во всех предыдущих SP хоть к 2000, хоть к XP номера системных сервисов меняли. А билды можно жестко прописать.



Ранг: 29.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 03 августа 2006 04:47 · Поправил: HOMEZ
· Личное сообщение · #20

а может подскажите как через этот sysenter в ХР SP2 сымитировать нажатие левой кнопки мышки
PS: уже неделю блуждаю в user32 но так и не понял



Ранг: 17.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 августа 2006 04:56
· Личное сообщение · #21

BaGiE пишет:
в 9x тоже ntdll существует?

И в win95 сущетсвует, ибо CreateProcess()/TerminateProcess() именно оттуда импортируются насколько я помню, это единственная либа которая грузится всегда, вне зависимости от импорта, а иначе как бы программа могла на всех виндах сразу работать через api, на то он и PE, что перенасимый исполняемый (другое дело что реализация их внутри NT сильно отличается от 95/98/ME).
HoBleen пишет:
Ну только сама ф-я sysenter (как и int 2E) не совсем документирована в винде

Я бы даже сказал совсем не документированная, оффициально M$ считает что только базовые dll от самой M$ имеют право стучаться в ядро.
BaGiE пишет:
чтобы во всех предыдущих SP хоть к 2000, хоть к XP номера системных сервисов меняли

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



Ранг: 17.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 03 августа 2006 05:02
· Личное сообщение · #22

HOMEZ пишет:
а может подскажите как через этот sysenter в ХР SP2 сымитировать нажатие левой кнопки мышки

А что SendMessage уже не катит?
А при чем здесь sysenter? вообще-то данные от мыши через мышиный драйвер идут и в юзерленд выползают только через оконный менаджер, который распихивает соответствующие сообщения по очередям окон.




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 03 августа 2006 09:53 · Поправил: HoBleen
· Личное сообщение · #23

HOMEZ пишет:
а может подскажите как через этот sysenter в ХР SP2 сымитировать нажатие левой кнопки мышки


Так ты хочешь использовать sysenter или обойти перехват сообщений?

Это ж перехват совсем другого уровня..




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 03 августа 2006 19:26
· Личное сообщение · #24

HOMEZ пишет:
а может подскажите как через этот sysenter в ХР SP2 сымитировать нажатие левой кнопки мышки


Попробуй:
hWnd = FindWindow("WindowName");
SendMessage(hWnd, WM_CLICK, 0, 0);

Если тебе нужно конкретное окно. Название класса окна (здесь WindowName) ищи через Process Explorer, либо через любой другой шпион.



Ранг: 29.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 03 августа 2006 19:27 · Поправил: HOMEZ
· Личное сообщение · #25

f0ma пишет:
А что SendMessage уже не катит?

блокируют его, так же как и PostMessage

HoBleen пишет:
Так ты хочешь использовать sysenter или обойти перехват сообщений?

хочу используя sysenter обойти перехваченные функции.

я хочу обойти gameguard(nprotect) он много что блокирует, была тема

блокировку SetCursorPos я обошел
m_SetCursorPos_XPSP2 proc
mov edi, edi
push ebp
mov ebp, esp
push 6Fh
push [ebp+0Ch]
push [ebp+08h]
call m_NtUserCallTwoParam_XPSP2
pop ebp
retn 8
m_SetCursorPos_XPSP2 endp

m_NtUserCallTwoParam_XPSP2 proc
mov eax, 1144h
mov edx, 7FFE0300h
call dword ptr [edx]
retn 0Ch
m_NtUserCallTwoParam_XPSP2 endp


а вот с кликом левой кнопкой ничего не получается ,
пробовал через mouse_event но походу чтото не срастается
m_mouse_event_XPSP2 proc
mov edi, edi
push ebp
mov ebp, esp
sub esp, 1Ch
mov eax, [ebp+08h]
and dword ptr [ebp-1Ch], 0
and dword ptr [ebp-08h], 0
mov [ebp-0Ch], eax
mov eax, [ebp+0Ch]
mov [ebp-18h], eax
mov eax, [ebp+10h]
mov [ebp-14h], eax
mov eax, [ebp+14h]
mov [ebp-10h], eax
mov eax, [ebp+18h]
mov [ebp-04h], eax
push 1Ch
lea eax, [ebp-1Ch]
push eax
push 1
call m_NtUserSendInput_XPSP2
leave
retn 14h
m_mouse_event_XPSP2 endp

m_NtUserSendInput_XPSP2 proc
mov eax, 11F6h
mov edx, 7FFE0300h
call dword ptr [edx]
retn 0Ch
m_NtUserSendInput_XPSP2 endp


а вот через sysenter отправить сообщение о клике так и не вышло

HoBleen пишет:
Попробуй:
hWnd = FindWindow("WindowName");
SendMessage(hWnd, WM_CLICK, 0, 0);


как этоже сделать через sysenter ?



Ранг: 17.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 04 августа 2006 03:21
· Личное сообщение · #26

Посмотри коды какой нить gnuтой тулзы для удаленного управления например TightVNC - www.tightvnc.com/download.html



Ранг: 29.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 29 августа 2006 08:30 · Поправил: HOMEZ
· Личное сообщение · #27

каким образом можно перехватывать вызовы, типа этого?
mov eax, 11F6h
mov edx, 7FFE0300h
call dword ptr [edx]
retn 0Ch


или хотябы подскажите куда смотреть, чтобы узнать куда переходит выполнение после команды sysenter
то что в ring0 это и так понятно

просто хочу попробовать посмотреть что там может nprotect перехватывать и как, он это делает.



Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 29 августа 2006 09:16 · Поправил: Error_Log
· Личное сообщение · #28

HOMEZ пишет:
каким образом можно перехватывать вызовы, типа этого

например сплайсингом, вписав джамп по адресу 7FFE0300h
HOMEZ пишет:
хочу попробовать посмотреть что там может nprotect перехватывать и как, он это делает

Вариант 1 - потрейсить в SoftIce, если перехвачен системный сервис через SDT, то трейсить за SYSENTER до примерно такого кода:
MOV EBX, [EAX*4+EDI] ; в eax номер системного сервиса
CALL EBX
и смотреть куда указывает EBX.
Вариант 2 - скачать утилиту Джоанны Рутковской, она покажет где что похуканно (для nprotect ее должно хватить) скачать можно -->тут<-- http://www.invisiblethings.org/tools/svv/svv-2.3-bin.zip .
ЗЫ: это в общих чертах, nprotect я в глаза не видел

-----
Research is my purpose




Ранг: 29.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 29 августа 2006 11:29
· Личное сообщение · #29

Error_Log пишет:
Вариант 1

я конешно понимаю что SoftIce очень хороший инструмент, но у меня его нет.
Какиенибудь другие варианты туда добраться и посмотреть есть?

Error_Log пишет:
Вариант 2

Запустил, оно выдало:
C:\svv-2.3-bin>svv.exe check
ntoskrnl.exe (804d7000 - 806fd000)... suspected! (verdict = 5).
ntdll.dll (7c900000 - 7c9b1000)... innocent hooking (verdict = 2).
kernel32.dll (7c800000 - 7c8f6000)... innocent hooking (verdict = 2).
ADVAPI32.dll (77dc0000 - 77e6c000)... innocent hooking (verdict = 2).
USER32.dll (77d30000 - 77dc0000)... innocent hooking (verdict = 2).

SYSTEM INFECTION LEVEL: 5
0 - BLUE
1 - GREEN
2 - YELLOW
3 - ORANGE
4 - RED
--> 5 - DEEPRED
SUSPECTED modifications detected. System is probably infected!

что это значит?



Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 29 августа 2006 13:32
· Личное сообщение · #30

HOMEZ пишет:
C:\svv-2.3-bin>svv.exe check

Сделай так:
svv.exe check /m
Утилита выведет более подробную инфу о модификациях в системе

-----
Research is my purpose



. 1 . 2 . >>
 eXeL@B —› Программирование —› SYSENTER
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати