• XSS.stack #1 – первый литературный журнал от юзеров форума

[HELP] browser HVNC

xChimera

Malware...
Пользователь
Регистрация
19.08.2024
Сообщения
778
Реакции
552
Гарант сделки
2
Депозит
0.0282
В общем делаю хвнц
Если копирую юзердату - фродит, в гугл не пускает
Если копирую профиль - гуд
Но появляется проблема - юзер при открытии браузера не видит вообще ничего (тк окошко создается в той же инстанции браузера)
Использую SetParent и невидимую форму
 
покажи как ты запускаешь хром
edit: я не сразу понял, о чем ты. по идее, так не должно быть если ты создаешь инстанс хрома с аргом "--profile-directory=abs_path".
ну или как костыль некий, добавить в шорткат арг --new-tab. чтобы всегда когда юзер открывает хром по ярлыку, инстанс открывался в новом табе.
 
Последнее редактирование:
покажи как ты запускаешь хром
edit: я не сразу понял, о чем ты. по идее, так не должно быть если ты создаешь инстанс хрома с аргом "--profile-directory=abs_path".
ну или как костыль некий, добавить в шорткат арг --new-tab. чтобы всегда когда юзер открывает хром по ярлыку, инстанс открывался в новом табе.
Как раз таки тестирую разные профили, все равно создается в одном древе процессов - так как user data таже
 
Собственно сделал чтобы юзер мог открыть инстанцию браузера

Использую SetParent, перебор окошек через виндовс хук на CREATE

скриншот делаю через PrintWindow(hidden_form, PW_RENDERFULLCONTENT)

на win server 2022 Работает, на 2019 скрин тупо темный...

Если ставлю кординаты невидимого окна не -10000 -10000 а 0 0 то все ок

В чем может быть проблема?
 
const int parentWidth = 1920;
const int parentHeight = 1080;

HIDDEN_WINDOW = CreateWindowExW(
WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE, L"STATIC", L"",
WS_POPUP, 0, 0, parentWidth, parentHeight, 0, 0, 0, 0);

L"\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" --profile-directory=TEST_PROFILE --disable-notifications --disable-gpu --allow-file-access-from-files --mute-audio --window-position=0,0 --window-size=1920,1080";
Вот так запускаю

Код:
void TakeScreenshot(HWND hWnd, const WCHAR* filename)
{
    if (!IsWindow(hWnd))
    {
        printf("Error: Invalid window handle\n");
        return;
    }

    WCHAR title[256];
    GetWindowTextW(hWnd, title, 256);
    wprintf(L"Window title: %s\n", title);

    RECT windowRect;
    GetWindowRect(hWnd, &windowRect);
    printf("Window position: %ld, %ld, Size: %ld x %ld\n", windowRect.left, windowRect.top, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);

    BOOL ret = ShowWindow(hWnd, SW_SHOW);

    printf("ShowWindows -> %d, GLE: %d\n", ret, GetLastError());

    Sleep(1000);

    RECT rect;
    GetClientRect(hWnd, &rect);
    int width = rect.right - rect.left;
    int height = rect.bottom - rect.top;
    printf("Client dimensions: %d x %d\n", width, height);

    if (width <= 0 || height <= 0)
    {
        printf("Error: Invalid client dimensions\n");
        return;
    }

    HDC screenDC = GetDC(0);
    HDC memDC = CreateCompatibleDC(screenDC);
    HBITMAP bmp = CreateCompatibleBitmap(screenDC, width, height);
    HGDIOBJ oldBmp = SelectObject(memDC, bmp);

    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, 0);

    bool sended = false;

    while(1)
    {
        BOOL result = PrintWindow(hWnd, memDC, PW_RENDERFULLCONTENT);
        printf("PrintWindow result: %d\n", result);


        Bitmap* bmpGdi = Bitmap::FromHBITMAP(bmp, 0);
        CLSID clsid;
        CLSIDFromString(L"{557CF406-1A04-11D3-9A73-0000F81EF32E}", &clsid);
        bmpGdi->Save(filename, &clsid, 0);

        delete bmpGdi;

        Sleep(1000);
        
    }

    SelectObject(memDC, oldBmp);
    DeleteDC(memDC);
    ReleaseDC(0, screenDC);

    DeleteObject(bmp);
    GdiplusShutdown(gdiplusToken);
    printf("Screenshot saved to %S\n", filename);
    
}


TakeScreenshot(HIDDEN_WINDOW, L"screenshot.png");
 
Пожалуйста, обратите внимание, что пользователь заблокирован
const int parentWidth = 1920;
const int parentHeight = 1080;

HIDDEN_WINDOW = CreateWindowExW(
WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE, L"STATIC", L"",
WS_POPUP, 0, 0, parentWidth, parentHeight, 0, 0, 0, 0);

L"\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" --profile-directory=TEST_PROFILE --disable-notifications --disable-gpu --allow-file-access-from-files --mute-audio --window-position=0,0 --window-size=1920,1080";
Вот так запускаю

Код:
void TakeScreenshot(HWND hWnd, const WCHAR* filename)
{
    if (!IsWindow(hWnd))
    {
        printf("Error: Invalid window handle\n");
        return;
    }

    WCHAR title[256];
    GetWindowTextW(hWnd, title, 256);
    wprintf(L"Window title: %s\n", title);

    RECT windowRect;
    GetWindowRect(hWnd, &windowRect);
    printf("Window position: %ld, %ld, Size: %ld x %ld\n", windowRect.left, windowRect.top, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);

    BOOL ret = ShowWindow(hWnd, SW_SHOW);

    printf("ShowWindows -> %d, GLE: %d\n", ret, GetLastError());

    Sleep(1000);

    RECT rect;
    GetClientRect(hWnd, &rect);
    int width = rect.right - rect.left;
    int height = rect.bottom - rect.top;
    printf("Client dimensions: %d x %d\n", width, height);

    if (width <= 0 || height <= 0)
    {
        printf("Error: Invalid client dimensions\n");
        return;
    }

    HDC screenDC = GetDC(0);
    HDC memDC = CreateCompatibleDC(screenDC);
    HBITMAP bmp = CreateCompatibleBitmap(screenDC, width, height);
    HGDIOBJ oldBmp = SelectObject(memDC, bmp);

    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, 0);

    bool sended = false;

    while(1)
    {
        BOOL result = PrintWindow(hWnd, memDC, PW_RENDERFULLCONTENT);
        printf("PrintWindow result: %d\n", result);


        Bitmap* bmpGdi = Bitmap::FromHBITMAP(bmp, 0);
        CLSID clsid;
        CLSIDFromString(L"{557CF406-1A04-11D3-9A73-0000F81EF32E}", &clsid);
        bmpGdi->Save(filename, &clsid, 0);

        delete bmpGdi;

        Sleep(1000);
       
    }

    SelectObject(memDC, oldBmp);
    DeleteDC(memDC);
    ReleaseDC(0, screenDC);

    DeleteObject(bmp);
    GdiplusShutdown(gdiplusToken);
    printf("Screenshot saved to %S\n", filename);
   
}


TakeScreenshot(HIDDEN_WINDOW, L"screenshot.png");
А нельзя создать виртуальный рабочий стол, туда перекинуть браузер и скринить просто весь раб стол, так не работает?
 
А нельзя создать виртуальный рабочий стол, туда перекинуть браузер и скринить просто весь раб стол, так не работает?
Крашит браузер почемуто
 
Крашит браузер почемуто
там ебалово адское с webgl и тд и тп. костыль = флаги что бы отключить gpu фичи
 
PoC
const int parentWidth = 1920;
const int parentHeight = 1080;

HIDDEN_WINDOW = CreateWindowExW(
WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE, L"STATIC", L"",
WS_POPUP, 0, 0, parentWidth, parentHeight, 0, 0, 0, 0);

L"\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" --profile-directory=TEST_PROFILE --disable-notifications --disable-gpu --allow-file-access-from-files --mute-audio --window-position=0,0 --window-size=1920,1080";
Вот так запускаю

Код:
void TakeScreenshot(HWND hWnd, const WCHAR* filename)
{
    if (!IsWindow(hWnd))
    {
        printf("Error: Invalid window handle\n");
        return;
    }

    WCHAR title[256];
    GetWindowTextW(hWnd, title, 256);
    wprintf(L"Window title: %s\n", title);

    RECT windowRect;
    GetWindowRect(hWnd, &windowRect);
    printf("Window position: %ld, %ld, Size: %ld x %ld\n", windowRect.left, windowRect.top, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);

    BOOL ret = ShowWindow(hWnd, SW_SHOW);

    printf("ShowWindows -> %d, GLE: %d\n", ret, GetLastError());

    Sleep(1000);

    RECT rect;
    GetClientRect(hWnd, &rect);
    int width = rect.right - rect.left;
    int height = rect.bottom - rect.top;
    printf("Client dimensions: %d x %d\n", width, height);

    if (width <= 0 || height <= 0)
    {
        printf("Error: Invalid client dimensions\n");
        return;
    }

    HDC screenDC = GetDC(0);
    HDC memDC = CreateCompatibleDC(screenDC);
    HBITMAP bmp = CreateCompatibleBitmap(screenDC, width, height);
    HGDIOBJ oldBmp = SelectObject(memDC, bmp);

    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, 0);

    bool sended = false;

    while(1)
    {
        BOOL result = PrintWindow(hWnd, memDC, PW_RENDERFULLCONTENT);
        printf("PrintWindow result: %d\n", result);


        Bitmap* bmpGdi = Bitmap::FromHBITMAP(bmp, 0);
        CLSID clsid;
        CLSIDFromString(L"{557CF406-1A04-11D3-9A73-0000F81EF32E}", &clsid);
        bmpGdi->Save(filename, &clsid, 0);

        delete bmpGdi;

        Sleep(1000);
      
    }

    SelectObject(memDC, oldBmp);
    DeleteDC(memDC);
    ReleaseDC(0, screenDC);

    DeleteObject(bmp);
    GdiplusShutdown(gdiplusToken);
    printf("Screenshot saved to %S\n", filename);
  
}


TakeScreenshot(HIDDEN_WINDOW, L"screenshot.png");
Скрытый контент для пользователей: .
 
А нельзя создать виртуальный рабочий стол, туда перекинуть браузер и скринить просто весь раб стол, так не работает?
Нет, скрытый рабочий стол чуть по другому работает
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх