Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помощь в программе (http://forum.oszone.net/showthread.php?t=235276)

O L E G 24-05-2012 10:32 1921571

Помощь в программе
 
Нужен совет человека, который раpбирается хорошо в C++ или просто уже разбирается.
1.Хочу начать делать программу, которая будет защитать мною указанные файлы от изменения и удаления, будет только чтение на них
2.Программа не имеет интерфейса и всегда сидит скрыто в процессах, придумать защиту от выгрузки программы
3.Такая же защита на реестр, только чтение ветвей мною указанных
4.Ну и придумать сервис который будет саму программу запускать или просто в автозагрузку добавить
5.Думал над тем,может сделать не большой интерфейс, который будет в треи, Вкл и Откл защиты.

С чего можете посоветовать начать мне и сложно ли будет сделать такой проект?!
Все программы есть Visual 2010 Ultimat! Начал не давно, только учиться писать, читаю ((Хортон_Visual C++_2010)), достаточно ли мне будет этого или где то еще надо будет искать помощи людей или посоветуйте книги какие ни будь еще?
Спасибо за уделенное время)

softter 24-05-2012 22:53 1922072

Самый простой путь без написания драйверов и перехвата API Windows - в памяти висят сразу 2 процесса и каждый проверяет наличие своего дублера. Если дублер убит сразу же запускается копия. Убить одновременно 2 процесса не просто, и пока будет убиваться один, стартует дубль.
Так же можно опрашивать значение файлов - ветвей реестра и при их изменении, менять значение назад.

ferget 24-05-2012 22:59 1922075

Цитата:

Цитата softter
Так же можно опрашивать значение файлов - ветвей реестра и при их изменении, менять значение назад. »

проще ставить им владельца system, а остальным разрешение только чтение

Iska 25-05-2012 07:46 1922173

Цитата:

Цитата softter
Убить одновременно 2 процесса не просто »

Элементарно. Нужно «заморозить» исполнение одного процесса, снять второй, затем снять первый.

P.S. Такую технологию (несколько следящих друг за другом процессов/служб) используют некоторые виды вирусов.

O L E G 25-05-2012 09:11 1922199

Цитата:

Цитата ferget
проще ставить им владельца system, а остальным разрешение только чтение »

Устанавливал Владеьца System на ветвь Winlogon, а остальным чтение! ну конечно,кроме самой System полный доступ,так после этого система не запускается, не на всех ветвях это работает

Что то вроде такого на Vbs
Код:

wsh.Run("""subinacl"" /keyreg ""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"" /grant=%username%=r /grant=system=f /setowner=system"), 0 ,True
Видел не которые Программы, устанавливают защиту на ветви и дают им доступ Только чтение, после выгрузки программы их можно изменить.
Вот что мне интересно!

На файлах я делал так: Iska, спасибо за разъеснение! опять же на vbs, хотелось бы это реализовать на C++ и такие же действия с реестром
Код:

Option Explicit

Const ReadOnly = &H01
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Dim strFile
Dim fso, a, b, c, d, e, f, w

With wscript.CreateObject("Scripting.FileSystemObject")
Set fso = CreateObject("Scripting.FileSystemObject")
        For Each strFile In Array("c:\boot.ini", "c:\ntldr", "c:\windows\explorer.exe", "c:\windows\system32\userinit.exe", "c:\windows\system32\drivers\etc\hosts", "c:\NTDETECT.COM", "c:\WINDOWS\win.ini")
                If .FileExists(strFile) Then
                        With .GetFile(strFile)
                                .Attributes = .Attributes And Not ReadOnly
                        End With
                End If
        Next
End With

  Set a = fso.OpenTextFile("C:\windows\system32\drivers\etc\hosts", ForAppending, True)
  Set b = fso.OpenTextFile("C:\ntldr", ForAppending, True)
  Set c = fso.OpenTextFile("C:\boot.ini", ForAppending, True)
  Set d = fso.OpenTextFile("C:\windows\explorer.exe", ForReading, True)
  Set e = fso.OpenTextFile("C:\Windows\system32\userinit.exe", ForAppending, True)
  Set f = fso.OpenTextFile("c:\NTDETECT.COM", ForAppending, True)
  Set w = fso.OpenTextFile("c:\windows\win.ini", ForAppending, True)

Do
With wscript.CreateObject("Scripting.FileSystemObject")
For Each strFile In Array("C:\boot.ini", "c:\ntldr", "c:\windows\explorer.exe", "c:\windows\system32\userinit.exe", "c:\windows\system32\drivers\etc\hosts", "c:\NTDETECT.COM", "c:\WINDOWS\win.ini")
                If .FileExists(strFile) Then
                        With .GetFile(strFile)
                                .Attributes = .Attributes Or ReadOnly
                        End With
                End If
        Next
End With

                        wscript.Sleep 1
                Loop


softter 25-05-2012 13:53 1922375

Цитата:

Цитата Iska
Цитата softter:
Убить одновременно 2 процесса не просто »
Элементарно. Нужно «заморозить» исполнение одного процесса, снять второй, затем снять первый.
P.S. Такую технологию (несколько следящих друг за другом процессов/служб) используют некоторые виды вирусов. »

Интересно каким образом домохозяйка или бухгалтер в офисе это сделает, если запись в файле Hosts (127.0.0.1 vk.com) для них сродни катастрофе.
Системщик же покопавшись снимет любые ограничения.

Цитата:

P.S. Такую технологию (несколько следящих друг за другом процессов/служб) используют некоторые виды вирусов.
Вы правы, имел дело с Авторан вирусом, который таким образом зашищал свой процесс.

Iska 25-05-2012 16:04 1922476

Цитата:

Цитата softter
Интересно каким образом домохозяйка или бухгалтер в офисе это сделает, если запись в файле Hosts (127.0.0.1 vk.com) для них сродни катастрофе.»

Я обычно пользовался Process Explorer'ом; в нём есть подобный функционал.

Цитата:

Цитата softter
имел дело с Авторан вирусом, который таким образом зашищал свой процесс. »

Аналогично, коллега. Была служба и два процесса.


Время: 18:52.

Время: 18:52.
© OSzone.net 2001-