Wednesday, April 10, 2013

Mystical 0x33 cs selector in WOW

Если посмотреть во внутренности WOW64 эмулятора под Windows 8 64 (интересно глянуть на других виндах, нету под рукой) можно увидеть что-то занятное:

ntdll!NtClose:
77750e4c b80d000000       mov     eax,0xd
77750e51 64ff15c0000000   call    dword ptr fs:[000000c0]
77750e58 c20400           ret     0x4
77750e5b 90   


Вместо родного sysenter'а находится нечто новое - call.

Интересно, что студийный отладчик отказывается заходить внутрь call, делая вид, что там ничего нет, windbg и diana_dasm показывают честный переход на:

776521dc ea662565773300   jmp     0033:77652566

Вот что Livekd говорит о новом мистическом селекторе 0x33:


0: kd> dg 33
                                                    P Si Gr Pr Lo
Sel        Base              Limit          Type    l ze an es ng Flags
---- ----------------- ----------------- ---------- - -- -- -- -- --------
0033 00000000`00000000 00000000`00000000 Code RE Ac 3 Nb By P  Lo 000002fb


Он вроде бы RE, но почитать эту память из usermode, изменив значение ds на 33 у меня не получается.

UPD: Можно прочитать адрес 77652566 по DS селектору, там живет некий обработчик прерывания (?), заканчивающийся iretd. Судя по всему, вызывается он через некий специальный механизм, ибо получает параметры в некоторых регистрах, которые не подготавливаются в ntdll!NtClose.

No comments: