Вызова DllMain

Тема в разделе "WASM.NT.KERNEL", создана пользователем accord, 10 фев 2020.

  1. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Всем привет немогу вызвать длл мейн без создания потоков сейчас делаю вот так но ловлю краши винду

    все NTSTATUS не имеют ошибок если не вызывать длл мейн то крашей нету
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    С каких пор DllMain возвращает NTSTATUS? Процесс валится или бсод? И надо бы наверное весь кодец посмотреть, а не его урывки, которые еще и без форматирования грузишь.
     
  3. hiddy

    hiddy Member

    Публикаций:
    0
    Регистрация:
    10 мар 2019
    Сообщения:
    82
    Попробуйте отключить SMEP/SMAP для начала, хотя не уверен что это поможет, ибо пользовательский код должен выполняться на другом уровне привилегий. Раз уж есть доступ в ядро, стоит рассмотреть вариант с перехватом контекста потока приложения, хотя проще создать новый поток.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Код (Text):
    1. // Define driver initialization routine type.
    2. //
    3. typedef
    4. NTSTATUS
    5. (*PDRIVER_INITIALIZE) (
    6.     IN struct _DRIVER_OBJECT *DriverObject,
    7.     IN PUNICODE_STRING RegistryPath
    8.     );
    Код (Text):
    1. typedef NTSTATUS(WINAPI* FnDllEntryPoint)(HINSTANCE, DWORD, LPVOID);
    Это получается прямая передача управления из ядра на юзер код. Если там что то отличное от возврата константы, это и должно упасть, даже не учитывая nx(smep etc). Это же передача управления вникуда. Во первых окружение разное, сегменты :sarcastic:
     
    d4rkd3n1337 нравится это.
  5. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Пытаюсь через перехват контекста но у меня почему то структура контекста по нулям я выделил память в игре через PsGetContextThread получил контекст без ошибок все но почему то там все пусто оч редко бывает один регистр заполнен тестировал на разных приложения x64 останавливал приложени перед получение контекста потоки брал не застопленые и др а которые работают
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    accord,

    Код бы глянуть, в данной теме ничего предсказать нельзя. Зачем вообще вызывать EP ?

    Загрузка из памяти через настройку образа ядром ?

    В чужом потоке такое делать нельзя, вероятно он отвалится после возврата контекста. Это нужно делать в новом потоке, причём если защиты нет(аверы античиты и тп).
     
  7. njeen

    njeen Active Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    139
    Адрес:
    Ташлинск
    Флаги в структуре ставили?
    CONTEXT ctx;
    ctx.ContextFlags = CONTEXT_ALL;
    ...
     
  8. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Да ставил
    Приду домой скину код вот и сама суть там анти чит а потоки не хочу создавать из за него но я тестил на своем приложении но там тоже по нулям контекст а само приложение видит контекст
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Васм постепенно превращается в анноунчитс или в подобные форумы. Чет много тем про читы в последнее время.
     
  10. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    да лучше так, чем в избу-флудильню.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    accord,

    Любой норм античит отслеживает потоки. Перехватываются события создания потоков, при этих событиях потоки маркируются/добавляются в доверенные списки, те доверенный поток может быть создан только доверенным. А далее при выполнении какой то апи/кода/события проверяется является ли текущий поток доверенным. Поэтому если вызвать dll-EP в не доверенном потоке, то управление пойдёт вне целевой длл, всякие апи и это приведёт скорее всего к проверке читом текущего потока. Конечно лучше get/set-ctx использовать. Хотя тоже сомнительно, античиты проверяют загрузку длл аналогично как и потоки. Нужно либо локально решать для конкретного чита, либо тз пересматривать, те не грузить какие то длл не понятно зачем.
     
  12. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Читы читами но мой вопрос по теме раздела )
    вот код
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Rel,

    > Чет много тем про читы в последнее время.

    Потому что виксы в комерц целях уже не актуальны, да и на данный момент там техники слишком сложны для реализации, впрочем как и защита. Сейчас читы популярны, спрос огромный, а простота реализации доступна полным нуби, так как античиты примитивны, это набор патчей. Эта тема яркий тому пример.
     
  14. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    Indy_, он все регистры видит как пустые а в приложении если чекать этот же контект то он имеет значения в регистрах при том что в драйвере ошибок нету не каких
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    accord,

    Код (Text):
    1. PsLookupThreadByThreadId(hThread, &thread);
    Во первых ID обьекта это не его HANDLE. А во вторых я не вижу у вас что есть hThread.
     
  16. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    поток не остановлен и работает
    Код (Text):
    1. hThread = pInfo->Threads[i].ClientId.UniqueThread;
    --- Сообщение объединено, 12 фев 2020 ---
    Не понял что с кодом не так
     
  17. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    accord,

    Попробуй в локальный буфер получить контекст(без Attach/Alloc).
     
  18. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    контекст должен находиться в памяти игры иначе будет ошибка 0xC0000005
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    accord,

    Нужно указать KernelMode.
     
  20. accord

    accord New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2020
    Сообщения:
    24
    получаю ошибку C0000001 вроде все как надо
    Код (Text):
    1.         CONTEXT* ctx = (CONTEXT*)ExAllocatePoolWithTag(NonPagedPool, sizeof(CONTEXT), 'enoN');
    2. ...
    3. status = GetContextThread(thread, ctx, KernelMode);