Посл.ответ
Сообщение
Ранг: 44.3 (посетитель)Активность: 0.02↘ 0 Статус: Участник
Создано: 17 июля 2013 23:01 · Поправил: YURETZS · Личное сообщение · #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 (! ), 232thxАктивность: 0.45↘ 0 Статус: Uploader retired
Создано: 17 июля 2013 23:05 · Личное сообщение · #2
YURETZS пишет: но винда отказывается грузить патченную длл, нужно где-то убрать проверку. Цифровая подпись.
----- Лучше быть одиноким, но свободным © $me | Сообщение посчитали полезным: YURETZS
Ранг: 44.3 (посетитель)Активность: 0.02↘ 0 Статус: Участник
Создано: 17 июля 2013 23:16 · Личное сообщение · #3
BoRoV И вправду, цифровая подпись не действительна.
А чем сгенерить действительную ?
Там вроде RSA используется.
Тогда нужен приватный ключ, что практически нереально.
| Сообщение посчитали полезным:
Ранг: 337.6 (мудрец), 224thxАктивность: 0.21↘ 0.1 Статус: Участник born to be evil
Создано: 17 июля 2013 23:23 · Личное сообщение · #4
YURETZS 1. гадить процедуру проверки;
2. мемпатчить
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным:
Ранг: 44.3 (посетитель)Активность: 0.02↘ 0 Статус: Участник
Создано: 17 июля 2013 23:27 · Личное сообщение · #5
ajax 1. Эта процедура в самом ntdll.dll ?
2. Если в винхексе замемпатчить ядреный модуль, система не падет в краш ?
| Сообщение посчитали полезным:
Ранг: 337.6 (мудрец), 224thxАктивность: 0.21↘ 0.1 Статус: Участник born to be evil
Создано: 17 июля 2013 23:30 · Личное сообщение · #6
YURETZS пишет: замемпатчить ядреный модуль, система не падет в краш winpe - хз. по идее, если есть права - все должно быть ровно
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным:
Ранг: 72.3 (постоянный), 133thxАктивность: 0.38↘ 0 Статус: Участник
Создано: 18 июля 2013 03:25 · Личное сообщение · #7
Ранг: 44.3 (посетитель)Активность: 0.02↘ 0 Статус: Участник
Создано: 21 августа 2013 14:34 · Поправил: YURETZS · Личное сообщение · #8
Ок, с этим разобрался, теперь возникла небольшая проблемка - при выходе из приложения исчезает курсор мыши.
Как его вернуть через апи.
ShowCursor из user32.dll почему-то в метро не работает.
Может в 8-ке используется что-то другое.
В аттаче
http://rghost.ru/48267441 лог мониторинга апифункций во время пропадания курсора.
| Сообщение посчитали полезным:
Ранг: 44.3 (посетитель)Активность: 0.02↘ 0 Статус: Участник
Создано: 21 августа 2013 16:39 · Личное сообщение · #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) ?
| Сообщение посчитали полезным:
Ранг: 2014.5 (!!!!) , 1278thxАктивность: 1.34↘ 0.25 Статус: Модератор retired
Создано: 21 августа 2013 17:25 · Личное сообщение · #10
Напрямую откуда? И как ты собрался её адрес получить без GetProcAddress?
| Сообщение посчитали полезным:
Ранг: 990.2 (! ! ! ) , 380thxАктивность: 0.68↘ 0 Статус: Модератор Author of DiE
Создано: 21 августа 2013 17:28 · Личное сообщение · #11
call sub_69E2B397 - куда ведет? если целиком рипнуть, то теоретически да
----- [nice coder and reverser] | Сообщение посчитали полезным:
Ранг: 2014.5 (!!!!) , 1278thxАктивность: 1.34↘ 0.25 Статус: Модератор retired
Создано: 21 августа 2013 17:49 · Личное сообщение · #12
На вызов в ядро он ведёт, полагаю. Но рипать вместе с индексом сисколла как минимум костыль.
| Сообщение посчитали полезным:
Ранг: 44.3 (посетитель)Активность: 0.02↘ 0 Статус: Участник
Создано: 21 августа 2013 17:55 · Личное сообщение · #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
пришлось патчить еще одну либу.
Просто хотелось сократить чило патченных либ, но видно никак не получится.
| Сообщение посчитали полезным: