Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Скрытие программы


Автор: DoDo 5.10.2005, 11:38
Всем Добрый День!
Вот заинтересовал вопрос как сделать так чтобы программа работала , но была не видима для пользователя ?
Вообще говоря сделать так , чтобы она работала и не была при этом видна , но и была активна!
Это хочется научится делать для того чтобы самому прописывать макросы и для всего другого .
Очень хочется этому научиться!

Автор: En_t_end 5.10.2005, 11:53
DoDo
Вопрос задается с интервалом в 2-3 недели... может поиском пользоваться ?
2. Причем здесь макросы и скрытие программы ?

Автор: DoDo 5.10.2005, 12:08
En_t_end , согласен .
Макросы просто упоминул то что можно например программу сделать скрытой и написать ее так чтобы она по клавиам к примеру V+T открывала панель управления .
Это я ради примера .

Автор: Neitron 5.10.2005, 12:23
Где программа должна быть невидимой? В процессах?
Ответ: сделать невозможно.
Если просто без формы, программа просто должна сидеть в памяти, создовай в программе бесконечный цикл.

Автор: DoDo 5.10.2005, 13:13
Neitron , ясно .
Мне надо так чтобы в процессах пусть будет и видна , но чтобы не было ее больше не где видно .
А как окно программы скрыть ?
Как это сделать ?
Вообще говоря , что бы она делала свои действия , но не была видна .

Автор: _hunter 5.10.2005, 13:47
Application->ShowMainForm = false;
ShowWindow(window, SW_HIDE);
+ поиск по форуму -- тема уже не раз обсуждалась

Автор: nikitao 5.10.2005, 13:51
Если используешь WinAPI ,то тогда:
Код

ShowWindow(Handle,SW_HIDE);

Это чтобы из панели задач,а что бы из процессов:
[/quote]Ответ: сделать невозможно.
[quote]
Это не правда.
Код

RegisterServiceProcess(ID_процесса, 1);

Но это только под 98,в XP не сработает.В XP все гораздо сложнее,но если постораться,то добиться можно:
http://forum.vingrad.ru/index.php?showtopic=21557&unread=1&hl=%F1%EA%F0%FB%F2%E8%E5+%EF%F0%EE%F6%E5%F1%F1%E0
Ну можно еще здесь посмотреть:
http://www.xakep.ru/magazine/xs/035/050/1.asp
ЗЫ Тема полный smile (слищком часто повторяется).

Автор: Mayk 5.10.2005, 13:54
Цитата(nikitao @ 5.10.2005, 17:51)
Это не правда.

А разве сервисы не видны? А что мне их фар тогда показывает?

Автор: nikitao 5.10.2005, 14:20
Цитата
А разве сервисы не видны? А что мне их фар тогда показывает?

Или я че то не догоняю или Kасперский деньги из воздуха делает:вирусы же и черви всякие не показываются в процессах,но при этом они работают?

Автор: Mayk 5.10.2005, 14:28
Противоречие, Если бы можно было спрятать процесс, то Каспер бы ничего не нашёл(так как приложение было бы спрятано). Хотя бы отсюда следует, что процесс спрятать невозможно. Это раз.
Те вирусы, которые мне попадались либо были видны в процессах, либо просто в них внедрялись и были отлично видны даже не через фар(который их отлично прибивал("пока, a180232.exe!' )). Это два.

Автор: nikitao 5.10.2005, 14:36
Речь как я понял идет не о скрытии проги от всех средств(например FAR),а о обычном скрытии от Диспетчира задач Windows(taskmqr.exe),что бы пользователь ее ненароком не закрыл,если же полное скрытие проги имелось ввиду,то извенити.
Честно говоря мне не верится,Mayk ,что то что ты сказал на 100 % правда.Просто не может быть что все настолько легко.Если не прав,то извени,ко мне вирусы не лепятся(скорость очень медленная).

Автор: Romikgy 5.10.2005, 16:26
Скрыть прогу можно, (насколько помню) и Касперский ее проглядел smile но это по памяти, может в тот момент был другой антивирь. Попал вирус и прятал во всей системе файлы, процессы и .... т.п. с определенным именем, сидел себе тихо чет делал, определил случайно, он ся в реестре прописывал запуск, пошел по пути , а там .... опа пусто smile Досих пор хочу увидеть исходник той заразы, мне сама мысль такого исчезновения ооочень понравилась smile

Автор: DoDo 5.10.2005, 19:28
Прочитал все эти сообщения .
Очень много информации для себя получил .
Только один вопрос:
Код

#include <windows.h>

void main()
{
    ShowWindow(Handle,SW_HIDE);
}

Почему не компилит ?
У меня компилятор Microsoft Visual C++ 6.0

Автор: nikitao 5.10.2005, 20:43
Цитата
Почему не компилит ?
У меня компилятор Microsoft Visual C++ 6.0

Конечно не кампилит,потому что если ты так и прописываешь ,то "handle" это имеется ввиду дескриптор твоего окна,Если ты используешь MFC,то надо прописать вот,что:
Код

::ShowWindow(m_hWnd,SW_HIDE);

Это раз,а два это то что этустроку безполезно писать в OnInitDialg().Игнорирует.Лечение:
В OnInitDialog включи таймер с 1 секундой и пропиши это в таймере(также в нем его и убей) smile

ЗЫ Если не догодаля ,то
Код

::ShowWindow(m_hWnd,SW_SHOW);

Возвратит твое окно к жизни на панеле задач.

Автор: Romikgy 6.10.2005, 09:07
DoDo
А че прятать , где в этом коде окно ?
ЗЫ я так понял , когда запускаешь этот код у тя получается консоль, а там по другому прячут smile

Автор: Neitron 6.10.2005, 09:11
Цитата(nikitao @ 5.10.2005, 13:51)
Если используешь WinAPI ,то тогда:
Код

ShowWindow(Handle,SW_HIDE);

Это чтобы из панели задач,а что бы из процессов:
[/quote]Ответ: сделать невозможно.
[quote]
Это не правда.
Код

RegisterServiceProcess(ID_процесса, 1);

Но это только под 98,в XP не сработает.В XP все гораздо сложнее,но если постораться,то добиться можно:
http://forum.vingrad.ru/index.php?showtopic=21557&unread=1&hl=%F1%EA%F0%FB%F2%E8%E5+%EF%F0%EE%F6%E5%F1%F1%E0
Ну можно еще здесь посмотреть:
http://www.xakep.ru/magazine/xs/035/050/1.asp
ЗЫ Тема полный smile (слищком часто повторяется).

Знаю я про этот способ. Но разве кто-то пользуется такой шнягой как 9x?
Оно умерло, и ему уже никогда не жить. В редких случаях встретишь в каком-нибудь бубруйске такую Ось.

Автор: Romikgy 6.10.2005, 09:12
Я пользуюсь , и не только !!!!

Автор: Neitron 6.10.2005, 09:28
Тогда вперед
Код

RegisterServiceProcess(ID_процесса, 1);

Скрывай чо хочешьsmile))))

Автор: DoDo 6.10.2005, 09:54
Romikgy , ты верно подметил .
Пишу программу сразу в .cpp файле и получается консоль .
Только она не как не прячется ...

Автор: Neitron 6.10.2005, 11:17
Во первых забудь про консоль, консольные приложения работаю медленно в винде, так как винде приходица использовать эмулятор ДОС.

Автор: Romikgy 6.10.2005, 12:32
Neitron
Имхо ты не совсем прав, консольные приложения написаные под Вынь32 ничем , не отличаются от гуивых, и выполняются без каких либо эмуляторов.


DoDo
Для того , что бы спрятать консоль , попробуй это :
Код

#include <stdio.h>
#include <iostream>
#include <windows.h>

int main()
{
 char str[512];
 int lstr=0;
 printf("Privet\n"); 
 lstr=GetConsoleTitle(str,512);
 HWND hwcon=FindWindow(NULL,str);
 Sleep(2000);
 ShowWindow(hwcon,SW_HIDE);
 Sleep(2000);
 ShowWindow(hwcon,SW_SHOW);
 printf("%d\n",(long)hwcon); 
 system("PAUSE");
}


Ненужное по вкусу убрать smile

Автор: DoDo 6.10.2005, 13:07
Romikgy , уже ближе .
Компилится , но почему-то консоль не исчезает ...
Может это у меня что-то с языком не то (Microsoft Visual C++ 6.0) ...

Автор: Neitron 6.10.2005, 13:50
Когда я говорил про то чтобы забыть консоль, я советовал использовать WinMain вместо main.
Создовать консольное приложения и скрывать консоль - есть извращение с большой буквы.
Зачем что-то скрывать и делать невидимым, когда что-то можно просто не создовать, например туже консоль или простое окно.

Автор: Romikgy 6.10.2005, 14:13
Neitron
Конечно можно и не создавать, но спросили же "как скрыть", а не "как не создать" smile


DoDo
У меня Dev-C++ , мож и с визуалом , что-то , а в переменых hwcon, lstr ... что ???? не пустые ли??

ЗЫ это очень странно , в файле только чистый апи, а ему имхо побоку в какой иде или каким компилятором оно собиралось smile

Автор: Neitron 6.10.2005, 14:23
Цитата(Romikgy @ 6.10.2005, 14:13)
ЗЫ это очень странно , в файле только чистый апи, а ему имхо побоку в какой иде или каким компилятором оно собиралось  smile

Хех, я тебя понел, но ты немного не прав.
#include <stdio.h>
#include <iostream>
Уже не апи, а Stanart Library

Так же вызов ф-ции main и время запуска и параметры запуска, во многом тоже зависят от компилятора, я о том что main вызывает программа а не сама Винда. А программу делает компилятор.

Далее больше советую не изващаться.
Код

#include <windows.h>
#pragma argsused
int main(int argc, char* argv[])
{
        ShowWindow(GetConsoleWindow(),SW_HIDE);
        Sleep(2000);
        ShowWindow(GetConsoleWindow(),SW_SHOW);
        Sleep(2000);
        return 0;
}

Автор: Romikgy 6.10.2005, 15:07
Цитата(Neitron @ 6.10.2005, 14:23)
Хех, я тебя понел, но ты немного не прав.
#include <stdio.h>
#include <iostream>
Уже не апи, а Stanart Library

Логично smile но я ими пользовался , дабы проверить работоспособность самой проги, никакого отношения к сокрытию они не имеют, или я не прав?


Цитата(Neitron @ 6.10.2005, 14:23)
GetConsoleWindow()

smile Тоже только что нашел, одна оговорка, как я написал будет работать на любой винде, как ты только на НТевых smile
Цитата(Neitron @ 6.10.2005, 14:23)
Так же вызов ф-ции main и время запуска и параметры запуска, во многом тоже зависят от компилятора, я о том что main вызывает программа а не сама Винда.

Не совсем понял, при чем здесь параметры запуска, время ??? к теме обсуждения??? Да от компилятора многое зависит, не спорю, но как зависит вызов апи ф-кций, если честно я не знаю smile, но по идее должен зависить очень мало smile А вот насчет мейна , ИМХО, ты не прав и main и WinMain вызывает винда, а вот как их вызывает.... пусть за меня гуру плюсов разкажут , я не такой уж спец, что знаю, то скажу/подскажу остальное ... уж извольте.

Автор: Neitron 6.10.2005, 15:14
Цитата(Romikgy @ 6.10.2005, 15:07)
Не совсем понял, при чем здесь параметры запуска, время ??? к теме обсуждения??? Да от компилятора многое зависит, не спорю, но как зависит вызов апи ф-кций, если честно я не знаю smile, но по  идее должен зависить очень мало  smile А вот насчет мейна , ИМХО, ты не прав и main и WinMain вызывает винда, а вот как их вызывает.... пусть за меня гуру плюсов разкажут , я не такой уж спец, что знаю, то скажу/подскажу остальное ... уж извольте.

Не причем. Просто поправил. Еще раз говорю. Винде пох на main и пох на WinMain
Она о них и знать не знает. Винда выполняет прогу с самой первой строчки проги.
Все эти функции программа сама запускает после своего запуска. Уж такой способ придумали специалисты Си. Main и WinMain стандарт Си, а не винды.
После запуска программы, происходит много чего красивого, и только в самом конце запускается main. Также после окончания main происходит много чего уже не красивого)) Все к чертям чистится, санчало Сишным кодом, который интерпретатор встраивает в каждую прогу, а потом и виндой самой.

Цитата

Тоже только что нашел, одна оговорка, как я написал будет работать на любой винде, как ты только на НТевых

Хуже))) От 2000 и вышеsmile

Автор: DoDo 6.10.2005, 20:16
Тогда вопрос поставлю в другом ракурсе:
А как сделать так чтобы консоль вообще не создавалась?
То есть программа делала свои действия, но консоли не было видно.
Вообще говоря, чтобы ничего не было видно.

Автор: Helicopterr 6.10.2005, 22:47
врусы, чтобы спрятаться убивают один из существующих системных процессов, например svhost, и действуют под его filename. Или, дорогой DoDo, можно записать свой код в существующий процесс, но это уже немного другой форум.

Автор: DoDo 7.10.2005, 09:07
Helicopterr , ясно .
Я не вирус писать smile

Автор: Neitron 7.10.2005, 09:30
DoDo
Он вообще не в тему написал.
Я еще раз повторюсь, тебе нужно создовать НЕ КОНСОЛЬНОЕ приложение, тебе нужно приложение у которой главное функция является WinMain а не Main.
И вот в этой ф-ции не нужно создовать окна.
Хотя лучше чтобы хоть одно окно все атки было, но нужно сделать его невидимым сразу после создания.
А вообще, MSDN.

Автор: DoDo 7.10.2005, 12:19
Neitron , хорошо !
Всё понятно , в каком плане дальше двигаться !

Автор: Neitron 7.10.2005, 12:23
У меня сейчас нету Visual C++ чтобы сказать, сам я пишу на Билдере.
Но ,насколько я помню, тебе нужно, создать простое приложение, найти WinMain и удалить все что находица в этой функции. Вот в ней и пиши что тебе нужно.

Автор: DoDo 7.10.2005, 18:02
Neitron , спасибо !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)