Вызова DllMain

Discussion in 'WASM.NT.KERNEL' started by accord, Feb 10, 2020.

  1. accord

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    Всем привет немогу вызвать длл мейн без создания потоков сейчас делаю вот так но ловлю краши винду

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

    Rel Well-Known Member

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

    hiddy Member

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

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    Code (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.     );
    Code (Text):
    1. typedef NTSTATUS(WINAPI* FnDllEntryPoint)(HINSTANCE, DWORD, LPVOID);
    Это получается прямая передача управления из ядра на юзер код. Если там что то отличное от возврата константы, это и должно упасть, даже не учитывая nx(smep etc). Это же передача управления вникуда. Во первых окружение разное, сегменты :sarcastic:
     
    d4rkd3n1337 likes this.
  5. accord

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    Пытаюсь через перехват контекста но у меня почему то структура контекста по нулям я выделил память в игре через PsGetContextThread получил контекст без ошибок все но почему то там все пусто оч редко бывает один регистр заполнен тестировал на разных приложения x64 останавливал приложени перед получение контекста потоки брал не застопленые и др а которые работают
     
  6. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    accord,

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

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

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

    njeen Active Member

    Blog Posts:
    0
    Joined:
    Mar 26, 2017
    Messages:
    139
    Location:
    Ташлинск
    Флаги в структуре ставили?
    CONTEXT ctx;
    ctx.ContextFlags = CONTEXT_ALL;
    ...
     
  8. accord

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    Да ставил
    Приду домой скину код вот и сама суть там анти чит а потоки не хочу создавать из за него но я тестил на своем приложении но там тоже по нулям контекст а само приложение видит контекст
     
  9. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Васм постепенно превращается в анноунчитс или в подобные форумы. Чет много тем про читы в последнее время.
     
  10. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    да лучше так, чем в избу-флудильню.
     
  11. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    accord,

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

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    Читы читами но мой вопрос по теме раздела )
    вот код
     
  13. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    Rel,

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

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

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    Indy_, он все регистры видит как пустые а в приложении если чекать этот же контект то он имеет значения в регистрах при том что в драйвере ошибок нету не каких
     
  15. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    accord,

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

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    поток не остановлен и работает
    Code (Text):
    1. hThread = pInfo->Threads[i].ClientId.UniqueThread;
    --- Сообщение объединено, Feb 12, 2020 ---
    Не понял что с кодом не так
     
  17. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    accord,

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

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    контекст должен находиться в памяти игры иначе будет ошибка 0xC0000005
     
  19. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    accord,

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

    accord New Member

    Blog Posts:
    0
    Joined:
    Jan 29, 2020
    Messages:
    24
    получаю ошибку C0000001 вроде все как надо
    Code (Text):
    1.         CONTEXT* ctx = (CONTEXT*)ExAllocatePoolWithTag(NonPagedPool, sizeof(CONTEXT), 'enoN');
    2. ...
    3. status = GetContextThread(thread, ctx, KernelMode);