- Статус
- Оффлайн
- Регистрация
- 29 Сен 2021
- Сообщения
- 214
- Реакции
- 69
Все началось с данного сурса
Далеё я хотел попробовать вызвать CloseHandle через сискалы, посмотрел что функция вызывает ZwClose который аналогичен NtClose и оба ноходятся в ntdll, сама же функция просто вызывает Wow64SystemServiceCall без передачи чего либо
И теперь сам вопрос, как получить адрес самого syscall функции, по моим предположениям, это он 0x3000?
И как его вызвать, поискав по юц я нашел пару разных вариантов и все они под х64, как
При вызове я получаю краш
Только не бейте, я пытался вникнуть гуглив, у меня уже голова болит
Пожалуйста, авторизуйтесь для просмотра ссылки.
, увидел что функции winapi вызываются через некие
Пожалуйста, авторизуйтесь для просмотра ссылки.
? потом что функции вызываются через
Пожалуйста, авторизуйтесь для просмотра ссылки.
, OpenAi обьяснил это так
Я не доконца понимаю, как передается сам индекс функции и аргументы, предположение что из-заThe system call number is passed in the ecx register, and the arguments to the system call are passed on the stack. The function first moves the system call number from the ecx register to the eax register, then it pushes the value of the m_param variable onto the stack as an argument to the system call.
It then calls the int 0x2E interrupt, which invokes the system call with the given number and arguments. The function then adds 4 to the stack pointer to clean up the argument, and returns.
Пожалуйста, авторизуйтесь для просмотра ссылки.
первый параметр, тоесть индекс передается в ECX, второй же в EDX регистры, но тогда я доконца не понимаю что за значение m_param, и почему оно тоже передается,
Пожалуйста, авторизуйтесь для просмотра ссылки.
Далеё я хотел попробовать вызвать CloseHandle через сискалы, посмотрел что функция вызывает ZwClose который аналогичен NtClose и оба ноходятся в ntdll, сама же функция просто вызывает Wow64SystemServiceCall без передачи чего либо
Пожалуйста, авторизуйтесь для просмотра ссылки.
И теперь сам вопрос, как получить адрес самого syscall функции, по моим предположениям, это он 0x3000?
Пожалуйста, авторизуйтесь для просмотра ссылки.
И как его вызвать, поискав по юц я нашел пару разных вариантов и все они под х64, как
Пожалуйста, авторизуйтесь для просмотра ссылки.
, тогда почему они передают сразу столько аргументов , и используют typename... args только в концеПри вызове я получаю краш
C++:
template < typename ... TArguments >
long __fastcall Wow64SystemServiceCall( std::uint32_t uiIndex, TArguments ... tArgumentsList ) {
__asm {
mov eax, ecx; Передаем индекс
call dword ptr fs : [0xC0]; Тут я понял мы получем сам Heaven Gate (TIB + 0xC0)
add esp, 0x4; Очищаем аргумент
retn;
}
}
long NtClose( void *pHandle ) {
return Wow64SystemServiceCall( 0x3000, pHandle );
}
Последнее редактирование: