eXeL@B —› Программирование —› SYSENTER |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 07 июля 2006 11:35 · Личное сообщение · #1 |
|
Создано: 07 июля 2006 11:52 · Личное сообщение · #2 |
|
Создано: 07 июля 2006 13:48 · Личное сообщение · #3 |
|
Создано: 07 июля 2006 17:28 · Личное сообщение · #4 |
|
Создано: 07 июля 2006 19:14 · Личное сообщение · #5 В более старых версиях вместо SYSENTER использовалось int 2Eh. В общем есть регистр такой у процессора MSR SYSENTER, и есть команда SYSENTER. При выполнении команды управление передается коду, адрес которого расположен в этом регистре. Этот же адрес записан в Interrupt Descriptor Table в прерывании int 2Eh. Т.е. по сути одно и тоже - что выполнить команду SYSENTER, что INT 2Eh. После этого действительно будет выполняться код в ринг-0, но это код системный, и ты не можешь его изменять. ----- Research is my purpose |
|
Создано: 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 |
|
Создано: 07 июля 2006 20:58 · Личное сообщение · #7 |
|
Создано: 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: ;-------------------------------------; |
|
Создано: 08 июля 2006 04:46 · Личное сообщение · #9 |
|
Создано: 08 июля 2006 07:53 · Поправил: BaGiE · Личное сообщение · #10 |
|
Создано: 08 июля 2006 07:56 · Личное сообщение · #11 |
|
Создано: 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, желательно от разных сервпаков. Очень интересно посмотреть как там сделано? |
|
Создано: 09 июля 2006 13:12 · Личное сообщение · #13 |
|
Создано: 09 июля 2006 18:28 · Личное сообщение · #14 |
|
Создано: 10 июля 2006 10:18 · Личное сообщение · #15 |
|
Создано: 10 июля 2006 10:21 · Личное сообщение · #16 |
|
Создано: 10 июля 2006 10:26 · Личное сообщение · #17 |
|
Создано: 02 августа 2006 21:11 · Личное сообщение · #18 |
|
Создано: 02 августа 2006 21:17 · Личное сообщение · #19 |
|
Создано: 03 августа 2006 04:47 · Поправил: HOMEZ · Личное сообщение · #20 |
|
Создано: 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 номера системных сервисов меняли ну положем не каждый день перекомпилиццо, а других оснаваний для смены номеров вобще-то нет. |
|
Создано: 03 августа 2006 05:02 · Личное сообщение · #22 HOMEZ пишет: а может подскажите как через этот sysenter в ХР SP2 сымитировать нажатие левой кнопки мышки А что SendMessage уже не катит? А при чем здесь sysenter? вообще-то данные от мыши через мышиный драйвер идут и в юзерленд выползают только через оконный менаджер, который распихивает соответствующие сообщения по очередям окон. |
|
Создано: 03 августа 2006 09:53 · Поправил: HoBleen · Личное сообщение · #23 |
|
Создано: 03 августа 2006 19:26 · Личное сообщение · #24 HOMEZ пишет: а может подскажите как через этот sysenter в ХР SP2 сымитировать нажатие левой кнопки мышки Попробуй: hWnd = FindWindow("WindowName"); SendMessage(hWnd, WM_CLICK, 0, 0); Если тебе нужно конкретное окно. Название класса окна (здесь WindowName) ищи через Process Explorer, либо через любой другой шпион. |
|
Создано: 03 августа 2006 19:27 · Поправил: HOMEZ · Личное сообщение · #25 f0ma пишет: А что SendMessage уже не катит? блокируют его, так же как и PostMessage HoBleen пишет: Так ты хочешь использовать sysenter или обойти перехват сообщений? хочу используя sysenter обойти перехваченные функции. я хочу обойти gameguard(nprotect) он много что блокирует, была тема блокировку SetCursorPos я обошел m_SetCursorPos_XPSP2 proc
а вот с кликом левой кнопкой ничего не получается , пробовал через mouse_event но походу чтото не срастается m_mouse_event_XPSP2 proc
а вот через sysenter отправить сообщение о клике так и не вышло HoBleen пишет: Попробуй: hWnd = FindWindow("WindowName"); SendMessage(hWnd, WM_CLICK, 0, 0); как этоже сделать через sysenter ? |
|
Создано: 04 августа 2006 03:21 · Личное сообщение · #26 |
|
Создано: 29 августа 2006 08:30 · Поправил: HOMEZ · Личное сообщение · #27 каким образом можно перехватывать вызовы, типа этого? mov eax, 11F6h
или хотябы подскажите куда смотреть, чтобы узнать куда переходит выполнение после команды sysenter то что в ring0 это и так понятно просто хочу попробовать посмотреть что там может nprotect перехватывать и как, он это делает. |
|
Создано: 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 августа 2006 11:29 · Личное сообщение · #29 Error_Log пишет: Вариант 1 я конешно понимаю что SoftIce очень хороший инструмент, но у меня его нет. Какиенибудь другие варианты туда добраться и посмотреть есть? Error_Log пишет: Вариант 2 Запустил, оно выдало: C:\svv-2.3-bin>svv.exe check
что это значит? |
|
Создано: 29 августа 2006 13:32 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Программирование —› SYSENTER |
Эта тема закрыта. Ответы больше не принимаются. |