• XSS.stack #1 – первый литературный журнал от юзеров форума

Как найти номера сисколлов (syscall number) в win?

goingHeavenTogether

HDD-drive
Пользователь
Регистрация
28.11.2024
Сообщения
41
Реакции
16
Здравствуйте.

Для реализации косвенного сисколла нужен номер сисколла. Откуда его взять? Все таблицы, которые я нашел в интернете не содержат сисколлов для моей версии виндовса, например. Интуиция подсказывает, что его можно выжать откуда-то из системы. Нужна подсказка как это сделать. В интернете способов никаких не нашел. Не нашел даже где их искать.
 
Сдампить и дзассемблировать ntdll , не?
или так Syscall Extractor
 
Последнее редактирование:
Здравствуйте.

Для реализации косвенного сисколла нужен номер сисколла. Откуда его взять? Все таблицы, которые я нашел в интернете не содержат сисколлов для моей версии виндовса, например. Интуиция подсказывает, что его можно выжать откуда-то из системы. Нужна подсказка как это сделать. В интернете способов никаких не нашел. Не нашел даже где их искать.

на х32 системе в х32 процессе работает х32 sysenter / int 2E (если не ошибаюсь - гдето работает одно, но не работает другое и наоборот)
на х64 системе в х32 процессе - процесс переходит в х64 режим, выполняет системный вызов х64 syscall, возвращается в х32 режим
на х64 системе в х64 процессе работает х64 syscall

Сисколы получаются путем дампа экспорт функций нтдлл

Читаешь к примеру х32 нтдлл с диска, парсишь экспорт, проверяешь первый байт на 0xE8 помоему, и с некоторым оффсетом парсишь число - оно и будет номером системного вызова

Номера системных вызовов от версии к версии, даже от патча к патчу винды - разные

В разных версиях винды код в функциях нтдлл может отличаться, на вин7 помоему не работает то, что я описал выше

В целом данная техника не очень стабильная и антивирусы ее тоже не очень любят
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Интуиция подсказывает, что его можно выжать откуда-то из системы. Нужна подсказка как это сделать. В интернете способов никаких не нашел. Не нашел даже где их искать.
Вообще, когда-то слышал такое мнение, что если перечислить все Zw* функции в ntdll.dll и отсортировать их по адресу, то номер сискола совпадет с порядковым номером функции в отсортированном массиве. Или что-то такое, но я не тестил.
 
Вообще, когда-то слышал такое мнение, что если перечислить все Zw* функции в ntdll.dll и отсортировать их по адресу, то номер сискола совпадет с порядковым номером функции в отсортированном массиве. Или что-то такое, но я не тестил.
Тестил на 10 - не работает, какието может и совпадают, номера не формата 1, 2, 3, 4, 5
А к примеру: 1005, 13521, etc
 
Всё прекрасно работает, как ты тестил я хз...
Тесты в студию предоставите?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
как ты тестил я хз
Есть вероятность, что он тестил под wow64, раз у него номера сисколлов такие (там же вроде какая-то информация об аргументах в старшие разряды номера пихается).
 
Так ты же тестировал, вот и предоставь свои тесты, а я никаких кодов давать не буду, а то потом барыжить будешь по сотке баксов :cool:
Сотки баксов это сильно)

Не код а вывод консоли с дампом ссдт
 
Сотки баксов это сильно)

Не код а вывод консоли с дампом ссдт
Работает оно и чтобы проблем с ав не было не надо лезть на диск

На 64 винде с х86 процесса нужно сделать свитч процессора в х64 режим - это делается манипуляцией с регистром CS

Для теста берёшь либу вот эту: https://github.com/rwfpl/rewolf-wow64ext/blob/master/src/wow64ext.cpp ( там код правда уже палится так что надо бы переписать )

Берёшь оттуда getMem64 и getNTDLL64

Дальше парсишь юзая getMem64 из х64 нтдллки в памяти твоего процесса по PE стандарту IMAGE_DIRECTORY_ENTRY_EXPORT ( в вов64 процессе 2 нтдлл всегда загружено одна в режиме х86 другая в х64 )

Проходишься в цикле по именам, если встречаешь первые две буквы Zw, парсишь юзая getMem64 остальное имя и относительный адрес -> funcs[ordinals] потом кидаешь в std::map это всё юзая как ключ относительный адрес - и у тебя получается автоматом отсортированный список сисколов с именем относительным адресом и номером

Чтоб их тянуть надо также запрыгнуть в х64 режим и там сделать 'syscall' инструкцию у себя в коде ( ну либо хитровыебанно в обход едр с подменой стека потянуть эту инструкцию ) за основу берёшь https://github.com/rwfpl/rewolf-wow...609d9a5d8bb832937b9b5acd/src/wow64ext.cpp#L75 эту функцию

Вот у меня на скрине что вышло
syscals.png


Могу всю таблицу скинуть ( win 10 pro 10.0.19045 N/A Build 19045 )
 
Работает оно и чтобы проблем с ав не было не надо лезть на диск

Вот у меня на скрине что вышло
Возможно когданибудь интегрирую сисколы в крипт, но нет нужды + я уверен в большей стабильности при вызове нтфункций, чем сисколов

Хотя учитывая возможность получения сискола без анализа нтфункции - возможно получится добиться стабильности

Еще хочу добавить что на х32 есть не только sysenter, а еще и int 2e (если не напутал код), и они взаимно незаменимы
 
Никогда не пробовал вместо syscall/sysenter тянуть int 2eh

Вот статья на эту тему https://www.amossys.fr/insights/blog-technique/windows10-th2-int2e-mystery/

Тут вот пишут что вообщем-то на разных версиях разное поведение например где-то int 2e передаёт управление как и сискол на KiSystemService но где-то такая тема:

However, on a Windows 10 1709 build running under Hyper-V, but WITHOUT Virtualization Based Security enabled, there’s no handler

Наверное можно запилить чек вызвав какую-то простую апишку и чекнув результат и юзать тогда прерывание 0x2Eh интерестно как антивирусы отреагируют

Возможно когданибудь интегрирую сисколы в крипт
Да там наверное не особо много где - NtCreateSection/NtMapViewOfSection мб какие-нибудь в сисколы загнать в лоадпе или ещё чёт?
 
Да там наверное не особо много где - NtCreateSection/NtMapViewOfSection мб какие-нибудь в сисколы загнать в лоадпе или ещё чёт?
NtMapViewOfSection - эта функция вызывается загрузчиком гдето в процессе исполнения функции LoadLibrary(A/W)

NtCreateSection не используется вообще

NtAllocateVirtualMemory - сомнительно, аверы сканируют страницы
NtProtectVirtualMemory - аналогично
 
Никогда не пробовал вместо syscall/sysenter тянуть int 2eh
Я ставил х32 вин7 помоему, там в нтфункции было именно int 2e, я тестил - sysenter крашит
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх