Исходник Loader for XenForo

Начинающий
Статус
Оффлайн
Регистрация
13 Янв 2023
Сообщения
127
Реакции[?]
16
Поинты[?]
1K
Лоадер с подключением по XenForo за 2к от SandF0xy "Купитц лоадер c++ что би ни крикнули и не взлом на форум "
src:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

ss:
1687040570017.png1687040700650.png
Пожалуйста, авторизуйтесь для просмотра ссылки.
- обзор от ушастого

Когда-то покупал для своей "приватной best пасты", валяется без дела сливаю вам пупсик
бабки в пустую)
 
Участник
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
1,176
Реакции[?]
314
Поинты[?]
152K
Лоадер с подключением по XenForo за 2к от SandF0xy "Купитц лоадер c++ что би ни крикнули и не взлом на форум "
src:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

ss:
1687040570017.png1687040700650.png
Пожалуйста, авторизуйтесь для просмотра ссылки.
- обзор от ушастого

Когда-то покупал для своей "приватной best пасты", валяется без дела сливаю вам пупсик
бабки в пустую)
1687090592265.png
 
Забаненный
Статус
Оффлайн
Регистрация
28 Дек 2022
Сообщения
66
Реакции[?]
6
Поинты[?]
3K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
1687091050979.png
нет слов, одни эмоции из-за этого позора
 
Забаненный
Статус
Оффлайн
Регистрация
16 Апр 2020
Сообщения
156
Реакции[?]
53
Поинты[?]
33K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
kernal :whyRly: :CoolStoryBob:
 
Ушастый
Забаненный
Статус
Оффлайн
Регистрация
23 Ноя 2021
Сообщения
371
Реакции[?]
56
Поинты[?]
10K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Удачи с этими сурсами ребята
Тут кста все в одном потоке :)
 
Забаненный
Статус
Оффлайн
Регистрация
16 Мар 2023
Сообщения
37
Реакции[?]
23
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Удачи с этими сурсами ребята
Тут кста все в одном потоке :)
чел на твоём бы месте мне мне было бы стыдно такое продавать. Оно и 100р не стоит, а ты 2к поставил прайс

Не делай больше лоадеры, это не твоё
 
feel irl
Участник
Статус
Оффлайн
Регистрация
21 Дек 2018
Сообщения
677
Реакции[?]
294
Поинты[?]
16K
Лоадер с подключением по XenForo за 2к от SandF0xy "Купитц лоадер c++ что би ни крикнули и не взлом на форум "
src:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.

ss:
1687040570017.png1687040700650.png
Пожалуйста, авторизуйтесь для просмотра ссылки.
- обзор от ушастого

Когда-то покупал для своей "приватной best пасты", валяется без дела сливаю вам пупсик
бабки в пустую)
Судя по некоторым файлам это скорее си, чем плюсы, но хоть в мейне прослеживаются плюсы(лучшеб блять нет).

Я не знаю, что за приколист(он точно не приколист, это спойлер из конца ответа) это делал, но я сочувствую либо его знаниям и умению их применять, либо чувству юмора.
Этот лоадер максимально неподдерживаемый для обновлений. Чтобы его обновить и понять сломалось ли что-то, то надо походу заново переписать и потом заливать на хост и говорить мол юзерам потестите посмотрите работает или нет.

Самое смешное, как по мне, это main.cpp

Зачем тебе столько переменных здесь? Исключения, которые летят до main, скажут тебе спасибо!!!
main.cpp lines 63-86:
std::string timeleft;
bool loadactavatar = false;
bool doOnce = false;
bool isbanned = false;
bool server_online = true;
bool show_login = true;
bool show_register = false;
bool try_auth = false;
bool islogined = false;
bool loading = false;

bool avatarwithnm = false;

const char* sysname;
bool outdated = false;
const char* loadmessege = "Preparing...";
std::string clop = "";
char c;

std::string output;
std::string subcheck = "";

std::string usernamenm = "";
std::string passwordnm = "";

Функция в глобальном, блять, неймспейсе, нахуя? Нет, сделал бы namespace utils или __detaill или ещё какой-нибудь, но мусорить в общий неймспейс — наше любимое занятие.
C++:
std::string replaceAll(std::string subject, const std::string& search, const std::string& replace) {
    size_t pos = 0;
    while ((pos = subject.find(search, pos)) != std::string::npos) {
        subject.replace(pos, search.length(), replace);
        pos += replace.length();
    }
    return subject;
}

Здесь мне хочется спросить автора: наркотики самые дешёвые брал?
C++:
std::string Request(std::string URL) {
    HINTERNET interwebs = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET urlFile;
    std::string rtn;
    if (interwebs) {
        urlFile = InternetOpenUrlA(interwebs, URL.c_str(), NULL, NULL, NULL, NULL);
        if (urlFile) {
            char buffer[2000];
            DWORD bytesRead;
            do {
                InternetReadFile(urlFile, buffer, 2000, &bytesRead);
                rtn.append(buffer, bytesRead);
                memset(buffer, 0, 2000);
            } while (bytesRead);
            InternetCloseHandle(interwebs);
            InternetCloseHandle(urlFile);
            std::string p = replaceAll(rtn, "|n", "");
            p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
            return p;
        }
    }
    InternetCloseHandle(interwebs);
    std::string p = replaceAll(rtn, "|n", "");
    p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
    return p;
}
В выделенных строках вот что интересно: а ты собсна зачем копируешь rtn в p? Ибо rtn также пустой, как и был до этого, причём ещё операции какие-то проводишь. А зачем ты возвращаешь пустую строку? Тебе никто спасибо не скажет за копирование объекта лишний раз, особенно, если на сервер запрос не удался.
Доёб насчёт функции в общем неймспейсе остаётся.

Я не хочу смотреть код функции после прикола номер 3, но меня волнует вопрос с аттрибутами.
Нахуй тут юник поинтер? Хоть идея и хорошая, но не проще ли ручками удалить, а не городить такое?
Если очень хочется, то запили нормально свой тип и функтор поименуй.
C++:
__forceinline std::string get_hwid()
{
    std::string m_sResult;

    HANDLE m_hFile = CreateFileW(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (m_hFile == INVALID_HANDLE_VALUE)
        return { };

    std::unique_ptr< std::remove_pointer <HANDLE >::type, void(*)(HANDLE) > m_hDevice
    {
        m_hFile, [](HANDLE handle)
        {
            CloseHandle(handle);
        }
    };

    STORAGE_PROPERTY_QUERY m_PropertyQuery;
    m_PropertyQuery.PropertyId = StorageDeviceProperty;
    m_PropertyQuery.QueryType = PropertyStandardQuery;

    STORAGE_DESCRIPTOR_HEADER m_DescHeader;
    DWORD m_dwBytesReturned = 0;
    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        &m_DescHeader, sizeof(STORAGE_DESCRIPTOR_HEADER), &m_dwBytesReturned, NULL))
        return { };

    const DWORD m_dwOutBufferSize = m_DescHeader.Size;
    std::unique_ptr< BYTE[] > m_pOutBuffer{ new BYTE[m_dwOutBufferSize] { } };

    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        m_pOutBuffer.get(), m_dwOutBufferSize, &m_dwBytesReturned, NULL))
        return { };

    STORAGE_DEVICE_DESCRIPTOR* m_pDeviceDescriptor = reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(m_pOutBuffer.get());
    const DWORD m_dwSerialNumberOffset = m_pDeviceDescriptor->SerialNumberOffset;
    if (m_dwSerialNumberOffset == 0)
        return { };

    m_sResult = reinterpret_cast<const char*>(m_pOutBuffer.get() + m_dwSerialNumberOffset);
    m_sResult.erase(std::remove_if(m_sResult.begin(), m_sResult.end(), ::isspace), m_sResult.end());

    return m_sResult;
}
Автор, на кой хуй ты сюда поставил атрибут __forceinline? Ты блять это пишешь в файле с функцией main.(Ну, или скажем, что эта слишком большая функция, чтобы её хотелось инлайнить)

Для кого придумали структуры? Ты в одних файлах, вроде, пишешь на Си, в других уже это плюсы, но БЛЯТЬ....
C++:
class initWindow {
public:
    const char* window_title = "By SandFoxy With Love :)";
    ImVec2 window_size{ 630, 360 };

    DWORD window_flags = ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar;
} iw;
Может тебе не стоит заниматься разработкой чего-либо на си плюсах?


Я понимаю, что код функции ты украл со стаковерфлоу, да и о том, что такое void ты не знаешь, но может стоило погуглить и написать?
C++:
int crash() {
    BOOLEAN PrivilegeState = FALSE;
    ULONG ErrorResponse = 0;
    RtlAdjustPrivilege(19, TRUE, FALSE, &PrivilegeState);
    printf("Crashing...");
    NtRaiseHardError(STATUS_LOCK_NOT_GRANTED, 0, 0, NULL, 6, &ErrorResponse); // There are many Crash reasons
    printf("Crash failed!"); // The program would exit before this.
    return 0;
}

Я понимаю, что C++17 и выше используют только лохи, но там же уже всё написано. Может стоит быть лохом, но не писать вот такое?
C++:
bool isDirectoryExists(const char* filename)
{
    DWORD dwFileAttributes = GetFileAttributes(filename);
    if (dwFileAttributes == 0xFFFFFFFF)
        return false;
    return dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}

Выделенные(6-18) строки я развернул из одной строки.
А теперь к доёбам выше. Тут уже используешь неймспейсы, но название последней функции....
А нахер тебе функция crash int возвращает, если ты тут её значение даже не ловишь?
C++:
void checksecure() {
    auto baseAddress = (PVOID)ApiWrapper::GetModuleBaseAddress(NULL);
    CRCSecthion::StealsCRCSectionsInit(baseAddress);

    if (AntiDebug::Util::IsGuardHook()
        || AntiDebug::Util::IsNtApiCorrupted()
        || AntiDebug::Util::IsModuleHaveBP()
        || AntiDebug::ShellCode::IsDebugPort()
        || AntiDebug::ShellCode::IsDebugFlag()
        || AntiDebug::ShellCode::IsDebugObjectHandle()
        || AntiDebug::OverWriteSyscall::IsDebugFlagHooked()
        || AntiDebug::OverWriteSyscall::IsBadHideThread()
        || BlackListPool::IsHyperHideDebuggingProcess()
        || AntiDebug::Util::BuildNumberIsHooked()
        || CheckTestMode::CodeIntCheck()
        || CheckTestMode::IsStartedWithDisableDSE()
        || CheckTestMode::IsBcdLibraryBooleanAllowPrereleaseSignatures()
       ) {
        if (!isDirectoryExists("C:\\Zeruma"))
        {
            crash();
        }
    }
}

1) Нахер тебе loginfile, passwordfile названия для переменных, если ты код с интернета по первой ссылке тупо копируешь и всё? Это ведь не отражает сути переменных... или у тебя они содержат данные из переменных? Назвал бы login_filename, password_filename.
2) Зачем такая сложная структура кода? Ты как будто на ассемблере пишешь, я не знаю. Тут всё это можно уместить в функцию в 5-6 раз короче.
3) Зачем нам надо хранить какие-то важные ссылки в переменных какого-нибудь конфига? Не знаю, давайте лучше использовать каждый раз строковые литералы ведущие на сайт, чтобы людям было потом удобнее их каждый раз менять, если вдруг какие-нибудь обязанности auth.php перейдут например на handler.php. А, я забыл, у нас же лоадер не планируется обновляться без полного переписывания всего лоадера.(обновление может содержать обновление лишь дизайна, а вот весь переписать надо...)
C++:
void authnomenu() {
    HWND hWnd = GetForegroundWindow();
    bool doOnceKaban = false;
    std::string line;
    std::string loginfile = "C:\\Artic\\username.data";
    std::string passwordfile = "C:\\Artic\\password.data";

    std::ifstream in(loginfile);
    if (in.is_open())
    {
        while (getline(in, line))
        {
            if (!doOnce) {
                usernamenm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    doOnceKaban = false;

    std::ifstream in1(passwordfile);
    if (in1.is_open())
    {
        while (getline(in1, line))
        {
            if (!doOnce) {
                passwordnm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    //auto authnomenuereq = xorstr_("https://") + Globals::server_side.server + xorstr_("/") + Globals::server_side.forum_dir + xorstr_("auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid();

    output = Request(xorstr_("https://artic.over-nine.fun/auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid());

    if (output == xorstr_("success")) {
        std::string req = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&expire");

        //Avatar
        std::string avatargetlink = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&avatar");

        std::string avatarlink = Request(avatargetlink);

        LPCTSTR Url2 = _T(""), File2 = _T("C:\\Artic\\user.jpg");

        HRESULT hr3 = URLDownloadToFile(0, avatarlink.c_str(), File2, 0, 0);
        if (hr3 != S_OK) // ���� ����, ��������� �������, ��
        {
            HRESULT backupresolts = URLDownloadToFile(0, "http://artic.over-nine.fun/backavatar.jpg", File2, 0, 0);
            if (backupresolts != S_OK) // ���� ����, ��������� �������, ��
            {

            }
        }


        int avatattexture_width = 40;
        int avatattexture_height = 40;

        bool ret3 = LoadTextureFromFile("C:/Artic/user.jpg", &avatattexture, &avatattexture_width, &avatattexture_height);
        IM_ASSERT(ret3);
        loadactavatar = false;
        // Pon
        avatarwithnm = true;
        timeleft = Request(req);
        sysname = user_name;
        show_login = false;
        islogined = true;
    }
}

Ох, как же я люблю обмазываться сочными лямбдами на 500 строк, оу да, давай больше строк в одной лямбде, давай....
Название переменных, как всегда, — это ахуенно.
C++:
                        std::thread t1([&]()
                            {
                                fs::create_directory("C:\\Artic\\");
                                remove("C:\\Artic\\kernal.dll");
                                remove("C:\\Artic\\kernal.exe");
                                Sleep(2000);
                                HRESULT hr;
                                LPCTSTR Url = _T("https://artic.over-nine.fun/kernal.exe"), File = _T("C:\\Artic\\kernal.exe");
                                hr = URLDownloadToFile(0, Url, File, 0, 0);
                                ShellExecute(NULL, "open", "C:\\Artic\\kernal.exe", NULL, NULL, SW_RESTORE);

                                wcout << "Creating an instance of a named pipe..." << endl;
                                HANDLE pipe = CreateNamedPipe(
                                    "\\\\.\\pipe\\my_pipe",
                                    PIPE_ACCESS_OUTBOUND,
                                    PIPE_TYPE_BYTE,
                                    1,
                                    0,
                                    0,
                                    0,
                                    NULL
                                );

                                if (pipe == NULL || pipe == INVALID_HANDLE_VALUE) {
                                    system("pause");
                                    exit(-1);
                                }

                                BOOL result = ConnectNamedPipe(pipe, NULL);
                                if (!result) {
                                    CloseHandle(pipe);
                                    system("pause");
                                    exit(-1);
                                }
                                HWND hWnd = GetForegroundWindow();

                                std::string compilate_data;
                                if (avatarwithnm) {
                                    compilate_data = usernamenm + std::string(":") + passwordnm + std::string(":") + get_hwid();
                                }
                                else {
                                    compilate_data = user_name + std::string(":") + pass_word + std::string(":") + get_hwid();
                                }

                                const wchar_t* data = widen(compilate_data).c_str();

                                DWORD numBytesWritten = 0;
                                result = WriteFile(
                                    pipe,
                                    data,
                                    wcslen(data) * sizeof(wchar_t),
                                    &numBytesWritten,
                                    NULL
                                );

                                if (result) {
                               
                                }
                                else {
                                    wcout << "Failed to send data." << endl;
                                }

                                CloseHandle(pipe);

                                wcout << "" << endl;
                                active = false;
                            });
                        t1.join();

А теперь небольшое заключение: Я уже видел ник автора в сообщении ТС, но, честно говоря, не хочется даже смотреть.
Я не знаю, что этот человек делает с этим языком, но не дай бог, не дай бог, блять, ему ещё раз начать что-то на нём писать... Я уверен, что произойдёт что-то типа десяти казней египетских.
Но если ты решишь когда-нибудь исправиться, то вот тебе в двух словах список ошибок:
1) Ты очень сильно усложняешь код и его логику. Всё можно в сотни раз проще написать и получить такой-же результат, причём быстрее(по времени выполнения в рантайме).
2) Имена переменных и их количество. Зачем тебе столько? А как понимать, что имеется ввиду для переменной p? А почему из функции, где есть переменная с названием rtn(сокр. от return) она даже не возвращается никогда? enum и всё в таком духе придумали для слабых?
3) Если ты создаёшь что-то без функций, то это обычно структура(так перешло от Си, если не ошибаюсь)
4) Слишком большое выражение в if это плохо. Не делай так....
На этом хватит, у меня нервная система не выдерживает, да и мало у кого выдержит...(Фанфакт: 90% его кусков кода это буквальная копия кода со стаковерфлоу или каких-нибудь гайдов по плюсам)

Накидайте попкорнов(или как-нибудь уведомите любым иным способом, если данный считается за нарушение 2.12 или что-то в таком роде) если хотите, чтобы я сделал кодревью этой штуке и привёл функции в вид хотяб чуть-чуть получше, чтобы не хотелось сразу идти за мылом.
Насчёт того, что чувак продавал это за 2к: я бы даже за бесплатно такое не скинул. Этот код с натяжкой можно назвать кодом, больше похоже на то, что кто-то по клавиатуре постучал и вот получилось данное чудо.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
13 Янв 2023
Сообщения
127
Реакции[?]
16
Поинты[?]
1K
Судя по некоторым файлам это скорее си, чем плюсы, но хоть в мейне прослеживаются плюсы(лучшеб блять нет).

Я не знаю, что за приколист(он точно не приколист, это спойлер из конца ответа) это делал, но я сочувствую либо его знаниям и умению их применять, либо чувству юмора.
Этот лоадер максимально неподдерживаемый для обновлений. Чтобы его обновить и понять сломалось ли что-то, то надо походу заново переписать и потом заливать на хост и говорить мол юзерам потестите посмотрите работает или нет.

Самое смешное, как по мне, это main.cpp

Зачем тебе столько переменных здесь? Исключения, которые летят до main, скажут тебе спасибо!!!
main.cpp lines 63-86:
std::string timeleft;
bool loadactavatar = false;
bool doOnce = false;
bool isbanned = false;
bool server_online = true;
bool show_login = true;
bool show_register = false;
bool try_auth = false;
bool islogined = false;
bool loading = false;

bool avatarwithnm = false;

const char* sysname;
bool outdated = false;
const char* loadmessege = "Preparing...";
std::string clop = "";
char c;

std::string output;
std::string subcheck = "";

std::string usernamenm = "";
std::string passwordnm = "";

Функция в глобальном, блять, неймспейсе, нахуя? Нет, сделал бы namespace utils или __detaill или ещё какой-нибудь, но мусорить в общий неймспейс — наше любимое занятие.
C++:
std::string replaceAll(std::string subject, const std::string& search, const std::string& replace) {
    size_t pos = 0;
    while ((pos = subject.find(search, pos)) != std::string::npos) {
        subject.replace(pos, search.length(), replace);
        pos += replace.length();
    }
    return subject;
}

Здесь мне хочется спросить автора: наркотики самые дешёвые брал?
C++:
std::string Request(std::string URL) {
    HINTERNET interwebs = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET urlFile;
    std::string rtn;
    if (interwebs) {
        urlFile = InternetOpenUrlA(interwebs, URL.c_str(), NULL, NULL, NULL, NULL);
        if (urlFile) {
            char buffer[2000];
            DWORD bytesRead;
            do {
                InternetReadFile(urlFile, buffer, 2000, &bytesRead);
                rtn.append(buffer, bytesRead);
                memset(buffer, 0, 2000);
            } while (bytesRead);
            InternetCloseHandle(interwebs);
            InternetCloseHandle(urlFile);
            std::string p = replaceAll(rtn, "|n", "");
            p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
            return p;
        }
    }
    InternetCloseHandle(interwebs);
    std::string p = replaceAll(rtn, "|n", "");
    p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
    return p;
}
В выделенных строках вот что интересно: а ты собсна зачем копируешь rtn в p? Ибо rtn также пустой, как и был до этого, причём ещё операции какие-то проводишь. А зачем ты возвращаешь пустую строку? Тебе никто спасибо не скажет за копирование объекта лишний раз, особенно, если на сервер запрос не удался.
Доёб насчёт функции в общем неймспейсе остаётся.

Я не хочу смотреть код функции после прикола номер 3, но меня волнует вопрос с аттрибутами.
Нахуй тут юник поинтер? Хоть идея и хорошая, но не проще ли ручками удалить, а не городить такое?
Если очень хочется, то запили нормально свой тип и функтор поименуй.
C++:
__forceinline std::string get_hwid()
{
    std::string m_sResult;

    HANDLE m_hFile = CreateFileW(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (m_hFile == INVALID_HANDLE_VALUE)
        return { };

    std::unique_ptr< std::remove_pointer <HANDLE >::type, void(*)(HANDLE) > m_hDevice
    {
        m_hFile, [](HANDLE handle)
        {
            CloseHandle(handle);
        }
    };

    STORAGE_PROPERTY_QUERY m_PropertyQuery;
    m_PropertyQuery.PropertyId = StorageDeviceProperty;
    m_PropertyQuery.QueryType = PropertyStandardQuery;

    STORAGE_DESCRIPTOR_HEADER m_DescHeader;
    DWORD m_dwBytesReturned = 0;
    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        &m_DescHeader, sizeof(STORAGE_DESCRIPTOR_HEADER), &m_dwBytesReturned, NULL))
        return { };

    const DWORD m_dwOutBufferSize = m_DescHeader.Size;
    std::unique_ptr< BYTE[] > m_pOutBuffer{ new BYTE[m_dwOutBufferSize] { } };

    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        m_pOutBuffer.get(), m_dwOutBufferSize, &m_dwBytesReturned, NULL))
        return { };

    STORAGE_DEVICE_DESCRIPTOR* m_pDeviceDescriptor = reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(m_pOutBuffer.get());
    const DWORD m_dwSerialNumberOffset = m_pDeviceDescriptor->SerialNumberOffset;
    if (m_dwSerialNumberOffset == 0)
        return { };

    m_sResult = reinterpret_cast<const char*>(m_pOutBuffer.get() + m_dwSerialNumberOffset);
    m_sResult.erase(std::remove_if(m_sResult.begin(), m_sResult.end(), ::isspace), m_sResult.end());

    return m_sResult;
}
Автор, на кой хуй ты сюда поставил атрибут __forceinline? Ты блять это пишешь в файле с функцией main.(Ну, или скажем, что эта слишком большая функция, чтобы её хотелось инлайнить)

Для кого придумали структуры? Ты в одних файлах, вроде, пишешь на Си, в других уже это плюсы, но БЛЯТЬ....
C++:
class initWindow {
public:
    const char* window_title = "By SandFoxy With Love :)";
    ImVec2 window_size{ 630, 360 };

    DWORD window_flags = ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar;
} iw;
Может тебе не стоит заниматься разработкой чего-либо на си плюсах?


Я понимаю, что код функции ты украл со стаковерфлоу, да и о том, что такое void ты не знаешь, но может стоило погуглить и написать?
C++:
int crash() {
    BOOLEAN PrivilegeState = FALSE;
    ULONG ErrorResponse = 0;
    RtlAdjustPrivilege(19, TRUE, FALSE, &PrivilegeState);
    printf("Crashing...");
    NtRaiseHardError(STATUS_LOCK_NOT_GRANTED, 0, 0, NULL, 6, &ErrorResponse); // There are many Crash reasons
    printf("Crash failed!"); // The program would exit before this.
    return 0;
}

Я понимаю, что C++17 и выше используют только лохи, но там же уже всё написано. Может стоит быть лохом, но не писать вот такое?
C++:
bool isDirectoryExists(const char* filename)
{
    DWORD dwFileAttributes = GetFileAttributes(filename);
    if (dwFileAttributes == 0xFFFFFFFF)
        return false;
    return dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}

Выделенные(6-18) строки я развернул из одной строки.
А теперь к доёбам выше. Тут уже используешь неймспейсы, но название последней функции....
А нахер тебе функция crash int возвращает, если ты тут её значение даже не ловишь?
C++:
void checksecure() {
    auto baseAddress = (PVOID)ApiWrapper::GetModuleBaseAddress(NULL);
    CRCSecthion::StealsCRCSectionsInit(baseAddress);

    if (AntiDebug::Util::IsGuardHook()
        || AntiDebug::Util::IsNtApiCorrupted()
        || AntiDebug::Util::IsModuleHaveBP()
        || AntiDebug::ShellCode::IsDebugPort()
        || AntiDebug::ShellCode::IsDebugFlag()
        || AntiDebug::ShellCode::IsDebugObjectHandle()
        || AntiDebug::OverWriteSyscall::IsDebugFlagHooked()
        || AntiDebug::OverWriteSyscall::IsBadHideThread()
        || BlackListPool::IsHyperHideDebuggingProcess()
        || AntiDebug::Util::BuildNumberIsHooked()
        || CheckTestMode::CodeIntCheck()
        || CheckTestMode::IsStartedWithDisableDSE()
        || CheckTestMode::IsBcdLibraryBooleanAllowPrereleaseSignatures()
       ) {
        if (!isDirectoryExists("C:\\Zeruma"))
        {
            crash();
        }
    }
}

1) Нахер тебе loginfile, passwordfile названия для переменных, если ты код с интернета по первой ссылке тупо копируешь и всё? Это ведь не отражает сути переменных... или у тебя они содержат данные из переменных? Назвал бы login_filename, password_filename.
2) Зачем такая сложная структура кода? Ты как будто на ассемблере пишешь, я не знаю. Тут всё это можно уместить в функцию в 5-6 раз короче.
3) Зачем нам надо хранить какие-то важные ссылки в переменных какого-нибудь конфига? Не знаю, давайте лучше использовать каждый раз строковые литералы ведущие на сайт, чтобы людям было потом удобнее их каждый раз менять, если вдруг какие-нибудь обязанности auth.php перейдут например на handler.php. А, я забыл, у нас же лоадер не планируется обновляться без полного переписывания всего лоадера.(обновление может содержать обновление лишь дизайна, а вот весь переписать надо...)
C++:
void authnomenu() {
    HWND hWnd = GetForegroundWindow();
    bool doOnceKaban = false;
    std::string line;
    std::string loginfile = "C:\\Artic\\username.data";
    std::string passwordfile = "C:\\Artic\\password.data";

    std::ifstream in(loginfile);
    if (in.is_open())
    {
        while (getline(in, line))
        {
            if (!doOnce) {
                usernamenm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    doOnceKaban = false;

    std::ifstream in1(passwordfile);
    if (in1.is_open())
    {
        while (getline(in1, line))
        {
            if (!doOnce) {
                passwordnm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    //auto authnomenuereq = xorstr_("https://") + Globals::server_side.server + xorstr_("/") + Globals::server_side.forum_dir + xorstr_("auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid();

    output = Request(xorstr_("https://artic.over-nine.fun/auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid());

    if (output == xorstr_("success")) {
        std::string req = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&expire");

        //Avatar
        std::string avatargetlink = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&avatar");

        std::string avatarlink = Request(avatargetlink);

        LPCTSTR Url2 = _T(""), File2 = _T("C:\\Artic\\user.jpg");

        HRESULT hr3 = URLDownloadToFile(0, avatarlink.c_str(), File2, 0, 0);
        if (hr3 != S_OK) // ���� ����, ��������� �������, ��
        {
            HRESULT backupresolts = URLDownloadToFile(0, "http://artic.over-nine.fun/backavatar.jpg", File2, 0, 0);
            if (backupresolts != S_OK) // ���� ����, ��������� �������, ��
            {

            }
        }


        int avatattexture_width = 40;
        int avatattexture_height = 40;

        bool ret3 = LoadTextureFromFile("C:/Artic/user.jpg", &avatattexture, &avatattexture_width, &avatattexture_height);
        IM_ASSERT(ret3);
        loadactavatar = false;
        // Pon
        avatarwithnm = true;
        timeleft = Request(req);
        sysname = user_name;
        show_login = false;
        islogined = true;
    }
}

Ох, как же я люблю обмазываться сочными лямбдами на 500 строк, оу да, давай больше строк в одной лямбде, давай....
Название переменных, как всегда, — это ахуенно.
C++:
                        std::thread t1([&]()
                            {
                                fs::create_directory("C:\\Artic\\");
                                remove("C:\\Artic\\kernal.dll");
                                remove("C:\\Artic\\kernal.exe");
                                Sleep(2000);
                                HRESULT hr;
                                LPCTSTR Url = _T("https://artic.over-nine.fun/kernal.exe"), File = _T("C:\\Artic\\kernal.exe");
                                hr = URLDownloadToFile(0, Url, File, 0, 0);
                                ShellExecute(NULL, "open", "C:\\Artic\\kernal.exe", NULL, NULL, SW_RESTORE);

                                wcout << "Creating an instance of a named pipe..." << endl;
                                HANDLE pipe = CreateNamedPipe(
                                    "\\\\.\\pipe\\my_pipe",
                                    PIPE_ACCESS_OUTBOUND,
                                    PIPE_TYPE_BYTE,
                                    1,
                                    0,
                                    0,
                                    0,
                                    NULL
                                );

                                if (pipe == NULL || pipe == INVALID_HANDLE_VALUE) {
                                    system("pause");
                                    exit(-1);
                                }

                                BOOL result = ConnectNamedPipe(pipe, NULL);
                                if (!result) {
                                    CloseHandle(pipe);
                                    system("pause");
                                    exit(-1);
                                }
                                HWND hWnd = GetForegroundWindow();

                                std::string compilate_data;
                                if (avatarwithnm) {
                                    compilate_data = usernamenm + std::string(":") + passwordnm + std::string(":") + get_hwid();
                                }
                                else {
                                    compilate_data = user_name + std::string(":") + pass_word + std::string(":") + get_hwid();
                                }

                                const wchar_t* data = widen(compilate_data).c_str();

                                DWORD numBytesWritten = 0;
                                result = WriteFile(
                                    pipe,
                                    data,
                                    wcslen(data) * sizeof(wchar_t),
                                    &numBytesWritten,
                                    NULL
                                );

                                if (result) {
                             
                                }
                                else {
                                    wcout << "Failed to send data." << endl;
                                }

                                CloseHandle(pipe);

                                wcout << "" << endl;
                                active = false;
                            });
                        t1.join();

А теперь небольшое заключение: Я уже видел ник автора в сообщении ТС, но, честно говоря, не хочется даже смотреть.
Я не знаю, что этот человек делает с этим языком, но не дай бог, не дай бог, блять, ему ещё раз начать что-то на нём писать... Я уверен, что произойдёт что-то типа десяти казней египетских.
Но если ты решишь когда-нибудь исправиться, то вот тебе в двух словах список ошибок:
1) Ты очень сильно усложняешь код и его логику. Всё можно в сотни раз проще написать и получить такой-же результат, причём быстрее(по времени выполнения в рантайме).
2) Имена переменных и их количество. Зачем тебе столько? А как понимать, что имеется ввиду для переменной p? А почему из функции, где есть переменная с названием rtn(сокр. от return) она даже не возвращается никогда? enum и всё в таком духе придумали для слабых?
3) Если ты создаёшь что-то без функций, то это обычно структура(так перешло от Си, если не ошибаюсь)
4) Слишком большое выражение в if это плохо. Не делай так....
На этом хватит, у меня нервная система не выдерживает, да и мало у кого выдержит...(Фанфакт: 90% его кусков кода это буквальная копия кода со стаковерфлоу или каких-нибудь гайдов по плюсам)

Накидайте попкорнов(или как-нибудь уведомите любым иным способом, если данный считается за нарушение 2.12 или что-то в таком роде) если хотите, чтобы я сделал кодревью этой штуке и привёл функции в вид хотяб чуть-чуть получше, чтобы не хотелось сразу идти за мылом.
Насчёт того, что чувак продавал это за 2к: я бы даже за бесплатно такое не скинул. Этот код с натяжкой можно назвать кодом, больше похоже на то, что кто-то по клавиатуре постучал и вот получилось данное чудо.
брооо, лоадер я покупал и ничего с момента покупки с ним не делал, он остался в том виде в котором его купил, притензии не ко мне)
SandF0xy "Купитц лоадер c++ что би ни крикнули и не взлом на форум "
 
Начинающий
Статус
Оффлайн
Регистрация
3 Дек 2022
Сообщения
41
Реакции[?]
4
Поинты[?]
4K
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
514
Реакции[?]
495
Поинты[?]
84K
Судя по некоторым файлам это скорее си, чем плюсы, но хоть в мейне прослеживаются плюсы(лучшеб блять нет).

Я не знаю, что за приколист(он точно не приколист, это спойлер из конца ответа) это делал, но я сочувствую либо его знаниям и умению их применять, либо чувству юмора.
Этот лоадер максимально неподдерживаемый для обновлений. Чтобы его обновить и понять сломалось ли что-то, то надо походу заново переписать и потом заливать на хост и говорить мол юзерам потестите посмотрите работает или нет.

Самое смешное, как по мне, это main.cpp

Зачем тебе столько переменных здесь? Исключения, которые летят до main, скажут тебе спасибо!!!
main.cpp lines 63-86:
std::string timeleft;
bool loadactavatar = false;
bool doOnce = false;
bool isbanned = false;
bool server_online = true;
bool show_login = true;
bool show_register = false;
bool try_auth = false;
bool islogined = false;
bool loading = false;

bool avatarwithnm = false;

const char* sysname;
bool outdated = false;
const char* loadmessege = "Preparing...";
std::string clop = "";
char c;

std::string output;
std::string subcheck = "";

std::string usernamenm = "";
std::string passwordnm = "";

Функция в глобальном, блять, неймспейсе, нахуя? Нет, сделал бы namespace utils или __detaill или ещё какой-нибудь, но мусорить в общий неймспейс — наше любимое занятие.
C++:
std::string replaceAll(std::string subject, const std::string& search, const std::string& replace) {
    size_t pos = 0;
    while ((pos = subject.find(search, pos)) != std::string::npos) {
        subject.replace(pos, search.length(), replace);
        pos += replace.length();
    }
    return subject;
}

Здесь мне хочется спросить автора: наркотики самые дешёвые брал?
C++:
std::string Request(std::string URL) {
    HINTERNET interwebs = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET urlFile;
    std::string rtn;
    if (interwebs) {
        urlFile = InternetOpenUrlA(interwebs, URL.c_str(), NULL, NULL, NULL, NULL);
        if (urlFile) {
            char buffer[2000];
            DWORD bytesRead;
            do {
                InternetReadFile(urlFile, buffer, 2000, &bytesRead);
                rtn.append(buffer, bytesRead);
                memset(buffer, 0, 2000);
            } while (bytesRead);
            InternetCloseHandle(interwebs);
            InternetCloseHandle(urlFile);
            std::string p = replaceAll(rtn, "|n", "");
            p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
            return p;
        }
    }
    InternetCloseHandle(interwebs);
    std::string p = replaceAll(rtn, "|n", "");
    p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
    return p;
}
В выделенных строках вот что интересно: а ты собсна зачем копируешь rtn в p? Ибо rtn также пустой, как и был до этого, причём ещё операции какие-то проводишь. А зачем ты возвращаешь пустую строку? Тебе никто спасибо не скажет за копирование объекта лишний раз, особенно, если на сервер запрос не удался.
Доёб насчёт функции в общем неймспейсе остаётся.

Я не хочу смотреть код функции после прикола номер 3, но меня волнует вопрос с аттрибутами.
Нахуй тут юник поинтер? Хоть идея и хорошая, но не проще ли ручками удалить, а не городить такое?
Если очень хочется, то запили нормально свой тип и функтор поименуй.
C++:
__forceinline std::string get_hwid()
{
    std::string m_sResult;

    HANDLE m_hFile = CreateFileW(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (m_hFile == INVALID_HANDLE_VALUE)
        return { };

    std::unique_ptr< std::remove_pointer <HANDLE >::type, void(*)(HANDLE) > m_hDevice
    {
        m_hFile, [](HANDLE handle)
        {
            CloseHandle(handle);
        }
    };

    STORAGE_PROPERTY_QUERY m_PropertyQuery;
    m_PropertyQuery.PropertyId = StorageDeviceProperty;
    m_PropertyQuery.QueryType = PropertyStandardQuery;

    STORAGE_DESCRIPTOR_HEADER m_DescHeader;
    DWORD m_dwBytesReturned = 0;
    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        &m_DescHeader, sizeof(STORAGE_DESCRIPTOR_HEADER), &m_dwBytesReturned, NULL))
        return { };

    const DWORD m_dwOutBufferSize = m_DescHeader.Size;
    std::unique_ptr< BYTE[] > m_pOutBuffer{ new BYTE[m_dwOutBufferSize] { } };

    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        m_pOutBuffer.get(), m_dwOutBufferSize, &m_dwBytesReturned, NULL))
        return { };

    STORAGE_DEVICE_DESCRIPTOR* m_pDeviceDescriptor = reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(m_pOutBuffer.get());
    const DWORD m_dwSerialNumberOffset = m_pDeviceDescriptor->SerialNumberOffset;
    if (m_dwSerialNumberOffset == 0)
        return { };

    m_sResult = reinterpret_cast<const char*>(m_pOutBuffer.get() + m_dwSerialNumberOffset);
    m_sResult.erase(std::remove_if(m_sResult.begin(), m_sResult.end(), ::isspace), m_sResult.end());

    return m_sResult;
}
Автор, на кой хуй ты сюда поставил атрибут __forceinline? Ты блять это пишешь в файле с функцией main.(Ну, или скажем, что эта слишком большая функция, чтобы её хотелось инлайнить)

Для кого придумали структуры? Ты в одних файлах, вроде, пишешь на Си, в других уже это плюсы, но БЛЯТЬ....
C++:
class initWindow {
public:
    const char* window_title = "By SandFoxy With Love :)";
    ImVec2 window_size{ 630, 360 };

    DWORD window_flags = ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar;
} iw;
Может тебе не стоит заниматься разработкой чего-либо на си плюсах?


Я понимаю, что код функции ты украл со стаковерфлоу, да и о том, что такое void ты не знаешь, но может стоило погуглить и написать?
C++:
int crash() {
    BOOLEAN PrivilegeState = FALSE;
    ULONG ErrorResponse = 0;
    RtlAdjustPrivilege(19, TRUE, FALSE, &PrivilegeState);
    printf("Crashing...");
    NtRaiseHardError(STATUS_LOCK_NOT_GRANTED, 0, 0, NULL, 6, &ErrorResponse); // There are many Crash reasons
    printf("Crash failed!"); // The program would exit before this.
    return 0;
}

Я понимаю, что C++17 и выше используют только лохи, но там же уже всё написано. Может стоит быть лохом, но не писать вот такое?
C++:
bool isDirectoryExists(const char* filename)
{
    DWORD dwFileAttributes = GetFileAttributes(filename);
    if (dwFileAttributes == 0xFFFFFFFF)
        return false;
    return dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}

Выделенные(6-18) строки я развернул из одной строки.
А теперь к доёбам выше. Тут уже используешь неймспейсы, но название последней функции....
А нахер тебе функция crash int возвращает, если ты тут её значение даже не ловишь?
C++:
void checksecure() {
    auto baseAddress = (PVOID)ApiWrapper::GetModuleBaseAddress(NULL);
    CRCSecthion::StealsCRCSectionsInit(baseAddress);

    if (AntiDebug::Util::IsGuardHook()
        || AntiDebug::Util::IsNtApiCorrupted()
        || AntiDebug::Util::IsModuleHaveBP()
        || AntiDebug::ShellCode::IsDebugPort()
        || AntiDebug::ShellCode::IsDebugFlag()
        || AntiDebug::ShellCode::IsDebugObjectHandle()
        || AntiDebug::OverWriteSyscall::IsDebugFlagHooked()
        || AntiDebug::OverWriteSyscall::IsBadHideThread()
        || BlackListPool::IsHyperHideDebuggingProcess()
        || AntiDebug::Util::BuildNumberIsHooked()
        || CheckTestMode::CodeIntCheck()
        || CheckTestMode::IsStartedWithDisableDSE()
        || CheckTestMode::IsBcdLibraryBooleanAllowPrereleaseSignatures()
       ) {
        if (!isDirectoryExists("C:\\Zeruma"))
        {
            crash();
        }
    }
}

1) Нахер тебе loginfile, passwordfile названия для переменных, если ты код с интернета по первой ссылке тупо копируешь и всё? Это ведь не отражает сути переменных... или у тебя они содержат данные из переменных? Назвал бы login_filename, password_filename.
2) Зачем такая сложная структура кода? Ты как будто на ассемблере пишешь, я не знаю. Тут всё это можно уместить в функцию в 5-6 раз короче.
3) Зачем нам надо хранить какие-то важные ссылки в переменных какого-нибудь конфига? Не знаю, давайте лучше использовать каждый раз строковые литералы ведущие на сайт, чтобы людям было потом удобнее их каждый раз менять, если вдруг какие-нибудь обязанности auth.php перейдут например на handler.php. А, я забыл, у нас же лоадер не планируется обновляться без полного переписывания всего лоадера.(обновление может содержать обновление лишь дизайна, а вот весь переписать надо...)
C++:
void authnomenu() {
    HWND hWnd = GetForegroundWindow();
    bool doOnceKaban = false;
    std::string line;
    std::string loginfile = "C:\\Artic\\username.data";
    std::string passwordfile = "C:\\Artic\\password.data";

    std::ifstream in(loginfile);
    if (in.is_open())
    {
        while (getline(in, line))
        {
            if (!doOnce) {
                usernamenm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    doOnceKaban = false;

    std::ifstream in1(passwordfile);
    if (in1.is_open())
    {
        while (getline(in1, line))
        {
            if (!doOnce) {
                passwordnm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    //auto authnomenuereq = xorstr_("https://") + Globals::server_side.server + xorstr_("/") + Globals::server_side.forum_dir + xorstr_("auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid();

    output = Request(xorstr_("https://artic.over-nine.fun/auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid());

    if (output == xorstr_("success")) {
        std::string req = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&expire");

        //Avatar
        std::string avatargetlink = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&avatar");

        std::string avatarlink = Request(avatargetlink);

        LPCTSTR Url2 = _T(""), File2 = _T("C:\\Artic\\user.jpg");

        HRESULT hr3 = URLDownloadToFile(0, avatarlink.c_str(), File2, 0, 0);
        if (hr3 != S_OK) // ���� ����, ��������� �������, ��
        {
            HRESULT backupresolts = URLDownloadToFile(0, "http://artic.over-nine.fun/backavatar.jpg", File2, 0, 0);
            if (backupresolts != S_OK) // ���� ����, ��������� �������, ��
            {

            }
        }


        int avatattexture_width = 40;
        int avatattexture_height = 40;

        bool ret3 = LoadTextureFromFile("C:/Artic/user.jpg", &avatattexture, &avatattexture_width, &avatattexture_height);
        IM_ASSERT(ret3);
        loadactavatar = false;
        // Pon
        avatarwithnm = true;
        timeleft = Request(req);
        sysname = user_name;
        show_login = false;
        islogined = true;
    }
}

Ох, как же я люблю обмазываться сочными лямбдами на 500 строк, оу да, давай больше строк в одной лямбде, давай....
Название переменных, как всегда, — это ахуенно.
C++:
                        std::thread t1([&]()
                            {
                                fs::create_directory("C:\\Artic\\");
                                remove("C:\\Artic\\kernal.dll");
                                remove("C:\\Artic\\kernal.exe");
                                Sleep(2000);
                                HRESULT hr;
                                LPCTSTR Url = _T("https://artic.over-nine.fun/kernal.exe"), File = _T("C:\\Artic\\kernal.exe");
                                hr = URLDownloadToFile(0, Url, File, 0, 0);
                                ShellExecute(NULL, "open", "C:\\Artic\\kernal.exe", NULL, NULL, SW_RESTORE);

                                wcout << "Creating an instance of a named pipe..." << endl;
                                HANDLE pipe = CreateNamedPipe(
                                    "\\\\.\\pipe\\my_pipe",
                                    PIPE_ACCESS_OUTBOUND,
                                    PIPE_TYPE_BYTE,
                                    1,
                                    0,
                                    0,
                                    0,
                                    NULL
                                );

                                if (pipe == NULL || pipe == INVALID_HANDLE_VALUE) {
                                    system("pause");
                                    exit(-1);
                                }

                                BOOL result = ConnectNamedPipe(pipe, NULL);
                                if (!result) {
                                    CloseHandle(pipe);
                                    system("pause");
                                    exit(-1);
                                }
                                HWND hWnd = GetForegroundWindow();

                                std::string compilate_data;
                                if (avatarwithnm) {
                                    compilate_data = usernamenm + std::string(":") + passwordnm + std::string(":") + get_hwid();
                                }
                                else {
                                    compilate_data = user_name + std::string(":") + pass_word + std::string(":") + get_hwid();
                                }

                                const wchar_t* data = widen(compilate_data).c_str();

                                DWORD numBytesWritten = 0;
                                result = WriteFile(
                                    pipe,
                                    data,
                                    wcslen(data) * sizeof(wchar_t),
                                    &numBytesWritten,
                                    NULL
                                );

                                if (result) {
                             
                                }
                                else {
                                    wcout << "Failed to send data." << endl;
                                }

                                CloseHandle(pipe);

                                wcout << "" << endl;
                                active = false;
                            });
                        t1.join();

А теперь небольшое заключение: Я уже видел ник автора в сообщении ТС, но, честно говоря, не хочется даже смотреть.
Я не знаю, что этот человек делает с этим языком, но не дай бог, не дай бог, блять, ему ещё раз начать что-то на нём писать... Я уверен, что произойдёт что-то типа десяти казней египетских.
Но если ты решишь когда-нибудь исправиться, то вот тебе в двух словах список ошибок:
1) Ты очень сильно усложняешь код и его логику. Всё можно в сотни раз проще написать и получить такой-же результат, причём быстрее(по времени выполнения в рантайме).
2) Имена переменных и их количество. Зачем тебе столько? А как понимать, что имеется ввиду для переменной p? А почему из функции, где есть переменная с названием rtn(сокр. от return) она даже не возвращается никогда? enum и всё в таком духе придумали для слабых?
3) Если ты создаёшь что-то без функций, то это обычно структура(так перешло от Си, если не ошибаюсь)
4) Слишком большое выражение в if это плохо. Не делай так....
На этом хватит, у меня нервная система не выдерживает, да и мало у кого выдержит...(Фанфакт: 90% его кусков кода это буквальная копия кода со стаковерфлоу или каких-нибудь гайдов по плюсам)

Накидайте попкорнов(или как-нибудь уведомите любым иным способом, если данный считается за нарушение 2.12 или что-то в таком роде) если хотите, чтобы я сделал кодревью этой штуке и привёл функции в вид хотяб чуть-чуть получше, чтобы не хотелось сразу идти за мылом.
Насчёт того, что чувак продавал это за 2к: я бы даже за бесплатно такое не скинул. Этот код с натяжкой можно назвать кодом, больше похоже на то, что кто-то по клавиатуре постучал и вот получилось данное чудо.
Насчет прикола номер 4:

я более чем уверен что владелец который продавал сие чудо даже знать не знает чё такое умные указатели, какие-то бля лямбда функции и всё подобное что присутствует в "его" коде.
как человек пишущий такое дерьмище а не код может быть знаком с подобными "новшествами", максимум из того что продавец тут создал так это наихуёвейшие объявления миллионов глобальных стрингов, булов, интов и всего подобного которые он даже почему-то не способен запаковать в проклятый неймспейс. про знания ооп и его использование в этом коде - я лучше помолчу.

надеюсь продавец возьмётся за голову и перестанет пихать людям подобную абсурдную хуйню, да ещё и за деньги)


брооо, лоадер я покупал и ничего с момента покупки с ним не делал, он остался в том виде в котором его купил, притензии не ко мне)
Я не знаю, что за приколист(он точно не приколист, это спойлер из конца ответа) это делал, но я сочувствую либо его знаниям и умению их применять, либо чувству юмора.
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
Судя по некоторым файлам это скорее си, чем плюсы, но хоть в мейне прослеживаются плюсы(лучшеб блять нет).

Я не знаю, что за приколист(он точно не приколист, это спойлер из конца ответа) это делал, но я сочувствую либо его знаниям и умению их применять, либо чувству юмора.
Этот лоадер максимально неподдерживаемый для обновлений. Чтобы его обновить и понять сломалось ли что-то, то надо походу заново переписать и потом заливать на хост и говорить мол юзерам потестите посмотрите работает или нет.

Самое смешное, как по мне, это main.cpp

Зачем тебе столько переменных здесь? Исключения, которые летят до main, скажут тебе спасибо!!!
main.cpp lines 63-86:
std::string timeleft;
bool loadactavatar = false;
bool doOnce = false;
bool isbanned = false;
bool server_online = true;
bool show_login = true;
bool show_register = false;
bool try_auth = false;
bool islogined = false;
bool loading = false;

bool avatarwithnm = false;

const char* sysname;
bool outdated = false;
const char* loadmessege = "Preparing...";
std::string clop = "";
char c;

std::string output;
std::string subcheck = "";

std::string usernamenm = "";
std::string passwordnm = "";

Функция в глобальном, блять, неймспейсе, нахуя? Нет, сделал бы namespace utils или __detaill или ещё какой-нибудь, но мусорить в общий неймспейс — наше любимое занятие.
C++:
std::string replaceAll(std::string subject, const std::string& search, const std::string& replace) {
    size_t pos = 0;
    while ((pos = subject.find(search, pos)) != std::string::npos) {
        subject.replace(pos, search.length(), replace);
        pos += replace.length();
    }
    return subject;
}

Здесь мне хочется спросить автора: наркотики самые дешёвые брал?
C++:
std::string Request(std::string URL) {
    HINTERNET interwebs = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET urlFile;
    std::string rtn;
    if (interwebs) {
        urlFile = InternetOpenUrlA(interwebs, URL.c_str(), NULL, NULL, NULL, NULL);
        if (urlFile) {
            char buffer[2000];
            DWORD bytesRead;
            do {
                InternetReadFile(urlFile, buffer, 2000, &bytesRead);
                rtn.append(buffer, bytesRead);
                memset(buffer, 0, 2000);
            } while (bytesRead);
            InternetCloseHandle(interwebs);
            InternetCloseHandle(urlFile);
            std::string p = replaceAll(rtn, "|n", "");
            p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
            return p;
        }
    }
    InternetCloseHandle(interwebs);
    std::string p = replaceAll(rtn, "|n", "");
    p.erase(std::remove_if(p.begin(), p.end(), ::isspace), p.end());
    return p;
}
В выделенных строках вот что интересно: а ты собсна зачем копируешь rtn в p? Ибо rtn также пустой, как и был до этого, причём ещё операции какие-то проводишь. А зачем ты возвращаешь пустую строку? Тебе никто спасибо не скажет за копирование объекта лишний раз, особенно, если на сервер запрос не удался.
Доёб насчёт функции в общем неймспейсе остаётся.

Я не хочу смотреть код функции после прикола номер 3, но меня волнует вопрос с аттрибутами.
Нахуй тут юник поинтер? Хоть идея и хорошая, но не проще ли ручками удалить, а не городить такое?
Если очень хочется, то запили нормально свой тип и функтор поименуй.
C++:
__forceinline std::string get_hwid()
{
    std::string m_sResult;

    HANDLE m_hFile = CreateFileW(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    if (m_hFile == INVALID_HANDLE_VALUE)
        return { };

    std::unique_ptr< std::remove_pointer <HANDLE >::type, void(*)(HANDLE) > m_hDevice
    {
        m_hFile, [](HANDLE handle)
        {
            CloseHandle(handle);
        }
    };

    STORAGE_PROPERTY_QUERY m_PropertyQuery;
    m_PropertyQuery.PropertyId = StorageDeviceProperty;
    m_PropertyQuery.QueryType = PropertyStandardQuery;

    STORAGE_DESCRIPTOR_HEADER m_DescHeader;
    DWORD m_dwBytesReturned = 0;
    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        &m_DescHeader, sizeof(STORAGE_DESCRIPTOR_HEADER), &m_dwBytesReturned, NULL))
        return { };

    const DWORD m_dwOutBufferSize = m_DescHeader.Size;
    std::unique_ptr< BYTE[] > m_pOutBuffer{ new BYTE[m_dwOutBufferSize] { } };

    if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
        m_pOutBuffer.get(), m_dwOutBufferSize, &m_dwBytesReturned, NULL))
        return { };

    STORAGE_DEVICE_DESCRIPTOR* m_pDeviceDescriptor = reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(m_pOutBuffer.get());
    const DWORD m_dwSerialNumberOffset = m_pDeviceDescriptor->SerialNumberOffset;
    if (m_dwSerialNumberOffset == 0)
        return { };

    m_sResult = reinterpret_cast<const char*>(m_pOutBuffer.get() + m_dwSerialNumberOffset);
    m_sResult.erase(std::remove_if(m_sResult.begin(), m_sResult.end(), ::isspace), m_sResult.end());

    return m_sResult;
}
Автор, на кой хуй ты сюда поставил атрибут __forceinline? Ты блять это пишешь в файле с функцией main.(Ну, или скажем, что эта слишком большая функция, чтобы её хотелось инлайнить)

Для кого придумали структуры? Ты в одних файлах, вроде, пишешь на Си, в других уже это плюсы, но БЛЯТЬ....
C++:
class initWindow {
public:
    const char* window_title = "By SandFoxy With Love :)";
    ImVec2 window_size{ 630, 360 };

    DWORD window_flags = ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar;
} iw;
Может тебе не стоит заниматься разработкой чего-либо на си плюсах?


Я понимаю, что код функции ты украл со стаковерфлоу, да и о том, что такое void ты не знаешь, но может стоило погуглить и написать?
C++:
int crash() {
    BOOLEAN PrivilegeState = FALSE;
    ULONG ErrorResponse = 0;
    RtlAdjustPrivilege(19, TRUE, FALSE, &PrivilegeState);
    printf("Crashing...");
    NtRaiseHardError(STATUS_LOCK_NOT_GRANTED, 0, 0, NULL, 6, &ErrorResponse); // There are many Crash reasons
    printf("Crash failed!"); // The program would exit before this.
    return 0;
}

Я понимаю, что C++17 и выше используют только лохи, но там же уже всё написано. Может стоит быть лохом, но не писать вот такое?
C++:
bool isDirectoryExists(const char* filename)
{
    DWORD dwFileAttributes = GetFileAttributes(filename);
    if (dwFileAttributes == 0xFFFFFFFF)
        return false;
    return dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
}

Выделенные(6-18) строки я развернул из одной строки.
А теперь к доёбам выше. Тут уже используешь неймспейсы, но название последней функции....
А нахер тебе функция crash int возвращает, если ты тут её значение даже не ловишь?
C++:
void checksecure() {
    auto baseAddress = (PVOID)ApiWrapper::GetModuleBaseAddress(NULL);
    CRCSecthion::StealsCRCSectionsInit(baseAddress);

    if (AntiDebug::Util::IsGuardHook()
        || AntiDebug::Util::IsNtApiCorrupted()
        || AntiDebug::Util::IsModuleHaveBP()
        || AntiDebug::ShellCode::IsDebugPort()
        || AntiDebug::ShellCode::IsDebugFlag()
        || AntiDebug::ShellCode::IsDebugObjectHandle()
        || AntiDebug::OverWriteSyscall::IsDebugFlagHooked()
        || AntiDebug::OverWriteSyscall::IsBadHideThread()
        || BlackListPool::IsHyperHideDebuggingProcess()
        || AntiDebug::Util::BuildNumberIsHooked()
        || CheckTestMode::CodeIntCheck()
        || CheckTestMode::IsStartedWithDisableDSE()
        || CheckTestMode::IsBcdLibraryBooleanAllowPrereleaseSignatures()
       ) {
        if (!isDirectoryExists("C:\\Zeruma"))
        {
            crash();
        }
    }
}

1) Нахер тебе loginfile, passwordfile названия для переменных, если ты код с интернета по первой ссылке тупо копируешь и всё? Это ведь не отражает сути переменных... или у тебя они содержат данные из переменных? Назвал бы login_filename, password_filename.
2) Зачем такая сложная структура кода? Ты как будто на ассемблере пишешь, я не знаю. Тут всё это можно уместить в функцию в 5-6 раз короче.
3) Зачем нам надо хранить какие-то важные ссылки в переменных какого-нибудь конфига? Не знаю, давайте лучше использовать каждый раз строковые литералы ведущие на сайт, чтобы людям было потом удобнее их каждый раз менять, если вдруг какие-нибудь обязанности auth.php перейдут например на handler.php. А, я забыл, у нас же лоадер не планируется обновляться без полного переписывания всего лоадера.(обновление может содержать обновление лишь дизайна, а вот весь переписать надо...)
C++:
void authnomenu() {
    HWND hWnd = GetForegroundWindow();
    bool doOnceKaban = false;
    std::string line;
    std::string loginfile = "C:\\Artic\\username.data";
    std::string passwordfile = "C:\\Artic\\password.data";

    std::ifstream in(loginfile);
    if (in.is_open())
    {
        while (getline(in, line))
        {
            if (!doOnce) {
                usernamenm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    doOnceKaban = false;

    std::ifstream in1(passwordfile);
    if (in1.is_open())
    {
        while (getline(in1, line))
        {
            if (!doOnce) {
                passwordnm = line;
                doOnceKaban = true;
            }
        }
    }
    in.close();

    //auto authnomenuereq = xorstr_("https://") + Globals::server_side.server + xorstr_("/") + Globals::server_side.forum_dir + xorstr_("auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid();

    output = Request(xorstr_("https://artic.over-nine.fun/auth.php?username=") + usernamenm + xorstr_("&password=") + passwordnm + xorstr_("&hwid=") + get_hwid());

    if (output == xorstr_("success")) {
        std::string req = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&expire");

        //Avatar
        std::string avatargetlink = std::string("https://artic.over-nine.fun/auth.php?username=") + usernamenm + std::string("&avatar");

        std::string avatarlink = Request(avatargetlink);

        LPCTSTR Url2 = _T(""), File2 = _T("C:\\Artic\\user.jpg");

        HRESULT hr3 = URLDownloadToFile(0, avatarlink.c_str(), File2, 0, 0);
        if (hr3 != S_OK) // ���� ����, ��������� �������, ��
        {
            HRESULT backupresolts = URLDownloadToFile(0, "http://artic.over-nine.fun/backavatar.jpg", File2, 0, 0);
            if (backupresolts != S_OK) // ���� ����, ��������� �������, ��
            {

            }
        }


        int avatattexture_width = 40;
        int avatattexture_height = 40;

        bool ret3 = LoadTextureFromFile("C:/Artic/user.jpg", &avatattexture, &avatattexture_width, &avatattexture_height);
        IM_ASSERT(ret3);
        loadactavatar = false;
        // Pon
        avatarwithnm = true;
        timeleft = Request(req);
        sysname = user_name;
        show_login = false;
        islogined = true;
    }
}

Ох, как же я люблю обмазываться сочными лямбдами на 500 строк, оу да, давай больше строк в одной лямбде, давай....
Название переменных, как всегда, — это ахуенно.
C++:
                        std::thread t1([&]()
                            {
                                fs::create_directory("C:\\Artic\\");
                                remove("C:\\Artic\\kernal.dll");
                                remove("C:\\Artic\\kernal.exe");
                                Sleep(2000);
                                HRESULT hr;
                                LPCTSTR Url = _T("https://artic.over-nine.fun/kernal.exe"), File = _T("C:\\Artic\\kernal.exe");
                                hr = URLDownloadToFile(0, Url, File, 0, 0);
                                ShellExecute(NULL, "open", "C:\\Artic\\kernal.exe", NULL, NULL, SW_RESTORE);

                                wcout << "Creating an instance of a named pipe..." << endl;
                                HANDLE pipe = CreateNamedPipe(
                                    "\\\\.\\pipe\\my_pipe",
                                    PIPE_ACCESS_OUTBOUND,
                                    PIPE_TYPE_BYTE,
                                    1,
                                    0,
                                    0,
                                    0,
                                    NULL
                                );

                                if (pipe == NULL || pipe == INVALID_HANDLE_VALUE) {
                                    system("pause");
                                    exit(-1);
                                }

                                BOOL result = ConnectNamedPipe(pipe, NULL);
                                if (!result) {
                                    CloseHandle(pipe);
                                    system("pause");
                                    exit(-1);
                                }
                                HWND hWnd = GetForegroundWindow();

                                std::string compilate_data;
                                if (avatarwithnm) {
                                    compilate_data = usernamenm + std::string(":") + passwordnm + std::string(":") + get_hwid();
                                }
                                else {
                                    compilate_data = user_name + std::string(":") + pass_word + std::string(":") + get_hwid();
                                }

                                const wchar_t* data = widen(compilate_data).c_str();

                                DWORD numBytesWritten = 0;
                                result = WriteFile(
                                    pipe,
                                    data,
                                    wcslen(data) * sizeof(wchar_t),
                                    &numBytesWritten,
                                    NULL
                                );

                                if (result) {
                              
                                }
                                else {
                                    wcout << "Failed to send data." << endl;
                                }

                                CloseHandle(pipe);

                                wcout << "" << endl;
                                active = false;
                            });
                        t1.join();

А теперь небольшое заключение: Я уже видел ник автора в сообщении ТС, но, честно говоря, не хочется даже смотреть.
Я не знаю, что этот человек делает с этим языком, но не дай бог, не дай бог, блять, ему ещё раз начать что-то на нём писать... Я уверен, что произойдёт что-то типа десяти казней египетских.
Но если ты решишь когда-нибудь исправиться, то вот тебе в двух словах список ошибок:
1) Ты очень сильно усложняешь код и его логику. Всё можно в сотни раз проще написать и получить такой-же результат, причём быстрее(по времени выполнения в рантайме).
2) Имена переменных и их количество. Зачем тебе столько? А как понимать, что имеется ввиду для переменной p? А почему из функции, где есть переменная с названием rtn(сокр. от return) она даже не возвращается никогда? enum и всё в таком духе придумали для слабых?
3) Если ты создаёшь что-то без функций, то это обычно структура(так перешло от Си, если не ошибаюсь)
4) Слишком большое выражение в if это плохо. Не делай так....
На этом хватит, у меня нервная система не выдерживает, да и мало у кого выдержит...(Фанфакт: 90% его кусков кода это буквальная копия кода со стаковерфлоу или каких-нибудь гайдов по плюсам)

Накидайте попкорнов(или как-нибудь уведомите любым иным способом, если данный считается за нарушение 2.12 или что-то в таком роде) если хотите, чтобы я сделал кодревью этой штуке и привёл функции в вид хотяб чуть-чуть получше, чтобы не хотелось сразу идти за мылом.
Насчёт того, что чувак продавал это за 2к: я бы даже за бесплатно такое не скинул. Этот код с натяжкой можно назвать кодом, больше похоже на то, что кто-то по клавиатуре постучал и вот получилось данное чудо.
Как-то слишком много ты написал из-за очередного куска "кода", еле-еле напащенного человеком без какого-либо понимания ООП, ФП и программинга в принципе
Ей богу, не трать время на такое, они необучаемые.
 
Забаненный
Статус
Оффлайн
Регистрация
14 Мар 2022
Сообщения
40
Реакции[?]
4
Поинты[?]
4K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу