Войти

Показать полную графическую версию : Как создать "системный" процесс?


S1R1US
14-11-2012, 15:52
Вопрос: можно ли средствами AutoIt реализовать процесс, являющийся частью системы, чтобы пользователь наряду с критическими процессами не смог завершить и этот процесс???

Creat0R
14-11-2012, 17:09
Вопрос »
У меня тоже: в каких целях это нужно?

apozlevich
14-11-2012, 17:18
У меня тоже: в каких целях это нужно? »
Мне кажется, подальше от ручек пользователей. Хотя это не первое, что мне в голову пришло :)

S1R1US
14-11-2012, 17:51
Creat0R
apozlevich
Я составил программу для блокировки нежелательного интернет контента, вот код программы:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_Icon=1351863178_user_group.ico
#AutoIt3Wrapper_Res_Comment=Blocker Vkontakte, Youtube, Odnoklassniki, Yandex.music
#AutoIt3Wrapper_Res_Description=Blocker x86 WinXp
#AutoIt3Wrapper_Res_Fileversion=3.0.0.1
#AutoIt3Wrapper_Res_LegalCopyright=S1R1US[B.S.]
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.8.0
Author: S1R1US[B.S.]

Script Function:
Blocking Vkontakte, Odnoklassniki, YOUTUBE, YANDEX.MUSIC

#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <EditConstants.au3>
#include <ListViewConstants.au3>

Opt("WinWaitDelay", 0)
Global $sProcess = "Blocker x86 WinXp.exe"
HotKeySet("{PAUSE}", "_Terminate")
;функция выключения
Func _Terminate()
Exit
EndFunc

While 1
Sleep(100); цикл опроса

;скрытие процесса в диспетчере задач
If WinExists("Диспетчер задач Windows") = 1 Then
$iIndex = ControlListView("Диспетчер задач Windows", "", "SysListView321", "FindItem", $sProcess)
If $iIndex = -1 Then
Sleep(5)
Else
$hTaskMgr = WinGetHandle("Диспетчер задач Windows")
$hListView = ControlGetHandle($hTaskMgr, "", "SysListView321")
DllCall("User32.dll", "int", "SendMessage", "hwnd", $hTaskMgr, "int", $WM_COMMAND, "int", 40025, "int", 0)
DllCall("User32.dll", "int", "SendMessage", "hwnd", $hListView, "int", $LVM_DELETEITEM, "int", $iIndex, "int", 0)
EndIf
EndIf
; убивает окно если оно существует
If BitAND(WinGetState("Одноклассники"),1) Then
WinClose ("Одноклассники")
EndIf
If BitAND(WinGetState("Добро пожаловать"),1) Then
Winclose ("Добро пожаловать")
EndIf
If BitAND(WinGetState("YouTube"),1) Then
Winclose ("YouTube")
EndIf
If BitAND(WinGetState("Яндекс.Музыка"),1) Then
Winclose ("Яндекс.Музыка")
EndIf
If BitAND(WinGetState("Анонимайзер"),1) Then
Winclose ("Анонимайзер")
EndIf
WEnd

А также установщик для неё:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Version=beta
#AutoIt3Wrapper_Icon=1351861020_jason_icon.ico
#AutoIt3Wrapper_Res_Comment=Install Blocker Vkontakte, Odnoklassniki, Youtube, Yandex.Music
#AutoIt3Wrapper_Res_Description=Blocker x86 WinXp
#AutoIt3Wrapper_Res_Fileversion=3.0.0.2
#AutoIt3Wrapper_Res_LegalCopyright=S1R1US[B.S.]
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.8.0
Author: S1R1US[B.S.]

Script Function:
Automaticaly install Blocker x86 WinXp.

#ce ----------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <EditConstants.au3>
#include <ListViewConstants.au3>
$delay = 4000
$truepath = "C:\WINDOWS\system32\Blocker x86 WinXp.exe"
$truefile = "1"
$file = FileExists(@SystemDir & "\Blocker x86 WinXp.exe")
If $file = $truefile Then
MsgBox(64, "Blocker x86 WinXP", "The blocker programm is already installed")
Exit
Else
ProgressOn("Installing Blocker x86 WinXp", "Please Wait...", "0 percent")
For $i = 1 to 100 step 10
sleep(100)
ProgressSet( $i, $i & " percent")
Next
ProgressSet(100 , "Done", "Complete")
sleep(500)
ProgressOff()
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", "explorer.exe, %SystemRoot%\system32\Blocker x86 WinXp.exe")
FileInstall("C:\Blocker x86 WinXp.exe", @SystemDir & '\Blocker x86 WinXp.exe', 1)
Run("Blocker x86 WinXp.exe", @SystemDir)
ProcessExists("Blocker x86 WinXp.exe")
MsgBox(64, "Congratulations! Blocker x86 WinXP", "The blocker programm is successfully installed")
EndIf
ToolTip("Thanks For Using Blocker x86 WinXp By S1R1US[B.S.]", 0, 0)
Sleep($delay)

В прошлой своей теме я пытался запустить программу как службу, чтобы пользователи её не выключали, но это оказалось слишком сложно для меня. Теперь я пытаюсь запустить этот процесс в качестве системного...уже перелопатил горы, выход есть с помощью SC manager'a, но мне как то страшновато лезть в него не имея достаточного опыта. Если это противозаконно прошу меня понять, простить...)

Creat0R
14-11-2012, 20:58
Я составил программу для блокировки нежелательного интернет контента »
Это легче сделать на уровне браузера/системы.

По поводу предотвращения закрытия, почитай Как запретить закрытие процесса (http://autoit-script.ru/index.php/topic,11225.0.html).

S1R1US
15-11-2012, 15:59
Creat0R
В моём случае пользователи могут установить другой браузер, или воспользоваться анонимайзером или придумать ещё 1000 и один способ зайти на любимые одноклассники. Поэтому я вынужден был изобрести велосипед)
Возник вопрос: если я использую батник мне чтож теперь для его сайленс запуска воспользоваться и vbs скриптом???
Например:

Dim oShell
Set oShell = WScript.createObject("WSCript.shell")
oShell.run "C:\RunAsSystem.bat", 0
Set oShell = Nothing

Creat0R
15-11-2012, 21:19
В моём случае пользователи могут установить другой браузер, или воспользоваться анонимайзером или придумать ещё 1000 и один способ »
Что то не пойму, ты администратор компьютера и тебе нужно ограничить доступ к сайтам всем/некоторым пользователям?

А в hosts добавить не вариант?

127.0.0.1 www.odnoklassniki.ru

apozlevich
15-11-2012, 21:26
А в hosts добавить не вариант? »
Думаю, пользователи давно освоили этот вариант. То, что предложил ТС - можно сделать даже на админском акке и это будет незаметно.

Если же требуется ограничивать сразу много компьютеров, то тогда надо на сервер ставить проксю, рекомендую в этом плане Privoxy.

S1R1US
16-11-2012, 11:12
Creat0R
Все пользователи являются администраторами для своих компьютеров, таковы требования использования программ, которые установлены. Я ограничиваю всем доступ к некоторым ресурсам, изменение файла "хост", это пройденный вариант(уже научились редактировать), и да кучи уже освоили анонимайзеры, в связи с чем и был написан мой блокер. Вы сильно недооцениваете моих пользователей.
Я в принципе добился запуска от имени NT AUTHORITY\SYSTEM через планировщик, но вот ведь незадача - он легко завершается через сторонний диспетчер задач...
apozlevich
Прокся есть давно, проблема в том, что её обходят. Ищу способ программного блокирования, осталось всего лишь добиться "выживаемости процесса" в условиях завершения. Имеется идея - создать к процессу драйвер-охранник, или службу, но хотелось бы реализовать попроще. А то действительно выходит как написание антивируса...
P.S. Ещё вопрос к Creat0R, а что если обойтись созданием 2-х идентичных процессов, каждый из которых будет исполняться в памяти, контроллируя соседний процесс, если процессов 2, ничего не делать, если процесс 1, запустить копию. Ведь даже в сторонних диспетчерах завершить можно только 1 процесс за 1 раз? Тут вот такие моменты: не знаю как будет работать моя "маскировка", далее проблема с опросом горячей клавиши "завершения", а также с опросом окон на наличие нужных сочетаний для блокирования.

cameron
16-11-2012, 11:19
Я в принципе добился запуска от имени NT AUTHORITY\SYSTEM через планировщик, но вот ведь незадача - он легко завершается через сторонний диспетчер задач... »
с правами админа получить права SYSTEM нет проблем :)
и убивать всё что угодно.
Все пользователи являются администраторами для своих компьютеров, таковы требования использования программ »
вы бессильны.

S1R1US
16-11-2012, 12:04
cameron
Если ничего не поможет, наверняка придётся прибегнуть к склеиванию или внедрению своего .dll в системный процесс winlogon или ещё куда то в виде системной службы. Боязно этим заниматься на самом деле)

Creat0R
16-11-2012, 14:18
Все пользователи являются администраторами для своих компьютеров »
Не понятно номер 2.
Если они все админы, то как они являются твоими пользователями, и почему именно ты ставишь им запрет?

таковы требования использования программ, которые установлены »
Интересно это что за программы такие.

что если обойтись созданием 2-х идентичных процессов, каждый из которых будет исполняться в памяти, контроллируя соседний процесс »
Это вариант.

в сторонних диспетчерах завершить можно только 1 процесс за 1 раз? »
Можно завершить дерево процесса, т.ч запускать защитника нужно через процесс-посредник.
Я это делал в ToDoIt - Менеджер задач (http://autoit-script.ru/index.php/topic,2637.0.html).

Iska
16-11-2012, 15:27
Это вариант. »
«Заморозить» один процесс, снять другой процесс, снять первый процесс.

S1R1US, тут надо идти от другого: если никакие ухищрения (типа отслеживания разделов реестра, мест файловой системы, куда «ломится» приложение, и выдача разрешений на эти сущности) не помогают — использовать AdmiLink (AdmiLink & AdmiRun (http://admilink.narod.ru/admilink.htm)) и подобные ей посредники. Это меньшее зло, нежели просто отдать права.

S1R1US
16-11-2012, 16:17
Iska
Не пойдёт, функции системы нужны с правами администратора, т.к. там ещё выгрузка происходит с обращением к "системным" файлам в системной папке...но спасибо за совет)
Creat0R
Ваша программа очень интересная однако запускает процесс не отдельно, а в иерархии, то есть завершив древо процессов завершаются оба сразу. Полагаю для правильного функционирования мне нужно:
1. Открыть процессы в диспетчере задач(сделать их снова видимыми)
2. Задать цикл проверки, загружающий лист процессов, например так - если есть процесс1.exe запустить процесс2.exe, если нет процесса1.exe запуститься с именем процесс1.exe, причем наверняка рабочие директории должны быть разными, а исполняемые файлы взаимокопируемы.

cameron
16-11-2012, 16:23
Не пойдёт, функции системы нужны с правами администратора, т.к. там ещё выгрузка происходит с обращением к "системным" файлам в системной папке...но спасибо за совет)
Creat0R
Ваша программа очень интересная однако запускает процесс не отдельно, а в иерархии, то есть завершив древо процессов завершаются оба сразу. Полагаю для правильного функционирования мне нужно:
1. Открыть процессы в диспетчере задач(сделать их снова видимыми)
2. Задать цикл проверки, загружающий лист процессов, например так - если есть процесс1.exe запустить процесс2.exe, если нет процесса1.exe запуститься с именем процесс1.exe, причем наверняка рабочие директории должны быть разными, а исполняемые файлы взаимокопируемы. »
беру я значит в руки Process Monitor + Process Explorer, нахожу эти ваши непотребства, оуню файлы и говорю, явно, SYSTEM = Deny All.

потом ставлю виртуалку и гоняю там всё что мне угодно.
ну а что бы вам совсем стало сладко
выкидываю всяких там Domain\administrators из разных групп, что бы неповадно было, впредь, мне мешать смотреть фконтатек.

или нет, сперва я напишу скриптик, закину его на логон всех членов группы Domain\Administrator на мой комп, получу такие же права в этом домене, ну а потом, уж поверьте, вы даже на свой комп залогиниться не сможете =)

Iska
16-11-2012, 16:28
Не пойдёт, »
Пойдёт.

оуню файлы »
Ась?

cameron
16-11-2012, 16:29
Ась? »
становлюсь владельцем, значит :)

а вообще если выдать Iska, консоль, то я даже боюсь представить что он запихнёт в этот скрипт %)

Iska
16-11-2012, 16:58
становлюсь владельцем, значит »
cameron, спасибо, ясно. До меня сразу не дошло, что это волапюк: я всё перебирал варианты с пропущенной буквой или опиской ;).

S1R1US
16-11-2012, 17:07
cameron
Был бы домен, я бы вообще тему не создавал... Ну да как же с правами пользователя, не так уж просто Вам будет подняться, а точнее невозможно. А о виртуалке я вообще промолчу) Если бы да кабы...
P.S.S. Я тут уже DDK скачал, раз никто мне помочь дельным советом с защитой процесса не может - напишу свой "драйвер с программой защиты и работающий на уровне ядра"...хз сколько это времени потребует, но всё лучше и надежнее, чем выделываться с копированием процессов.




© OSzone.net 2001-2012