Исходник BSODCrasher (C++)

Начинающий
Статус
Оффлайн
Регистрация
23 Дек 2024
Сообщения
121
Реакции[?]
3
Поинты[?]
3K
BSODCrasher вызывает BSOD можете добавить при antidbg или другое чет хз
Код:
#include <Windows.h>
#include <iostream>
#include <ntstatus.h>

typedef NTSTATUS(WINAPI* RtlSetProcessIsCritical)(BOOL NewValue,PBOOL OldValue,BOOL IsPersistent);

void BSODCrasher() {
    HMODULE ntdll = LoadLibraryA("ntdll.dll");
    if (!ntdll) {
        return;
    }

    auto setProcessCritical = (RtlSetProcessIsCritical)GetProcAddress(ntdll, "RtlSetProcessIsCritical");
    if (!setProcessCritical) {
        FreeLibrary(ntdll);
        return;
    }

    BOOL wasCritical = FALSE;

    NTSTATUS status = setProcessCritical(TRUE, &wasCritical, FALSE);
    if (status == 0) {
        TerminateProcess(GetCurrentProcess(), 0);
    }

    FreeLibrary(ntdll);
}

int main() {
    BSODCrasher();

    return 0;
}
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
221
Реакции[?]
29
Поинты[?]
29K
C++:
typedef NTSTATUS(NTAPI* pRtlAdjustPrivilege) (ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
typedef NTSTATUS(NTAPI* pNtRaiseHardError) (LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void pFunc()
{
    BOOLEAN bl;
    ULONG Response;

    pRtlAdjustPrivilege oRtlAdjustPrivilege = (pRtlAdjustPrivilege)GetProcAdress(GetModuleHandle("ntdll.dll"), "RtlAdjustPrivilege");
    oRtlAdjustPrivilege(19, TRUE, FALSE, &bl);

    pNtRaiseHardError oNtRaiseHardError = (pNtRaiseHardError)GetProcAdress(GetModuleHandle(L"ntdll.dll"), "NtRaiseHardError");
    oNtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response);
}
 
Начинающий
Статус
Оффлайн
Регистрация
23 Дек 2024
Сообщения
121
Реакции[?]
3
Поинты[?]
3K
Один хук и твоего бсодкрашера через гпт не существует
я знаю я нашел его в инете и чучуть доработал
C++:
typedef NTSTATUS(NTAPI* pRtlAdjustPrivilege) (ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
typedef NTSTATUS(NTAPI* pNtRaiseHardError) (LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void pFunc()
{
    BOOLEAN bl;
    ULONG Response;

    pRtlAdjustPrivilege oRtlAdjustPrivilege = (pRtlAdjustPrivilege)GetProcAdress(GetModuleHandle("ntdll.dll"), "RtlAdjustPrivilege");
    oRtlAdjustPrivilege(19, TRUE, FALSE, &bl);

    pNtRaiseHardError oNtRaiseHardError = (pNtRaiseHardError)GetProcAdress(GetModuleHandle(L"ntdll.dll"), "NtRaiseHardError");
    oNtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response);
}
пон
 
Последнее редактирование:
SummerLOVE
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2022
Сообщения
386
Реакции[?]
64
Поинты[?]
29K
C++:
typedef NTSTATUS(NTAPI* pRtlAdjustPrivilege) (ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
typedef NTSTATUS(NTAPI* pNtRaiseHardError) (LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void pFunc()
{
    BOOLEAN bl;
    ULONG Response;

    pRtlAdjustPrivilege oRtlAdjustPrivilege = (pRtlAdjustPrivilege)GetProcAdress(GetModuleHandle("ntdll.dll"), "RtlAdjustPrivilege");
    oRtlAdjustPrivilege(19, TRUE, FALSE, &bl);

    pNtRaiseHardError oNtRaiseHardError = (pNtRaiseHardError)GetProcAdress(GetModuleHandle(L"ntdll.dll"), "NtRaiseHardError");
    oNtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response);
}
1735954115155.png
 
Начинающий
Статус
Оффлайн
Регистрация
31 Мар 2024
Сообщения
111
Реакции[?]
23
Поинты[?]
26K
BSODCrasher вызывает BSOD можете добавить при antidbg или другое чет хз
Код:
#include <Windows.h>
#include <iostream>
#include <ntstatus.h>

typedef NTSTATUS(WINAPI* RtlSetProcessIsCritical)(BOOL NewValue,PBOOL OldValue,BOOL IsPersistent);

void BSODCrasher() {
    HMODULE ntdll = LoadLibraryA("ntdll.dll");
    if (!ntdll) {
        return;
    }

    auto setProcessCritical = (RtlSetProcessIsCritical)GetProcAddress(ntdll, "RtlSetProcessIsCritical");
    if (!setProcessCritical) {
        FreeLibrary(ntdll);
        return;
    }

    BOOL wasCritical = FALSE;

    NTSTATUS status = setProcessCritical(TRUE, &wasCritical, FALSE);
    if (status == 0) {
        TerminateProcess(GetCurrentProcess(), 0);
    }

    FreeLibrary(ntdll);
}

int main() {
    BSODCrasher();

    return 0;
}
Бсодить при дебаге низко. Надо делать защиту так, чтобы это не понадобилось
 
Начинающий
Статус
Оффлайн
Регистрация
23 Дек 2024
Сообщения
121
Реакции[?]
3
Поинты[?]
3K
Он не ахуеет. Тут без хуков он байпасится легко. Буквально бряк надо поставить и пропатчитт
пока он поставит бряк точно будет хотя бы 2-3 BSOD'A
пока он поставит бряк точно будет хотя бы 2-3 BSOD'A
лично я если бы крякал че то и у меня BSOD вызвался я бы ахуел удалил и проверил винду 3 раза
 
ЧВК EB_LAN
Эксперт
Статус
Оффлайн
Регистрация
26 Янв 2021
Сообщения
1,729
Реакции[?]
572
Поинты[?]
241K
пока он поставит бряк точно будет хотя бы 2-3 BSOD'A
ну вообще найти и нопнуть это хуйня делов ибо строку с надписью RtlSetProcessIsCritical найти как нехуй и не улететь на этом можно всего-лишь с бряком на ентрипоинте...
 
Начинающий
Статус
Оффлайн
Регистрация
23 Дек 2024
Сообщения
121
Реакции[?]
3
Поинты[?]
3K
ну вообще найти и нопнуть это хуйня делов ибо строку с надписью RtlSetProcessIsCritical найти как нехуй и не улететь на этом можно всего-лишь с бряком на ентрипоинте...
ну я бы сначало почекал httpdbg или еще чем то до того как запускать ida pro я знаю что бряк поставить 5м дела
 
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
786
Реакции[?]
158
Поинты[?]
70K
ЧВК EB_LAN
Эксперт
Статус
Оффлайн
Регистрация
26 Янв 2021
Сообщения
1,729
Реакции[?]
572
Поинты[?]
241K
ну я бы сначало почекал httpdbg или еще чем то до того как запускать ida pro я знаю что бряк поставить 5м дела
зачем всякие хттпдбг в оффлайн приложении, до иды не смысла чего либо запускать ибо максимум что можн проще сделать это закинуть в дайку/cff прочекать чем накрыто ПО чтоб знать к чему готовится как минимум да и посмотреть какие есть строки, ток потом уже либо патчить в рантайме либо же просто в идешке
 
Начинающий
Статус
Оффлайн
Регистрация
31 Мар 2024
Сообщения
111
Реакции[?]
23
Поинты[?]
26K
пока он поставит бряк точно будет хотя бы 2-3 BSOD'A

лично я если бы крякал че то и у меня BSOD вызвался я бы ахуел удалил и проверил винду 3 раза
Никто бы не словил 2-3 бсода. Есть такая штука как бряк на ентри поинте в большинстве дебаггеров. Спокойно запускаешь с ним, нопаешь/хукаешь функции и дебажишь дальше
 
Начинающий
Статус
Оффлайн
Регистрация
23 Дек 2024
Сообщения
121
Реакции[?]
3
Поинты[?]
3K
Никто бы не словил 2-3 бсода. Есть такая штука как бряк на ентри поинте в большинстве дебаггеров. Спокойно запускаешь с ним, нопаешь/хукаешь функции и дебажишь дальше
да я знаю
 
Начинающий
Статус
Оффлайн
Регистрация
2 Янв 2025
Сообщения
18
Реакции[?]
3
Поинты[?]
2K
такие бсоды, как не странно ложаться от одного хука, в принципе можно использовать драйвера для мега крутого бсода, банально вызвать краш через reinterpret_cast<uint64_t>(0xDEADBEEF) = -1;
бсоды это уже баян какой-то...
 
Начинающий
Статус
Оффлайн
Регистрация
17 Июн 2024
Сообщения
18
Реакции[?]
9
Поинты[?]
9K
C++:
typedef NTSTATUS(NTAPI* pRtlAdjustPrivilege) (ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN OldValue);
typedef NTSTATUS(NTAPI* pNtRaiseHardError) (LONG ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask,PULONG_PTR Parameters, ULONG ValidResponseOptions, PULONG Response);

void pFunc()
{
    BOOLEAN bl;
    ULONG Response;

    pRtlAdjustPrivilege oRtlAdjustPrivilege = (pRtlAdjustPrivilege)GetProcAdress(GetModuleHandle("ntdll.dll"), "RtlAdjustPrivilege");
    oRtlAdjustPrivilege(19, TRUE, FALSE, &bl);

    pNtRaiseHardError oNtRaiseHardError = (pNtRaiseHardError)GetProcAdress(GetModuleHandle(L"ntdll.dll"), "NtRaiseHardError");
    oNtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response);
}
Что за мода пошла на магические числа? Вот читаемый вариант:

C++:
enum class HARDERROR_RESPONSE_OPTION : ULONG
{
    OptionAbortRetryIgnore = 0,
    OptionOk = 1,
    OptionOkCancel = 2,
    OptionRetryCancel = 3,
    OptionYesNo = 4,
    OptionYesNoCancel = 5,
    OptionShutdownSystem = 6
};

typedef NTSTATUS (NTAPI*pRtlAdjustPrivilege)(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread,
                                             PBOOLEAN OldValue);

typedef NTSTATUS (NTAPI*pNtRaiseHardError)(LONG ErrorStatus, ULONG NumberOfParameters,
                                           ULONG UnicodeStringParameterMask, PULONG_PTR Parameters,
                                           HARDERROR_RESPONSE_OPTION ValidResponseOptions,
                                           HARDERROR_RESPONSE_OPTION* Response);

void InitiateKernelPanic()
{
    constexpr auto SE_RESTORE_PRIVILEGE = 19;

    const auto ntdllHandle = GetModuleHandle("ntdll.dll");

    const auto RtlAdjustPrivilege = reinterpret_cast<pRtlAdjustPrivilege>(GetProcAddress(
        ntdllHandle, "RtlAdjustPrivilege"));
    const auto NtRaiseHardError = reinterpret_cast<pNtRaiseHardError>(GetProcAddress(ntdllHandle, "NtRaiseHardError"));

    BOOLEAN wasEnabled = false;
    if (RtlAdjustPrivilege(SE_RESTORE_PRIVILEGE, true, false, &wasEnabled) != STATUS_SUCCESS)
        throw std::runtime_error("RtlAdjustPrivilege execution fail");


    HARDERROR_RESPONSE_OPTION response;
    if (NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, nullptr, HARDERROR_RESPONSE_OPTION::OptionShutdownSystem,
                         &response) != STATUS_SUCCESS || response !=
        HARDERROR_RESPONSE_OPTION::OptionShutdownSystem)
        throw std::runtime_error("NtRaiseHardError execution fail");
}
 
Сверху Снизу