Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/131: Рейтинг темы: голосов - 131, средняя оценка - 4.82
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750

Как добавить программу в автозагрузку?

16.05.2010, 17:41. Показов 24804. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем день добрый. Подскажите пожалуйста, как с помощью API функций добавить свою программу в автозагрузку?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2010, 17:41
Ответы с готовыми решениями:

Как добавить программу в автозагрузку через реестр на С/С++?
Это почему-то не работает... HKEY hg; LPCTSTR lpdata = L"C:\\Users\\User\\Desktop\\prog.exe"; RegOpenKeyEx(HKEY_LOCAL_MACHINE,...

Как добавить программу в автозагрузку?
как добавит программу в авто загрузку :CRY:

Как добавить программу в автозагрузку?
Здравствуйте. Мне необходимо добавить свою программу в автозагрузку. Чтобы не было тупых вопросов, вроде: ,,А для чего тебе это? Вирус что...

3
23 / 23 / 7
Регистрация: 30.01.2009
Сообщений: 103
16.05.2010, 19:08
Делал на вскидку коряво, но должно работать
Если известен путь к екзешнику и программа не обладает правами админа то можно по пробовать так
C++
1
2
3
4
5
6
7
8
9
10
char autorun[255] = "путь к екзешнику";
DWORD dwtype = 0;
DWORD dwBufsize = sizeof(autorun);
TCHAR szpath[MAX_PATH];           
HKEY hKeys;
if(ERROR_SUCCESS==RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,NULL,0,KEY_ALL_ACCESS, NULL,&hKeys,NULL))
{
RegSetValueEx(hKeys,"MyProgram",0,REG_SZ, reinterpret_cast<const BYTE*>(&autorun),sizeof(autorun));
RegCloseKey(hKeys);               
}
кстати если есть лучший способ поделитесь
6
 Аватар для erthalion
48 / 45 / 4
Регистрация: 29.03.2010
Сообщений: 233
16.05.2010, 19:54
есть тысяча и один способ провернуть такое)
но вот отыскал где-то более менее полный перечень :

1. Run ветка реестра.
Уже по названию большинство из вас знает про что идет речь, но всеже "докучи" упомянем и его.
Для автозапуска произвольного приложения при загрузке Windows необходимо прописать в ветку реестра
HKLM или HKCU \Software\Microsoft\Windows\CurrentVersi on\Run свой ключ, в котором будет указан
путь к приложению. В случае HKLM приложение будет запущено для всех пользователей зашедших в
систему. В случае же HKCU - только текущего пользователя.

2. RunOnce\RunOnceEx ветки реестра
Также всеми известные ветки реестра. Отличие от предыдущего пункта в том что приложение будет
запущено только один раз. Необходимо дописывать ключ после каждый перезагрузки. Находится все там
же:
HKLM\Software\Microsoft\Windows\CurrentV ersion\Run Once(Ex).

3. Папка "Автозагрузка"
Очень популярная папочка, первые трояны любили там селится. К тому же это просто папка, а
нужное приложение это фаил. Из этого следует, что можно сделать фаил скрытым и системным путем
установки аттрибутов и он не будет виден в сей папочке на первый взгляд. В современном мире люди
подзабыли этот способ и больше боятся всяких там Run веток.

4. Установка сервиса
Благодаря тому, что такой важный системный компонент как сервисы, доступен любому программисту
через WinAPI то это порождает еще один способ автозапуска. Для этого через SCManager создается
новый сервис функцией CreateService. Почитав описания флагов и установив тип запуска в
автоматический, добиваемся автозапуска вместе с Windows. Помимо флагов автозапуска можно
проставить такой интересный флажок как SERVICE_WIN32_OWN_PROCESS, что означает то что
сие приложение оказывается на самом деле частью ОС.
Использовать же SCManager скорее всего и не обязательно. Вся информация о сервисах хранится в
HKLM\SYSTEM\CurrentControlSet\Services\. И я не сомневаюсь что если вручную добавить туда пару
ключиков то все успешно запустится.
К тому же, никто не запрещает не добавлять новый сервис, можно ведь отредактировать старый,
поменяв в нем путь к приложению. Ну а чтобы никто не хватился пропажи, нужно запустить в нашем
приложении то что мы заменили, т.е. старый сервис.

5. Winlogon

5.1. Winlogon\Userinit
Дальнейшие изыскания в реестре приводят к ветке, которая принадлежит виндозовскому Winlogon.
Отвечает сия махина за вход пользователей в систему, и именно она рисует всякие там "Приветствия"
и прочую ерунду. Так как в Windows все разделено, т.е. логон процесс отдельно, десктоп отдельно и
т.д., то следует логический домысл, что логон процесс запускает десктоп и прочие фичи. И это
разумеется именно так и есть. Но создатели виндовса решили сделать её настолько пластилиновой, что
путь до десктопа и т.п. указывается в реестре. Именно это нам и нужно было. Процесс захода в систему
таков, winlogon проверяет пользователя, затем запускает userinit.exe. Он ответственный за запуск
оболочки десктопа и приложений, записанных в автозапуск. Путь до userinit.exe указан в реесте по
адресу: HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon ключ Userinit. Подменив
путь указанный в этом ключе на свой собственный мы запустим нужное приложение. Разумеется
наше приложение должно потом запустить userinit.exe. Но постойте, winlogon сделали настолько
пластилиновым, что он может запустить несколько userinit процессов сразу. Для этого нужно
просто через запятую перечислить в вышеуказанном ключе пути до userinit и нашего приложения.

5.2. Winlogon\Shell
Помимо userinit в той же ветке есть параметр Shell, он ответственный за оболочку системы. По
умолчанию там стоит explorer.exe. Но если заменить его на нужное нам приложение оно запустится
вместо него. В этом случае о запуске оболочки придется позаботится самим.

5.3. Winlogon\Notify
Какой же всетаки замечательный процесс этот winlogon. По идее он предоставляет возможность при
запуске\остановке системы выполнять различные полезные действия, но наши действия не слишком
уж и полезны. В данном случае нам нужно оформить наше приложение как dll. Потом в ветку
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\ добавить новый раздел, а в нем
ключи: Dllname - путь до нужной дллки, Startup - имя функции экспортируемой длл для запуска.
Помимо эвента Startup есть еще много разных эвентов: Shutdown, StartScreenSaver, StartShell,
StopScreenSaver, Unlock и другие. Наличие StartScreenSaver особенно радует, ибо если скринсейвер
включен, то юзера скорее всего за компьютером нет, и он не видит всяких там стрелочек на иконке
фаерволла
Сей способ использовался в крупных ботнетах для автозапуска.

6. ShellServiceDelayLoad
Помимо винлогона можно использовать еще одно место в реесте. Это ветка HKLM\Software\Microsoft\
Windows\CurrentVersion\ShellServiceObjec tDelayLoad . Там, как и в Run нужно разместить ключ до
нужной нам длл для запуска. В одном из троянов это было использовано, и весьма неплохо как можно
заметить.

7. Shell Extentions
Для возможности изменять всё и вся микрософт создала расширения оболочки. Например расширения
для контекстного меню файлов. Создав подобное расширение, можно не только добавить пару полезных
пунктов в меню файла, но и запустить на выполнение произвольную длл. За подробоностями устройства
расширений обращаемся в мсдн, а для регистрации обращаемся в HKLM\Software\Microsoft\Windows\
CurrentVersion\Shell Extensions\. Помимо эой ветви существуют еще и другие, вот они:

HKLM\Software\Classes\*\shellex\ContextM enuHandler s\
HKLM\Software\Classes\Directory\shellex\ ContextMen uHandlers\
HKLM\Software\Classes\Folder\shellex\Con textMenuHa ndlers\
и т.п.

8. Browser Helper Objects
Особо облюбленное хакерами расширение, ибо загружается оно прямо в тело Internet Explorer'a.
И отсюда со всеми вытекающими - безпрепятственный доступ в интернет. Прописываются они сюда:
HKLM\Software\Microsoft\Windows\CurrentV ersion\Exp lorer\Browser Helper Objects
За подробностями устройства - в мсдн.

9. AppInit_DLLs
Прям среди бела дня... Вобщем HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows ключ
AppInit_DLLs. Пишем туда имя длл и... она теперь мапится на все без исключения запускаемые
процессы, будь то браузер или асику. Итого два в одном - инжект в процесс и автозапуск.
Интересно, за пособничество вирусописателям микрософт оштрафуют? %)

10. Protocol handlers
Неопробованный, но вполне заслуживающий упоминания способ. Для обработки различных протоколов
в микрософте придумали обработчики. И доступны они тут: HKLM\Software\Classes\PROTOCOLS\Handler\
Целые кучи возможности автозапуска. Начиная от подмены уже существующего, заканчивая созданием
своего собственного и установкой в какое либо место.

11. Winsock2
И опять же с добрыми намерениями микрософт добавила возможность управления траффиком. На этом
способе кстати основана защита в NOD32, а именно его модуль imon.dll. Расположено сие добро в
HKLM\SYSTEM\CurrentControlSet\Services\W inSock2\Pa rameters\Protocol_Catalog9\Catalog_Entri es\.
Опять же нам потребуется длл для сования в автозапуск. Помимо проблемы автозапуска мы, изучив еще
мсдн и imon.dll можем контролировать траффик, да неплохо так контролировать. Библиотека будет
смаплена в любой процесс, в том числе во всякие там Internet Explorer и прочие, который работают
с winsock2 библиотекой. А ктож с ней не работает. Все работают как миленькие.
Сей способ не был замечен ни в одном из троянов на момент написания статьи. К сожалению, я думаю
это будет не так спустя некоторое время.

12. SubSystems
Еще один неопробованный способ, и весьма сомнительный, но все может быть. Дело в том что сама по
себе винда это оболочка для различных подсистем. В комплекте идет подсистема Win32, Posix (бугага),
OS\2 (?). И пути до подсистем указываются во все том же реестре. Путь до подсистем таков:

HKLM\SYSTEM\CurrentControlSet\Control\Se ssion Manager\SubSystems

Там мы найдем несколько ключей ответственные за разные подсистемы. Разумеется никто Posix
приложения не запускает, и подсистема Posix также не будет запущена. А вот Win32 подойдет в самый
раз. Csrss.exe как раз отвечает за эту подсистему, и заменив в реестре путь до этой подсистемы
на свое приложение, получим автозапуск еще до запуска подсистемы. Но, само то наше приложение
построено для Win32 и оно требует запущенную подсистему. Возможно виндовс увидит, что требуется
для нашего приложения win32 подсистема и попытается его запустить, а на самом деле запустит нас
опять и опять. Вероятно уйдет в вечный цикл. Но если написать не используя win32 то все вполне
возможно.

13. Маньячный способ
Напоследок самый отмороженный способ. Заменить протокол хендлер about на свой, и при запуске
браузера он обычно оказывается на about:blank, что неминуемо приведет к запуску нашего приложения.
Если же обработчик about:blank не окажется некой длл, а просто страницей, то туда можно запихнуть
эксплоит, который будет запускать то что нужно

ну, соответственно, где речь идет о реестре - точно так же меняем ключ, как написал Alex90
10
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
16.05.2010, 23:27  [ТС]
Спасибо большое Alex90, код отлично работает, и по моему совсем не корявый, по крайней мере как для начинающего программиста (меня), так это точно.

erthalion Вам не менее благодарен за такой огромный текст разъяснений с тысяча и одиним способом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2010, 23:27
Помогаю со студенческими работами здесь

Inno Setup как добавить программу в автозагрузку?
Здравствуйте! Нужно, что бы после установки программа, скажем по адресу &quot;D:\MyProg.exe&quot; попадала в автозапуска. Подскажите как...

Как добавить программу в автозагрузку через реестр?
Всем привет! Как добавить программу в автозагрузку через реестр? То есть вот сюда : ...

Как добавить программу в автозагрузку которой нужны администраторские права
Привет, как добавить программу в автозагрузку которой нужны администраторские права ?

Программу добавить в автозагрузку
Здравствуйте. Помогите, пожалуйста, добавить Диспетчер задач в автозагрузку. По всякому пытался - никак.

Добавить программу в автозагрузку
Как добавить *.exe программу на автозагрузку Windows? ну естественно чтоб она и на другом компьютере при загрузке Windows запускалась.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru