Просмотр полной версии : невидимое cmd
Пишу трояна на с++. Всё написал, только осталась полная ерунда. Нуно скрыть cmd. Нашёл
ShowWindow(hWnd, SW_HIDE);
hWnd - ет вроде имя класса. Помогите плиз. :)
begin_end
11.02.2007, 23:38
Может я не понял, но чьё cmd нужно скрыть? Из какого приложения его нужно скрыть?
hWnd - это хэндл окна, котрое нужно скрыть.
Нужно скрыть cmd самогу трояна. А тока у жертвы возникнут подозрение: почему висит посреди экрана cmd.))
Всё написал, только осталась полная ерунда. Нуно скрыть cmd.
судя по твоим вопросам она не осталась а получилась
hWnd - это 4(32b)/8(64b) - байтное значение "идентификатора" окна (хэндла),
используя которое которое этим окном можно манипулировать
получить его можно ф-ией FindWindow() которая требует имя класса/+заголовок окна
и вообще можно обойтись без ShowWindow(), если создавать cmd ф-ией CreateProcess для шелла, заполняя некоторые структуры
надо было идти на поинт и пить а не WinAPI изучать!
:D
limpompo
12.02.2007, 14:04
надо было идти на поинт и пить а не WinAPI изучать!
Не всем дано ходить на Поинты =) так что остаться Изучать WinAPI
begin_end
12.02.2007, 14:17
Ky3bMu4, я думаю, следующий пример тебе поможет:
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 если можно скинь исходник мне на мыло. я прграммировать только начинаю интересно было бы посмотреть....
invisible@doma.net.ua
Robin_Hood
12.02.2007, 20:29
тебе просто нужно выполнение команд в cmd?если да попробуй system(), если я правильно тебч понял
Эх...
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
ShowWindow(хендл окна (для получения используй FindWindow), SW_HIDE)
а воообще лучше
winexec('cmd.exe',SW_HIDE)
либо
CreateProcess()
чё неужели неясно чё хотит Ky3bMu4????
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;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot