Антисниффер

r3xq1

Original poster
Member
Сообщения
3
Реакции
9
Посетить сайт
Бывает что иногда вы не хотите чтобы Ваши запросы кто-нибудь отловил через программы на подобие: Fiddler, HTTP Analyzer и.т.д
На помощь приходит вот такой кусок кода:

Создаём класс: NativeMethods.cs
C#:
using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;

[SuppressUnmanagedCodeSecurity()]
internal static class NativeMethods
{
    #region Для получения полного пути процесса
    [DllImport("Kernel32.dll")]
    public static extern bool QueryFullProcessImageName([In] IntPtr hProcess, [In] uint dwFlags, [Out] StringBuilder lpExeName, [In, Out] ref uint lpdwSize);
    #endregion
}

Имена в List<string> нужно задавать не имена файлов, а "название продукта" файла, которое Вы можете найти в свойстве этого файла..
Список имён можно дополнять до бесконечно.

И класс: AntiSniffer.cs
C#:
namespace Test
{
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;

    public static class AntiSniffer
    {
        /// <summary>
        /// Список имён снифферов (которые будут закрыты)
        /// </summary>
        private static readonly List<string> appNames = new()
        {
            "http analyzer stand-alone",
            "fiddler",
            "effetech http sniffer",
            "firesheep",
            "IEWatch Professional",
            "dumpcap",
            "wireshark",
            "sysinternals tcpview",
            "wpfsniffer",
            "NetworkMiner",
            "NetworkTrafficView",
            "HTTPNetworkSniffer",
            "tcpdump",
            "intercepter",
            "Intercepter-NG",
        };
        // [URL]https://stackoverflow.com/questions/5497064/how-to-get-the-full-path-of-running-process[/URL]
        private static string GetMainModuleFileName(this Process process, int buffer = 1024)
        {
            StringBuilder fileNameBuilder = new(buffer);
            uint bufferLength = (uint)fileNameBuilder.Capacity + 1;
            return NativeMethods.QueryFullProcessImageName(process.Handle, 0, fileNameBuilder, ref bufferLength) ? fileNameBuilder.ToString() : null;
        }

        private static void CheckAndKill(string ProcessName)
        {
            // Получаем список всех процессов
            foreach (Process process in Process.GetProcesses())
            {
                try
                {
                    // Сверяем полученые данные от свойства файла процесса с именем ProcessName
                    if (FileVersionInfo.GetVersionInfo(GetMainModuleFileName(process)).ProductName.ToLower().Contains(ProcessName.ToLower()))
                    {
                        try
                        {
                            process.Kill(); // Завершаем процесс
                        }
                        catch
                        {
                            process.CloseMainWindow(); // Закрываем окно процесса
                            continue; // Продолжаем поиск
                        }
                    }
                }
                catch { continue; }
            }
        }

        public static void Inizialize() => appNames.ToList().ForEach(CheckAndKill); // Метод для вызова
    }
}
Затем, просто в любом месте вызываем метод: AntiSniffer.Inizialize();
Как бы юзер не менял имя процесса, найдёт и убьёт!

P.S: Просто решил поделиться данной реализацией, вдруг кому-то нужно.
 
Последнее редактирование: