Пишу трояна на с++. Всё написал, только осталась полная ерунда. Нуно скрыть cmd. Нашёл Code: ShowWindow(hWnd, SW_HIDE); hWnd - ет вроде имя класса. Помогите плиз.
Может я не понял, но чьё cmd нужно скрыть? Из какого приложения его нужно скрыть? hWnd - это хэндл окна, котрое нужно скрыть.
Нужно скрыть cmd самогу трояна. А тока у жертвы возникнут подозрение: почему висит посреди экрана cmd.))
судя по твоим вопросам она не осталась а получилась hWnd - это 4(32b)/8(64b) - байтное значение "идентификатора" окна (хэндла), используя которое которое этим окном можно манипулировать получить его можно ф-ией FindWindow() которая требует имя класса/+заголовок окна и вообще можно обойтись без ShowWindow(), если создавать cmd ф-ией CreateProcess для шелла, заполняя некоторые структуры надо было идти на поинт и пить а не WinAPI изучать!
Ky3bMu4, я думаю, следующий пример тебе поможет: Code: HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 HWND hwndFound; char pszNewWindowTitle[MY_BUFSIZE]; char pszOldWindowTitle[MY_BUFSIZE]; //Запоминаем заголовок консоли GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); //Делаем уникальную строку из всякой лабуды wsprintf(pszNewWindowTitle,"%d/%d", GetTickCount(), GetCurrentProcessId()); //Меняем заголовок на уникальный SetConsoleTitle(pszNewWindowTitle); //Немного подождем Sleep(40); //Находим хэндл hwndFound=FindWindow(NULL, pszNewWindowTitle); //Меняем загловок окна обратно SetConsoleTitle(pszOldWindowTitle); return(hwndFound); } int main(int argc, char* argv[]) { //прячем окно ShowWindow(GetConsoleHwnd(), SW_HIDE); //делаем паузу, чтобы убедиться в результате Sleep(5000); return 0; }
Г-н Ky3bMu4 если можно скинь исходник мне на мыло. я прграммировать только начинаю интересно было бы посмотреть.... [email protected]
Эх... Code: WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
ShowWindow(хендл окна (для получения используй FindWindow), SW_HIDE) а воообще лучше winexec('cmd.exe',SW_HIDE) либо CreateProcess()
чё неужели неясно чё хотит Ky3bMu4???? Code: function GetDosOutput(const CLine:string;Vr:string):string; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of Char; BytesRead: Cardinal; Line,Com:string; begin with SA do begin nLength := SizeOf(SA); bInheritHandle := True; lpSecurityDescriptor := nil; end; CreatePipe(StdOutPipeRead,StdOutPipeWrite,@SA,0); Com:=Vr+CLine; try with SI do begin FillChar(SI, SizeOf(SI), 0); cb := SizeOf(SI); dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow := SW_HIDE; hStdInput := GetStdHandle(STD_INPUT_HANDLE); // стандартный ввод не перенаправляем hStdOutput := StdOutPipeWrite; hStdError := StdOutPipeWrite; end; WasOK := CreateProcess(nil, PChar(Com), nil, nil, True, 0, nil, nil, SI, PI); CloseHandle(StdOutPipeWrite); if not WasOK then result:='Could not execute command line!' else try Line := ''; repeat WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); if BytesRead > 0 then begin Buffer[BytesRead] := #0; Line := Line + Buffer; end; until not WasOK or (BytesRead = 0); WaitForSingleObject(PI.hProcess, INFINITE); finally CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; finally result:=Line; CloseHandle(StdOutPipeRead); end; end;