«Угон» потоков.

?????? ???, ??? ????????? ????????? ???? ??? ? ????????? ????????????? ??????. ???? ? ????? ??????, ?? ? ?? ????? ????? ????? ????????? ????? ???. ????????, ??????? ?????? ????? ?????? ??????????? ??????????, ???? ???? ????? ?????? ??????????? ????. ???? ?? ??????? ????????? – ????????????? ??????? GetThreadContext ? SetThreadContext. ??? ??????? ????????? ?????????????? ?????????? ?????? – ?.?. ?????????? ????????? ??????????, ? ??? ????? ? ?????????? ?? ??????? ??????????? ??????????. ? ?????????? ?????? ??????????? ???????????????? ?????, ????????? ??????? ????????, ???????????? EIP, ????? ??? ????????? ?? ?????? ???, ? ????? ????????? ?????. ??? ???????? ???????????? ?????? ????????????????? ????? ??????????? ???????? ? ???. ????? ???????, ??????????? ? … ????????????. :-)

????? ??????????? ? ??? ??? ????, ?????????? ??? ???????? ??????? GetThreadContext ? SetThreadContext. ????? ????????? ????????????? ? ????? ????, ???????????? ??????? ????????? ????????? ????????? ????????????????? ?????? ? ??????? ?????. ??? ???????? ????????????, ??????????? ???????? ????? ??????????? ? ???????? ??????????. GetThreadContext ? SetThreadContext ????????????? ??????????? ????? ? ????? ???? (???????? ?????? kernel APC, ?????????? – ??????????) ? ?????? ??? ???????????? ???????????????? ???????? ????? ? ?????. ?????? ????????? ?????? ??????? – ????? ????? ???? ??????? ? ????? ??????, ?? ??????????? ???????????????? ???????? ???????? ????, ?????????? ?? kernel APC.

???????? ??????: ??? ???????? ? ????? ???? ?? ?????? ??????????? ??? ????????. ? ????? ?????? NT ?????????? ??? ??????? ???????????? ? ????? ????: ????????? ?????, ?????????? (trap) ? ??????????. ??? ?????? ????????? ??????? ? ???????????? ? ??????????? ? ??????? ?? ??????????? volatile ????????. ?? ? ??? ??? ?? ???????????, ?? ? ????????????????? ??? ?? ?????. ?????????????? ??????? ?????????? ? ??????? SetThreadContext, ?????? EAX, ????? ? ?? ?????????? ???????.

???????? ??????: GetThreadContext ? SetThreadContext – ?? ????????????, ???????????? ????????? ????????? ????????????????? ??????. ?????????? ??????? NtContinue ? ????????? ??????????. ????????? ???????? ?????????:

 xor   eax, eax        ; eax = 0
mov     [eax], eax      ; [0] = 0 – Access Violation!

? ????? ?????? ??????????, ????????? ?????????? ?????? ?????????? ??????? ? ???, ??? ????????? ????????? ?????????? (CONTEXT) ? ?????????? ?? ?????????? (EXCEPTION_RECORD) ??????????? ? ?????, ? ?????????? ?????????? ?? ??? ?????????? ?????????? ? NTDLL. ?????? «????» ??????????. ???????, ??? ??? ?????? ??????????? ????? OS, ?? ???????? ??????? ? ???, ??? ??? «????» ?????????? - ???????????. ????? ????? ???? ??????? ? ???????? ????????? ?????????? ? ????. ? ????? ?????? ????????????????? ???? – ????? ? ???????? ??????????. ?????? ?? SetThreadContext ? ???? ?????? ?? ???????????. ????? ???? ???????????? ?? ????????, ?????????? ? SetThreadContext, ???? ????????? ?????????? ?????????? ????? ?? ??? ?????????? ?????????? ? NTDLL. ??? ??????? ?? ????, ??? ????????? ???????????????? ???????? ?????????.

???????? ??????: Wow64. ???? ?????? ???????, ?? ????? ????? ? 64-? ?????? ??? ????? ? ring 3. ?? ???????? ? ??????? ????? ? ????, ???? ??? ????????? 32-? ?????? ????????? ??????????. ? ??????? ????? ????? ? ????, ??? ? Wow64 ????????? ?? ??????? ?? ?????????? ? ??????? kernel APC. ? ?????????? ? ????????? ?????? ????????? GetThreadContext ????? ?????? ?????????? ???????????? 32-? ?????? ???????? (???? Wow64 ????? ?????????, ????? ?????? ????? ????????).

??? ????? ??? ????????? ???????…

PS. ? ?????? ??????? ????????? ?????????? ???????????? «Windows – must die». :-)

Cross-posted from blog.not-a-kernel-guy.com.