CreateRemoteThread

Тема в разделе "WASM.WIN32", создана пользователем lobzik, 20 май 2010.

  1. lobzik

    lobzik New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2009
    Сообщения:
    34
    Clerk
    CreateRomouteThread возвращает ошибку ERROR_ACCESS_DENIED, при любых правах + sedebug привилегии.
    нету у меня никакого сервиса)
     
  2. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Дебажить кодес windbg x64. Ставьте

    Код (Text):
    1. bp Wow64NtCreateThread
    После бряка на этой функции трейсить ее по f10. лог выложите здесь, тогда все будет ясно.
     
  3. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    leo
    >Соотв-но базовые адреса сис. dll м.б. различны в разных сессиях, но в пределах одной сессии для всех процессов они по прежнему одинаковы
    Ага, вот откуда ноги растут у этого утверждения. Следует учитывать, что там Mark имел в виду загрузочные сессии – т.е. сеансы работы оси между перезагрузками.

    >Поэтому нельзя жестко прошивать адреса ф-й в проге, а определять их в своем процессе и юзать в другом - можно, пока...
    Можно, пока не получится так, что какая-нибудь сторонняя длл загрузится до определённой системной и займёт её место, форсируя последующую релокацию последней ;) Ну или там память кто-нибудь выделит не в том месте с тем же исходом.
    Хотя для ntdll и kernel32 пока действительно можно. Но kernel32 уже сейчас без проблем могут из этого исключить, как нам кажется.

    KeSqueer
    >+Установка привилегии SeDebugPrivilege
    Зачем её включать?

    freeq
    >а вы уверены что процесс в который вы делайте инжект запущен в той же сессии что и вы?
    А какая разница?

    lobzik
    Советуем сделать минимальный код, который должен создавать удалённый поток в блокноте. Без инжектов библиотек, без всего. Если это ничего не даст, можешь выложить этот минимальный код сюда – только чтобы он сразу без вопросов скомпилировался – мы посмотрим на w7 x64.
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Sol_Ksacap
    На случай если блокнот запущен от имени администратора :)
     
  5. lobzik

    lobzik New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2009
    Сообщения:
    34
  6. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Еще должны быть флаги PROCESS_QUERY_INFORMATION и PROCESS_VM_READ при открытии процесса. Валится, как и подозревалось в wow64. хотя флаги не помогут все равно (ошибка будет, но позже), тред не будет создан в 64 битном процессе, опять же из-за особенностей wow64. Тест был на winxp64, чуть позже посмотрю на win7
    Sol_Ksacap, проверьте личные сообщения.
     
  7. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Но для 32-битного wow64 процесса при условии установки 2-х дополнительных флагов работать будет
     
  8. lobzik

    lobzik New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2009
    Сообщения:
    34
    да, для 32 битных +2 фалага дают зеленый свет, но я когда пробовал почему-то не получалось ... )
     
  9. freeq

    freeq New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    47
     
  10. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    lobzik
    Код (Text):
    1. DWORD __stdcall InjectCode(LPVOID lParam)
    2. {
    3.     MessageBox(0, 0, 0, 0);
    4.     return;
    5. }
     
  11. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    freeq
    Ох, а и правда ведь. Но это фасилицируется на высоком уровне. На самом деле межесессионно поток создаётся (NtCreateThread() возвращает STATUS_SUCCESS), но при неудаче последующего запроса CsrClientCallServer() он будет уничтожен. Если, допустим, под дебаггером изменить статусы возврата после вызова CsrClientCallServer() на успех, то можно будет наблюдать, как CreateRemoteThread() вернёт корректный хендл.