The specified procedure could not be found что за...

Тема в разделе "WASM.BEGINNERS", создана пользователем loginrl_103, 23 май 2008.

  1. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    при запуске драйвера выдаётся такая ошибка
    Код (Text):
    1. error 127 "The specified procedure could not be found"
    выползает она на ZwProtectVirtualMemory - функция в хирдерах описана и подключена ntdll.lib к драйверу...без неё всё отлично...

    кто что может сказать (по делу :) ).
     
  2. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    выползает ещё на одной функции - обе неэкспортируемы. вопрос - где порылась собака))
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    подключать ntdll к драйверу это пять баллов =)

    можно только ntoskrnl, hal и драйвера импортировать. никаких юзермодных либ! )
     
  4. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    тогда другой вопрос - а как использовать неэкспортируемые функции?) кроме использования прямой передачи параметров и вызов сервиса напрямую...хоть бы экзампл найти драйвер+неэксп функция)
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ZwProtectVirtualMemory не экспортируется ntoskrnl.exe, при чем здесь либа для юзермодной ntdll.dll ?
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Great
    ваще никаких? :P
    Например dll'ka с мат функциями прекрасно доключается к драйверу, правда там импорта нет, только экспорт %)
    если функция есть в SDT то считываешь оттуда адрес и все.
     
  7. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    ядром неэкспортируется, ntdll - да
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ну как бы ты же не пытаешься, надеюсь, использовать экспорт скажем user32.dll чтобы окошечки выводить.
     
  9. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    n0name - нет) меня сразу терзали подозрения на эту библиотеку, но с ней зато всё скосмилировалось))
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    придираешься к словам)))
    я имел в виду что незя подключать юзермодные либы, которые именно привязаны к юзермоду по апи и проч.

    loginrl_103
    А тут все не так сложно с неэкспортируемыми функциями
    Ты берешь, читаешь в память ntdll.dll динамически во время работы драйвера в память (точнее, можешь не читать - она промаплена в юзермодное адресное пространство любого процесса, в том числе и System), ищешь там в экспорте твою функцию, выдираешь 4 байта по смещению 1 от ее начала - это будет ее номер.
    А все потому, что в ntdll сервисы содержат код вида
    NtXXXXXService:
    mov eax, SERVICE_NUMBER
    lea ...
    call ...

    вот тебе и нужен SERVICE_NUMBER, который от начала mov лежит по смещению 1.
    Потом в ssdt ищешь адрес и вызываешь.

    Только зачем тебе все это нужно? скажи, зачем тебе эта функция и я скажу, как, вероятно, сделать проще (и правильнее, если у тебя идея неверная вдруг)
     
  11. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    хочу вызвать zwcreatethread из процесса, прежде приаттачившись к нему. одним словом - изучаю)

    адреса из ssdt я получаю...в ассемблере (синтаксис в mvs) не очень силён - чешу репу, пытаюсь правильно заталкать параметры)).
     
  12. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    узнать какие параметры в какие регистры запихиваются в неэспортируемых функ-циях - только через дизасм этих функций можно?
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    какие еще регистры? =))
     
  14. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    может туплю (спать хосется) ))

    описание функции

    Код (Text):
    1. NTSYSAPI
    2. NTSTATUS
    3. NTAPI
    4. ZwCreateThread(
    5. OUT PHANDLE ThreadHandle,
    6. IN ACCESS_MASK DesiredAccess,
    7. IN POBJECT_ATTRIBUTES ObjectAttributes,
    8. IN HANDLE ProcessHandle,
    9. OUT PCLIENT_ID ClientId,
    10. IN PCONTEXT ThreadContext,
    11. IN PUSER_STACK UserStack,
    12. IN BOOLEAN CreateSuspended
    13. );
    дизасм

    Код (Text):
    1.  push    dword ptr [ebp+10h]
    2. .text:7C933FF0                 lea     eax, [ebp-334h]
    3. .text:7C933FF6                 push    eax
    4. .text:7C933FF7                 lea     eax, [ebp-2E8h]
    5. .text:7C933FFD                 push    eax
    6. .text:7C933FFE                 lea     eax, [ebp-308h]
    7. .text:7C934004                 push    eax
    8. .text:7C934005                 push    esi
    9. .text:7C934006                 lea     eax, [ebp-320h]
    10. .text:7C93400C                 push    eax
    11. .text:7C93400D                 push    1F03FFh
    12. .text:7C934012                 lea     eax, [ebp-2ECh]
    13. .text:7C934018                 push    eax
    14. .text:7C934019                 call    ZwCreateThread
    (из ntdll.lib)


    вот что я навоял

    Код (Text):
    1. __asm
    2.        {
    3.     push 0; //false
    4.     lea eax, [Stack];
    5.     push eax; //Stack
    6.     lea eax, [Context];
    7.     push eax; //Context
    8.     push Cid; //Cid
    9.     push hProcess; //hProcess
    10.     push 0; //NULL
    11.     push THREAD_ALL_ACCESS; //THREAD_ALL_ACCESS
    12.     lea eax, [hThread];
    13.     push eax; //hThread
    14.     jmp 0x8057F262; //хардконстанта           
    15.        }
    правильно ли, и как будет правильно в синтаксисе mvs?
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    а почему jmp? и чт по этому адресу? лень смотреть и у тебя может быть другая версия ядра.
    ну а так.. хз вроде правильно остальное
     
  16. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    по этому адресу - обработчик сервиса zwcreatethread (у меня).
     
  17. loginrl_103

    loginrl_103 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2008
    Сообщения:
    271
    при запуске летит в бсод...арг-ты для функции должны же быть в userspace? у меня они определены до подключения к процессу. так понимаю их надо определить в приаттаченом процессе?...может кто подсобит правильным примерчиком?)