- Регистрация
- 11.02.2021
- Сообщения
- 29
появилось желание сделать приблуду которая мне хочется, а именно revershell
но как бы я не старался, универсального избавления от кракозябр не было.
вообще не было. или может я тупой, но не было. всегда получаю зуботычины.
не знаю я винапи но честа изучаю, давай посмотрим че тут делается
мне давали расспечатку стати в хтмл (спасибо тебе, хоманатор!), я выдерну из нее картинки,
статья была текстовая кода в ней практически не было
но смысл в ней был такой:
запускаится програма, типа оконная, в ней запускается броузер как процесс, ищится в нем его хвнд,
и наше главное окно наследует окно броузера. а главное окно куда то перетаскивается за край экрана.
и с нево сделываются скришоты
но мне оно не интересно, главное запустить cmd.exe и делать с него скриншоты и отправлят скриншоты ко мне на сервер
я кодил и накодил вот шо:
Вот шо получилося. Таперь интересна будет узнать у вас чи шо с ним делать. Так что бы вводить
текст, делать с нево скриншоты. Буду рассказывать как у меня получается. А вы пишите свои ответы
если будет интересно продолжу выкладывать в теме че нибудь
но как бы я не старался, универсального избавления от кракозябр не было.
вообще не было. или может я тупой, но не было. всегда получаю зуботычины.
не знаю я винапи но честа изучаю, давай посмотрим че тут делается
мне давали расспечатку стати в хтмл (спасибо тебе, хоманатор!), я выдерну из нее картинки,
статья была текстовая кода в ней практически не было
но смысл в ней был такой:
запускаится програма, типа оконная, в ней запускается броузер как процесс, ищится в нем его хвнд,
и наше главное окно наследует окно броузера. а главное окно куда то перетаскивается за край экрана.
и с нево сделываются скришоты

но мне оно не интересно, главное запустить 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);
}
Вот шо получилося. Таперь интересна будет узнать у вас чи шо с ним делать. Так что бы вводить
текст, делать с нево скриншоты. Буду рассказывать как у меня получается. А вы пишите свои ответы
если будет интересно продолжу выкладывать в теме че нибудь