Algıla bir Windows hizmeti silindiğinde


9

Bir Windows hizmetinin ne zaman silindiğini tespit etmenin bir yolu var mı? Olay günlüğünü kontrol ettim ancak yalnızca silinen işlemleri almıyor.

Denetim günlüklerini kullanmanın bir yolu olabileceğine inanıyorum, ancak bunu nasıl yapacağımdan emin değilim?

Herhangi bir yardım çok takdir edilmektedir.

Teşekkürler

Yanıtlar:


6

Olay veya Denetim günlüklerinde hizmet silme izi bulunmamakla birlikte , yapabileceğiniz şey, bir hizmetin var olup olmadığını algılayan küçük bir konsol uygulaması oluşturmak ve bu uygulamayı Windows Task Schedulerfrekansa veya sizin tetiklediğiniz bir Tetikleyiciye göre yürütülecek şekilde zamanlanmış olarak eklemektir. bir hizmet eklendiğinde veya kaldırıldığında vb. bir uyarı alacak şekilde gereksinimlerinizi özelleştirebilir .

Konsol uygulaması, ilk çalıştırmada, sistemdeki tüm hizmetleri günlüğe kaydedecek ve sonraki çalışmalarda, hizmetler üzerinde yapılan değişiklikleri takip edecek servicesRemovedve servicesAddedböylece bir hizmet olduğunda hangi eylemin gerçekleştirileceğine karar verebileceğimiz şekilde tasarlanmıştır. edilmiş modifiye

Konsol Uygulaması: ServiceDetector.exe

static void Main(string[] args)
{
    var path = @"C:\AdminLocation\ServicesLog.txt";

    var currentServiceCollection = ServiceController.GetServices().Select(s => s.ServiceName).ToList(); //Queries the most current Services from the machine

    if (!File.Exists(path)) //Creates a Log file with current services if not present, usually means the first run
    {
        // Assumption made is that this is the first run
        using (var text = File.AppendText(path))
        {
            currentServiceCollection.ForEach((s) => text.WriteLine(s));
        }
        return;
    }

    // Fetches the recorded services from the Log
    var existingServiceCollection = File.ReadAllLines(path).ToList();

    var servicesRemoved = existingServiceCollection.Except(currentServiceCollection).ToList();
    var servicesAdded = currentServiceCollection.Except(existingServiceCollection).ToList();

    if (!servicesAdded.Any() && !servicesRemoved.Any())
    { Console.WriteLine("No services have been added or removed"); return; }

    //If any services has been added
    if (servicesAdded.Any())
    {
        Console.WriteLine("One or more services has been added");
        using (var text = File.AppendText(path))
        {
            servicesAdded.ForEach((s) => text.WriteLine(s));
        }
        return;
    }
    //Service(s) may have been deleted, you can choose to record it or not based on your requirements
    Console.WriteLine("One or more services has been removed");

}

Görev Zamanlama

Windows Başlat> Görev Zamanlayıcı> Temel Görev Oluştur> Tetikleyiciyi Ayarla> Exe'nizi ekleyin> Son


Öneri için teşekkürler, Bu sorun, özellikle silinir hizmetin adını bilmeyeceğim herhangi bir hizmet olabilir olmasıdır.
BillyDay

@BillyDay, ahh Anlıyorum, cevabı güncelledi
Clint

Bence bu en iyi yaklaşım. Başlangıçta ve döngüde çalışan bir hizmet oluşturacağım ve bir hizmetin ne zaman silindiğini tespit edeceğim ve bir dosyaya yazabilir veya yükseltebilir ve olay oluşturabilirim. Teşekkürler
BillyDay

0

Bir Windows Hizmetini silmenin Sistem Olay Günlüğüne bir olayın eklenmesine neden olmasından haklısınız (kaynak: /superuser/1238311/how-can-we-detect-if-a-windows- service-is-delete-is-there-an-olay-log-id-i ).

AFAIK, bir hizmetin silinmesini denetlemek için herhangi bir denetim politikası yoktur ve sanırım burada listeleneceğini düşünürsem: https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/ temel-denetim-süreç izleme

ServiceController.GetServices()Hizmet kaldırıldığında programınız çalışmıyor olabileceğinden yoklama söz konusu olmadığını varsayalım ?


Tam olarak benim sürecim çalışmıyor olabilir.
BillyDay

Tamam, ben şanssız olduğunu düşünüyorum sonra @BillyDay
simon-pearson

Neden bu hizmetle ilişkili bir dosyayı kontrol etmiyoruz ... örn. MyService.exe
johnny 5

hizmetin HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services olduğundan emin olmak için kayıt defterini de kontrol edebilirsiniz, herhangi bir hizmetin silinmediğinden emin olmak istiyorsanız kendi önbelleğinizi eklemeniz gerekir
johnny 5

0

İyi enstrümantasyonu neyin oluşturduğunu öğreninceye kadar enstrümantasyon kurmanın birçok yolu vardır. Nasıl yapılır, doğrudan Wikipedia girişinden https://en.wikipedia.org/wiki/Instrumentation adresinden alınır .

Enstrümantasyon Nasıl Yapılır

http://www.powersemantics.com/e.html

  • Sigara entegre
  • Yalnızca birincil veriler
  • Çekmeyin itmeyin
  • Süreç tarafından organize edilir
  • Asla çevrimdışı değil

Ölçme göstergeleri probleminin çözümü var, ancak "itme tabanlı" enstrümantasyonun başka bir sisteme nasıl sinyal verileceğini kavramsallaştırmaktan saptınız. E makalemde açıklandığı gibi, enstrümanlar her zaman veriyi çekmemelidir. Olay güdümlü sinyalizasyon, ihtiyacınız olmayan potansiyel bir arıza noktasıdır.

Ayrı bir uygulama oluşturma konusunda sahip olabileceğiniz kararsızlığı veya şüpheleri gidermek için, monitörler normalde bağımsızdır ( Wikipedia'nın söylediği gibi entegre değildir ). Dolayısıyla monitörünüzün "çalışmıyor olabilir" demek, her zaman açık olan gerçek bir entegre olmayan monitör oluşturmayı seçmediğiniz anlamına gelir. Tüketici sisteminiz enstrümantasyonu doğru bir şekilde modellemez, çünkü kontrolü kendi sürecine entegre eder.

Bu sorumlulukları ayırın ve devam edin. Cihazın silinen servisler için ne sıklıkta makul bir anket yapması gerektiğine karar verin ve verileri bir zamanlayıcı ile yoklayın. Önerilen API çağrısı simon-pearson'u kullanıyorsanız, hizmetlerin ne zaman eklendiğini de tespit edebilirsiniz. Elbette, monitörün servis listesinin bir kopyasını yerel olarak önbelleğe alması gerekir, böylece göstergeler eklenenleri veya kaldırılanları çıkartabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.