=========================================================
Все опыты проводились на Windows 10 x64 21H1 (Сборка ОС 19043.906) – процессор Intel
Подопытный: PE-файл
=========================================================
Всем привет. Недавно ковырял последний вмпрот, и мне стало интересно, почему он не брякается ни на какую функцию, о которой я знал, связанной с MessageBox'ом. После нескольких часов, я все таки нашел, где зарыта собака. Оказывается, MessageBox вызывается прямо из ядра недокументированной функцией.Все опыты проводились на Windows 10 x64 21H1 (Сборка ОС 19043.906) – процессор Intel
Подопытный: PE-файл
=========================================================
PS: этот трюк добавился с где-то с 1261 версии. Но т.к. я нечаянно перезаписал старый билд новым вмпротом, а теперь не могу нигде найти 1261-1263 билд (кстати, я все еще ищу его, думаю, намёк понятен, заранее спасибо).
И вот я сделал небольшой сэмпл, как можно это воспроизвести. Кстати, я не знаю, как это будет вести себя на Windows 7, 8, XP и т.д. Поэтому если кто-то может протестировать и отписать результаты, буду благодарен.
C++:
#include <windows.h>
#include <winternl.h>
#pragma comment(lib, "ntdll.lib")
extern "C" NTSTATUS NTAPI ZwRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);
int main()
{
UNICODE_STRING msgBody;
UNICODE_STRING msgCaption;
ULONG ErrorResponse;
RtlInitUnicodeString(&msgCaption, L"Message");
RtlInitUnicodeString(&msgBody, L"Hello from kernel");
const ULONG_PTR msgParams[] = {
(ULONG_PTR)&msgBody,
(ULONG_PTR)&msgCaption,
(ULONG_PTR)(MB_OK | MB_ICONWARNING)
};
ZwRaiseHardError(0x50000018L, 0x0000003L, 3, (PULONG_PTR)msgParams, NULL, &ErrorResponse);
}
). Немного трюков:
C++:
#include <windows.h>
#include <winternl.h>
#pragma comment(lib, "ntdll.lib")
extern "C" NTSTATUS NTAPI ZwRaiseHardError(LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);
int main()
{
UNICODE_STRING msgBody;
UNICODE_STRING msgCaption;
ULONG ErrorResponse;
static const wchar_t cBody[] = L"Hello from kernel";
msgBody.Length = sizeof(cBody) - sizeof(wchar_t);
msgBody.MaximumLength = msgBody.Length;
msgBody.Buffer = (wchar_t*)cBody;
static const wchar_t cCaption[] = L"Message";
msgCaption.Length = sizeof(cCaption) - sizeof(wchar_t);
msgCaption.MaximumLength = msgCaption.Length;
msgCaption.Buffer = (wchar_t*)cCaption;
const ULONG_PTR msgParams[] = {
(ULONG_PTR)&msgBody,
(ULONG_PTR)&msgCaption,
(ULONG_PTR)(MB_OK | MB_ICONWARNING)
};
ZwRaiseHardError(0x50000018L, 0x00000003L, 3, (PULONG_PTR)msgParams, NULL, &ErrorResponse);
}
Последнее редактирование: