eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: daFix (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Shutdown in Windows 8 PE
Посл.ответ Сообщение

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

Создано: 17 июля 2013 23:01 · Поправил: YURETZS New!
Цитата · Личное сообщение · #1

Чем можно отловить шатдаун в Win8 PE
Нашел в в исследуемое проге вызов апи из ntdll

text:004192D7 loc_4192D7: ; CODE XREF: CImmersiveRecoveryUi::Terminate(_WINRE_EXIT_ACTION)+6Ej
.text:004192D7 push edi
.text:004192D8 call ds:__imp__NtShutdownSystem@4 ; NtShutdownSystem(x)
.text:004192DE jmp short loc_419350



Но в 8-ке дело до этого не доходит, в метро фейсе шатдаун происходит где-то в другом месте.
Пробовал в PE-сборке патчить ntdll на шатдаун (sysenter процедуры NtShutdownSystem заменил на nop)
но винда отказывается грузить патченную длл, нужно где-то убрать проверку.


Ранг: 533.6 (!)
Статус: Uploader
retired

Создано: 17 июля 2013 23:05 New!
Цитата · Личное сообщение · #2

YURETZS пишет:
но винда отказывается грузить патченную длл, нужно где-то убрать проверку.

Цифровая подпись.

| Сообщение посчитали полезным: YURETZS


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

Создано: 17 июля 2013 23:16 New!
Цитата · Личное сообщение · #3

BoRoV
И вправду, цифровая подпись не действительна.
А чем сгенерить действительную ?
Там вроде RSA используется.
Тогда нужен приватный ключ, что практически нереально.


Ранг: 327.6 (мудрец)
Статус: Участник
born to be evil

Создано: 17 июля 2013 23:23 New!
Цитата · Личное сообщение · #4

YURETZS
1. гадить процедуру проверки;
2. мемпатчить

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

Создано: 17 июля 2013 23:27 New!
Цитата · Личное сообщение · #5

ajax
1. Эта процедура в самом ntdll.dll ?
2. Если в винхексе замемпатчить ядреный модуль, система не падет в краш ?


Ранг: 327.6 (мудрец)
Статус: Участник
born to be evil

Создано: 17 июля 2013 23:30 New!
Цитата · Личное сообщение · #6

YURETZS пишет:
замемпатчить ядреный модуль, система не падет в краш

winpe - хз. по идее, если есть права - все должно быть ровно


Ранг: 72.2 (постоянный)
Статус: Участник

Создано: 18 июля 2013 03:25 New!
Цитата · Личное сообщение · #7

Патчи всё, патчи

Вот так оно должно робить http://yadi.sk/d/2II0TUcc6x64x

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

Создано: 21 августа 2013 14:34 · Поправил: YURETZS New!
Цитата · Личное сообщение · #8

Ок, с этим разобрался, теперь возникла небольшая проблемка - при выходе из приложения исчезает курсор мыши.
Как его вернуть через апи.
ShowCursor из user32.dll почему-то в метро не работает.
Может в 8-ке используется что-то другое.
В аттаче http://rghost.ru/48267441 лог мониторинга апифункций во время пропадания курсора.

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

Создано: 21 августа 2013 16:39 New!
Цитата · Личное сообщение · #9

Нашел я эту функцию - она вызывается из user32.dll по ординалу.

.text:69E2B385 public Ordinal2519
.text:69E2B385 Ordinal2519 proc near ; DATA XREF: .text:off_69E01028o
.text:69E2B385 mov eax, 13D2h
.text:69E2B38A call sub_69E2B397
.text:69E2B38F retn 4
.text:69E2B38F Ordinal2519 endp



Вопрос - можно ли ее вызывать напрямую, без LoadLibraryW(x) и GetProcAddress(x,x) ?


Ранг: 1983.4 (!!!!)
Статус: Модератор
retired

Создано: 21 августа 2013 17:25 New!
Цитата · Личное сообщение · #10

Напрямую откуда? И как ты собрался её адрес получить без GetProcAddress?


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 21 августа 2013 17:28 New!
Цитата · Личное сообщение · #11

call sub_69E2B397 - куда ведет? если целиком рипнуть, то теоретически да


Ранг: 1983.4 (!!!!)
Статус: Модератор
retired

Создано: 21 августа 2013 17:49 New!
Цитата · Личное сообщение · #12

На вызов в ядро он ведёт, полагаю. Но рипать вместе с индексом сисколла как минимум костыль.

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

Создано: 21 августа 2013 17:55 New!
Цитата · Личное сообщение · #13

Hellspawn

.text:69E2B397 sub_69E2B397 proc near ; CODE XREF: Ordinal2519+5p
.text:69E2B397 mov edx, esp
.text:69E2B399 sysenter
.text:69E2B39B retn
.text:69E2B39B sub_69E2B397 endp
.text:69E2B39B



Да уже разобрался, в 9 байт вызов по ординалу ну никак не встроить.
Код вызова такой:


.text:1000F4CF ?_EnableMouseInputForCursorSuppression@CImmersiveCursor@Shell@Windows@@AAE_NH@Z proc near
.text:1000F4CF ; CODE XREF: BUXFrame::_SwapPage(BUX_NAVIGATE_OPTIONS,BUXPage *)+104p
.text:1000F4CF ; BUXFrame::_SwapPage(BUX_NAVIGATE_OPTIONS,BUXPage *)+1F0p
.text:1000F4CF
.text:1000F4CF arg_0 = dword ptr 8
.text:1000F4CF
.text:1000F4CF mov edi, edi
.text:1000F4D1 push ebp
.text:1000F4D2 mov ebp, esp
.text:1000F4D4 push ebx
.text:1000F4D5 xor ebx, ebx
.text:1000F4D7 cmp [edi], ebx
.text:1000F4D9 jz short loc_1000F4E0
.text:1000F4DB cmp [edi+4], ebx
.text:1000F4DE jnz short loc_1000F516
.text:1000F4E0
.text:1000F4E0 loc_1000F4E0: ; CODE XREF: Windows::Shell::CImmersiveCursor::_EnableMouseInputForCursorSuppression(int)+Aj
.text:1000F4E0 cmp [edi+8], ebx
.text:1000F4E3 jnz short loc_1000F516
.text:1000F4E5 push offset LibFileName ; "user32.dll"
.text:1000F4EA call ds:__imp__LoadLibraryW@4 ; LoadLibraryW(x)
.text:1000F4F0 mov [edi+8], eax
.text:1000F4F3 test eax, eax
.text:1000F4F5 jz short loc_1000F516
.text:1000F4F7 push 9D7h ; lpProcName
.text:1000F4FC push eax ; hModule
.text:1000F4FD call ds:__imp__GetProcAddress@8 ; GetProcAddress(x,x)
.text:1000F503 push 9D8h ; lpProcName
.text:1000F508 push dword ptr [edi+8] ; hModule
.text:1000F50B mov [edi], eax
.text:1000F50D call ds:__imp__GetProcAddress@8 ; GetProcAddress(x,x)
.text:1000F513 mov [edi+4], eax
.text:1000F516
.text:1000F516 loc_1000F516: ; CODE XREF: Windows::Shell::CImmersiveCursor::_EnableMouseInputForCursorSuppression(int)+Fj
.text:1000F516 ; Windows::Shell::CImmersiveCursor::_EnableMouseInputForCursorSuppression(int)+14j ...
.text:1000F516 mov eax, [edi]
.text:1000F518 test eax, eax
.text:1000F51A jz short loc_1000F526
.text:1000F51C push [ebp+arg_0]
.text:1000F51F call eax
.text:1000F521 test eax, eax
.text:1000F523 setnz bl
.text:1000F526
.text:1000F526 loc_1000F526: ; CODE XREF: Windows::Shell::CImmersiveCursor::_EnableMouseInputForCursorSuppression(int)+4Bj
.text:1000F526 mov al, bl
.text:1000F528 pop ebx
.text:1000F529 pop ebp
.text:1000F52A retn 4
.text:1000F52A ?_EnableMouseInputForCursorSuppression@CImmersiveCursor@Shell@Windows@@AAE_NH@Z endp


пришлось патчить еще одну либу.
Просто хотелось сократить чило патченных либ, но видно никак не получится.
 eXeL@B —› Вопросы новичков —› Shutdown in Windows 8 PE

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS