EIP для потока в WIN Vista/7

Тема в разделе "WASM.WIN32", создана пользователем PotapovPV, 13 апр 2011.

  1. PotapovPV

    PotapovPV New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    12
    Добрый день
    Столкнулся со следующей проблемой: при самостоятельном создании потока (с формированием контекста, выделением стека) не знаю какой адрес передавать в EIP. С XP вопрос решился просто: дизассемблирование kernel32.dll, в функции CreateRemoteThread заполняется контекст и можно легко увидеть адрес, который заносится в EIP. В семерке же контект формируется где-то в глубине нэйтивной функции NtCreateThreadEx, и где выцепить нужный адрес я не знаю.
    Подскажите, пожалуйста, направление поисков
     
  2. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    Создаешь новый тред с Suspend для текущего процесс (А еще бесконечным циклов )...

    CONTEXT cntx;
    cntx.ContextFlags = CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS;
    GetThreadContext(hStubThread, &cntx);

    Коректироешь eax, на нужное тебе ...

    П.С
    Только посмотреть надо что компилер в StubRoutine для потока нак компилел ...
     
  3. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    так дизассемблируй ее
    Код (Text):
    1. NtCreateThreadEx
     
  4. PotapovPV

    PotapovPV New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2011
    Сообщения:
    12
    К сожалению, данный вариант невозможен - задача стоит так, что мне нужно создавать именно свой поток, полностью, вручную, с созданием контекста.

    И то верно. В итоге обнаружил PspUserThreadStart, которая есть RtlUserThreadStart, получаемая из ntdll. Когда помещаю ее в EIP и запускаю в семерке, при ResumeThread приложение-жертва валится, дебаггер выдает следующее:

    Код (Text):
    1. (166c.cbc): Access violation - code c0000005 (first chance)
    2. First chance exceptions are reported before any exception handling.
    3. This exception may be expected and handled.
    4. eax=75fd28b2 ebx=01b70000 ecx=003f0d48 edx=50022080 esi=00000000 edi=00000000
    5. eip=75f906e9 esp=01c8fff4 ebp=00000000 iopl=0         nv up ei pl nz na po nc
    6. cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00010202
    7. kernel32!CreateSemaphoreExW+0xe18c:
    8. 75f906e9 61              popad
    9. 0:003> kv ffff
    10.   Memory  ChildEBP RetAddr  Args to Child              
    11. WARNING: Stack unwind information not available. Following frames may be wrong.
    12.           00000000 00000000 00000000 00000000 00000000 kernel32!CreateSemaphoreExW+0xe18c
    С соответствующей функцией в ХР код работает. Подскажите, в чем может быть проблема? Возможно, с контекстом нужно еще что-то делать?..
     
  5. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    Зачем вручную, если апи есть ??