Вызов напрямую winapi

Тема в разделе "WASM.BEGINNERS", создана пользователем piligmindo, 12 июл 2022.

  1. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
    Доброго времени, форум!)

    Делаю эксперименты с попытками вызовоф winapi функций через sycall, получается вот что: на вин10 все вызовы проходят успешно, на вин11 проходят успешно не все:) Например NtSetInformationFile правильно работает, а NtCreateSection не работает, ошибка - нет доступа с0000005. Код один и тот де, х64. Кто нибудь подскажет?
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Номер сервиса совпадает?
     
  3. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
    Да, конечно. Различий вообще ни в чем нет, только вин10 и вин11
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ты не понял, номера сервисов от версии к версии Венды могут меняться, дизассемблируй NtCreateSection в ntdll.dll на 11ой Венде и сравни номер сервиса, который ты вызываешь с номером сервиса, который вызывает функция.
    --- Сообщение объединено, 13 июл 2022 ---
    Вообще, слышал в какой-то презе на какой-то конфе про такой алгоритм, чтобы мол не хардкодить номера сервисов: нужно взять все Zw* функции, отсортировать их по имени, и порядковый номер функции в отсортированном массиве будет соответствовать номеру сервиса, никто не проверял, так ли это на самом деле?
     
  5. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
    Да, я знаю. Но в данном случае не менялись. Например NtReadVirtualMemory номер 63, как в 10 так и в 11. Я думаю, может какая защита появилась?
     
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    piligmindo, код надо, или семпл, иначе это угадывание.
    --- Сообщение объединено, 13 июл 2022 ---
    не пробовал, надо глянуть; но там парсить в памяти/с диска элементарно, и не надо хардкодить. Ищем все апи Zw (Nt), смотри первый байт, если это 0xB8 (mov ), то значит сискол, копируем номер после оного. Работает и на 32 бит и на 64 .
     
  7. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
    Это обычный код, который можно найти на гипхабе или в интернете, думаю, что нет смысла его выкладывать..
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    У аверов на повторное чтение ntdll с диска может привстать шишка, в памяти эти байты уже могут быть переписаны хуком, так что альтернативный вариант пригодится.
     
    M0rg0t нравится это.
  9. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    у меня лично NtCreateFile работает на 11, а гуглить где-то конкретно секции как то лень; нет так нет, сидите со своими приватами.
     
  10. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
    Ды дело не в приватах, я просто на гитхабе нашел и пытаюсь копилировать. Если есть возможность проверить - проверь NtCreateSection пожалуйста, потому что NtCreateFile у меня тоже работает
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    так дай ссылку
     
  12. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
  13. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Хз, у меня все отработало и на 10 и на 11.
    --- Сообщение объединено, 13 июл 2022 ---
    мб неправильно понял задачу, но номера никак не связаны с алфавитом - две функции на А вначале, но и другие тоже. Вин10.
     

    Вложения:

    • 12345.PNG
      12345.PNG
      Размер файла:
      9 КБ
      Просмотров:
      146
  14. piligmindo

    piligmindo Member

    Публикаций:
    0
    Регистрация:
    31 дек 2018
    Сообщения:
    69
    Хм, интересно... Буду разбираться.
     
  15. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    piligmindo, тут игра в экстрасенсов, но раз приват семплы / сорцы не показываешь, то как иначе?
    могу сказать только то, что на последней обновленной вин11 вызов
    Код (C++):
    1. pNtCreateSection(&hSection, SECTION_MAP_READ | SECTION_MAP_WRITE | SECTION_MAP_EXECUTE, NULL, (PLARGE_INTEGER)&sz, PAGE_EXECUTE_READWRITE, SEC_COMMIT, NULL);
    с правами юзера через сискол возращает 0L (suxxess) и секция создается. А там дальше уже смотрите.
     
  16. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    piligmindo, на 7ке пашет нормульно, правда в цикле поиска номера сискола есть бажинка (функция GetSysCallNumber)