Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot (+5 невидимых)

 eXeL@B —› Программирование —› Инжект через SetThreadContext.
Посл.ответ Сообщение

Ранг: 4.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 июня 2009 11:13 · Поправил: mjau
· Личное сообщение · #1

Мутодика обычная - suspend, set, resume.
На XP работало отлично, с переходом на Win7 (на висте не пробовал, но говорят тоже косяки есть) обнаружилось, во первых, что SetThreadContext иногда выставляет только eip (а нужно было и другой регистр), изза чего целевой поток падает. Кстати, нашел поиском такую же проблему на форуме, но там так решения и нет.
Исследования показали, что несмотря на SuspendThread, целевой поток попадает на точку выполнения уже после SetThreadContext, а не ResumeThread, как положено. По всей видимости, потоки, находящиеся в ожидании как-то криво реагируют на суспенд, и гдето там успевают выполняться.
Попробовал обойти грабли путем нахождения потока в running state но практика показала, что от момента нахождения потока до его суспенда проходит полгода, и поток может опять кудато провалиться.
Вопрос - где я криворук, или чего-то не понимаю?




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 11 июня 2009 11:41
· Личное сообщение · #2

Раздел программирование, а кода ни строчки нет

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 11 июня 2009 14:54 · Поправил: Clerk
· Личное сообщение · #3

Для поля CONTEXT_CONTROL ?
Нельзя менять селекторы сегментов стека и кода. Регистр флажков корректируется в KeContextFromKframes(), тамже и при планировании. С остальными тремя регистрами фрейма проблем не должно быть. Для текущего треда регистры регистры Eax, Ecx и Edx могут быть не установлены, так как сервисы NtSetContextThread и NtContinue содержат ошибки(не корректная модель возврата в KiServiceExit(), инструкция Sysexit в отличае от Iretd использует регистры Ecx и Edx для возврата в юзермод(смены CPL).


 eXeL@B —› Программирование —› Инжект через SetThreadContext.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати