• Привет !

    На форуме есть зеркало в ТОРе:rusfwz3cukdej7do.onion

    ЗЕРКАЛА ФОРУМА:

    ru-sfera.org

    ru-sfera.online

    Обратная связь:

    Email:[email protected]

    Jabber:[email protected]

    Всего доброго !

Задачка не пишем HVNC 2.0 | восстановливаем код по стате (1 Viewer)

Кто просматривает этот контент: "Тема" (Всего пользователей: 0; Гостей: 1)

craftcat

Житель форума
Форумчанин
Регистрация
11.02.2021
Сообщения
29
появилось желание сделать приблуду которая мне хочется, а именно revershell
но как бы я не старался, универсального избавления от кракозябр не было.
вообще не было. или может я тупой, но не было. всегда получаю зуботычины.

не знаю я винапи но честа изучаю, давай посмотрим че тут делается

мне давали расспечатку стати в хтмл (спасибо тебе, хоманатор!), я выдерну из нее картинки,
статья была текстовая кода в ней практически не было

но смысл в ней был такой:

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




но мне оно не интересно, главное запустить cmd.exe и делать с него скриншоты и отправлят скриншоты ко мне на сервер
я кодил и накодил вот шо:


C++:
#define UNICODE
#define _UNICODE

#include <fcntl.h>
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>

const WCHAR CLSNAME[] = L"spyserver";
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp);

//Сначала объявите структуру, используемую для связи. Он передает идентификатор процесса в процедуру перечисления и возвращает дескриптор окна назад.
struct EnumData {
    DWORD dwProcessId;
    HWND hWnd;
};

//Далее нам нужна процедура обратного вызова, которая извлекает идентификатор процесса (GetWindowThreadProcessId) для любого заданного окна и сравнивает его с тем, который мы ищут:
BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam) {
    // Retrieve storage location for communication data
    EnumData& ed = *(EnumData*)lParam;
    DWORD dwProcessId = 0x0;
    // Query process ID for hWnd
    GetWindowThreadProcessId(hWnd, &dwProcessId);
    // Apply filter - if you want to implement additional restrictions,
    // this is the place to do so.
    if (ed.dwProcessId == dwProcessId) {
        // Found a window matching the process ID
        ed.hWnd = hWnd;
        // Report success
        SetLastError(ERROR_SUCCESS);
        // Stop enumeration
        return FALSE;
    }
    // Continue enumeration
    return TRUE;
}

//Остается публичный интерфейс. Он заполняет структуру, используемую для связи с идентификатором процесса, запускает перечисление окон верхнего уровня и возвращает дескриптор окна. Требуются вызовы SetLastError и GetLastError, так как EnumWindows возвращает FALSE для ошибки и успеха в этом случае:

// Main entry
HWND FindWindowFromProcessId(DWORD dwProcessId) {
    EnumData ed = { dwProcessId };
    if (!EnumWindows(EnumProc, (LPARAM)&ed) &&
        (GetLastError() == ERROR_SUCCESS)) {
        return ed.hWnd;
    }
    return NULL;
}

SIZE_T GetProcessIdByName(LPCWSTR pszExeFile)
{
    SIZE_T nProcessID = 0;
    PROCESSENTRY32W pe = { sizeof(PROCESSENTRY32W) };
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
    if (hSnapshot != INVALID_HANDLE_VALUE)
    {
        if (Process32FirstW(hSnapshot, &pe))
        {
            while (Process32NextW(hSnapshot, &pe))
            {
                if (lstrcmpiW(pszExeFile, pe.szExeFile) == 0)
                {
                    nProcessID = pe.th32ProcessID;
                    break;
                }
            }
        }
        CloseHandle(hSnapshot);
    }
    return nProcessID;
}

// Helper method for convenience
HWND FindWindowFromProcess(HANDLE hProcess) {
    return FindWindowFromProcessId(GetProcessId(hProcess));
}

int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR     lpCmdLine,
    int       nShowCmd
) {

    HINSTANCE hInst = GetModuleHandle(NULL);

    WNDCLASSEX wc = { };
    MSG msg;
    HWND hwnd;

    wc.cbSize = sizeof(wc);
    wc.style = 0;
    wc.lpfnWndProc = winproc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInst;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = CLSNAME;
    wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    RegisterClassEx(&wc);

    hwnd = CreateWindowEx(WS_EX_LEFT,
        CLSNAME,
        NULL,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInst,
        NULL);

    ShowWindow(hwnd, 0);
    UpdateWindow(hwnd);
    
    STARTUPINFOW si;
    memset(&si, 0, sizeof si);
    si.cb = sizeof(si);

    PROCESS_INFORMATION pi;
    memset(&pi, 0, sizeof pi);

    wchar_t czCommandLine[] = L"C:\\Windows\\System32\\cmd.exe";

    if (CreateProcessW(NULL, czCommandLine, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
    {
        HWND hWnd = NULL;
        do {
            hWnd = FindWindowFromProcess(pi.hProcess);
            ShowWindow(hWnd, 0);
        } while (!IsWindow(hWnd));
        SetParent(hWnd, hwnd);
        ShowWindow(hWnd, 1);
        ShowWindow(hwnd, 1);

        int x, y;
        RECT rect = { 0 };
        POINT ptDiff;
        GetWindowRect(hWnd, &rect);
        ptDiff.x = (rect.right - rect.left) - rect.right;
        ptDiff.y = (rect.bottom - rect.top) - rect.bottom;
        SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE);
        MoveWindow(hwnd, rect.left, rect.top, rect.right + ptDiff.x, rect.bottom + ptDiff.y, TRUE);
    }

    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    return DefWindowProc(hwnd, wm, wp, lp);
}
Screenshot_32.png

Вот шо получилося. Таперь интересна будет узнать у вас чи шо с ним делать. Так что бы вводить
текст, делать с нево скриншоты. Буду рассказывать как у меня получается. А вы пишите свои ответы
если будет интересно продолжу выкладывать в теме че нибудь
 

craftcat

Житель форума
Форумчанин
Регистрация
11.02.2021
Сообщения
29
Вот интересна очень, у меня доделки идут, как мне убрат рамки у cmd, но шо бы осталось полоса прокрутки, а еще что бы дорастянулась. Как закончу перфекцианизмам заниматься, буду делать скриншоты
 

craftcat

Житель форума
Форумчанин
Регистрация
11.02.2021
Сообщения
29
Если у ково есть 10ка проверте пожалуйста
 

craftcat

Житель форума
Форумчанин
Регистрация
11.02.2021
Сообщения
29
А иминованые каналы (named pipes) могут в локальной сети работат?
 

craftcat

Житель форума
Форумчанин
Регистрация
11.02.2021
Сообщения
29
Че та я крч соснул, ни spy++ ни windowzer от манхантера, ни inspect найти мне в cmd.exe куда сслат SendMessage не могут.
Хотя буду гуглит
 
Последнее редактирование:

craftcat

Житель форума
Форумчанин
Регистрация
11.02.2021
Сообщения
29
ничего, еще что нибудь придумаю.