рдШрдЯрдирд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдкреЙрд╡рд░рд╢реЗрд▓ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдореИрд▓рд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЖрд▓реЗрдЦ рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдШрдЯрдирд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╕рдордп рдЕрдВрддрд┐рдо рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рджреВрд░рд╕реНрде рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреА рд╣реЛрдЧреА рдЬреЛ рдЕрдВрддрд┐рдо рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓реЗрдЧреА, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред

function CSIRT{
param($path)
if ($psversiontable.psversion.major -ge 5)
	{
	$date = Get-Date -Format dd.MM.yyyy_hh_mm
	$Computer = $env:COMPUTERNAME
	New-Item -Path $path$computer$date -ItemType 'Directory' -Force | Out-Null
	$path = "$path$computer$date"

	$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname,
	processid, commandline, parentprocessid

	$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress,
	localport, remoteaddress, remoteport, owningprocess, state
	
	$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress,
	localport, remoteaddress, remoteport, owningprocess, state

	$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname|
	where author -notlike '*╨Ь╨░╨╣╨║╤А╨╛╤Б╨╛╤Д╤В*' | where author -ne $null |
	where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*'

	$job = Get-ScheduledJob

	$ADS =  get-item * -stream * | where stream -ne ':$Data'

	$user = quser

	$runUser = Get-ItemProperty "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"

	$runMachine =  Get-ItemProperty "HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

	$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
	$arrayName = "Processes", "TCPConnect", "UDPConnect", "TaskScheduled", "Users", "RunUser", "RunMachine",
	"ScheduledJob", "AlternativeDataStream"


	for ($w = 0; $w -lt $array.count; $w++){
		$name = $arrayName[$w]
		$array[$w] >> $path$name.txt
		}

	}

}

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рд╕реАрдПрд╕рдЖрдИрдЖрд░рдЯреА, рдЬреЛ рдПрдХ рддрд░реНрдХ рд▓реЗрдЧрд╛ - рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдкрдеред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реАрдПрдордбреАрд▓реЗрдЯ рдкреЙрд╡рд░рд╢реЗрд▓ v5 рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреЙрд╡рд░рд╢реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рд╣реИред

function CSIRT{
		
param($path)# ╨┐╤А╨╕ ╨╖╨░╨┐╤Г╤Б╨║╨╡ ╤Б╨║╤А╨╕╨┐╤В╨░ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤Г╨║╨░╨╖╨░╤В╤М ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╤О ╨┤╨╗╤П ╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╕╤П
if ($psversiontable.psversion.major -ge 5)

рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рджреЛ рдЪрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдП рдЧрдП рд╣реИрдВ: $рджрд┐рдирд╛рдВрдХ рдФрд░ $рдХрдВрдкреНрдпреВрдЯрд░, рдЬрд┐рдиреНрд╣реЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдирд╛рдо рдФрд░ рд╡рд░реНрддрдорд╛рди рджрд┐рдирд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

$date = Get-Date -Format dd.MM.yyyy_hh_mm
$Computer = $env:COMPUTERNAME
New-Item -Path $path$computer$date тАУItemType 'Directory' -Force | Out-Null 
$path = "$path$computer$date"

рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд┐рд▓рддреА рд╣реИ: рдЗрд╕реЗ win32_process рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде get-ciminstance cmdlet рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ $process рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВред рд╕реЗрд▓реЗрдХреНрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реАрдПрдордбреАрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдкреИрд░реЗрдВрдЯрдкреНрд░реЛрд╕реЗрд╕рд┐рдб (рдкреАрдкреАрдЖрдИрдбреА тАЛтАЛрдкреИрд░реЗрдВрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдЖрдИрдбреА), рдХреНрд░рд┐рдПрд╢рдирдбреЗрдЯ (рдкреНрд░реЛрд╕реЗрд╕ рдирд┐рд░реНрдорд╛рдг рддрд┐рдерд┐), рдкреНрд░реЛрд╕реЗрд╕реНрдб (рдкреАрдЖрдИрдбреА тАЛтАЛрдкреНрд░реЛрд╕реЗрд╕ рдЖрдИрдбреА), рдкреНрд░реЛрд╕реЗрд╕рдирд╛рдо (рдкреНрд░реЛрд╕реЗрд╕ рдирд╛рдо), рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рд╣реЛрдВрдЧреЗред (рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб)ред

$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessid

рд╕рднреА рдЯреАрд╕реАрдкреА рдФрд░ рдпреВрдбреАрдкреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, $netTCP рдФрд░ $netUDP рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдХреНрд░рдорд╢рдГ Get-NetTCPConnection рдФрд░ Get-NetTCPConnection cmdlet рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдмрдирд╛рдПрдВред

$netTCP = Get-NetTCPConnection | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

$netUDP = Get-NetUDPEndpoint | select-object creationtime, localaddress, localport, remoteaddress, remoteport, owningprocess, state

рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо get-ScheduledTask рдФрд░ Get-ScheduledJob cmdlet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ $task рдФрд░ $job рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдлрд┐рд░ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрдз рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╕реЗрд▓реЗрдХреНрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реАрдПрдордбреАрд▓реЗрдЯ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред

$task = get-ScheduledTask | Select-Object author, actions, triggers, state, description, taskname| where author -notlike '*╨Ь╨░╨╣╨║╤А╨╛╤Б╨╛╤Д╤В*' | where author -ne $null | where author -notlike '*@%systemroot%*' | where author -notlike '*microsoft*' # $task ╨╕╤Б╨║╨╗╤О╤З╨░╨╡╤В ╨░╨▓╤В╨╛╤А╨╛╨▓, ╤Б╨╛╨┤╨╡╤А╨╢╨░╤Й╨╕╤Е тАЬ╨Ь╨░╨╣╨║╤А╨╛╤Б╨╛╤Д╤ВтАЭ, тАЬMicrosoftтАЭ, тАЬ*@%systemroot%*тАЭ, ╨░ ╤В╨░╨║╨╢╨╡ ┬л╨┐╤Г╤Б╤В╤Л╤Е┬╗ ╨░╨▓╤В╨╛╤А╨╛╨▓
$job = Get-ScheduledJob

рдПрдирдЯреАрдПрдлрдПрд╕ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо (рд╡реИрдХрд▓реНрдкрд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо, рдПрдбреАрдПрд╕) рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдирдЯреАрдПрдлрдПрд╕ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреА рдХрдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ADS рдХреЗ рд╕рд╛рде, рдЖрдк рд╡рд╣ рдбреЗрдЯрд╛ рдЫреБрдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдирдХ рд╕рд┐рд╕реНрдЯрдо рдЬрд╛рдБрдЪ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛ред рдпрд╣ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░/рдпрд╛ рдбреЗрдЯрд╛ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд╛рд╡рд░рд╢реЗрд▓ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдЯреНрд░реАрдо рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯ-рдЖрдЗрдЯрдо рд╕реАрдПрдордбреАрд▓реЗрдЯ рдФрд░ * рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдЯреНрд░реАрдо рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо $ADS рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВрдЧреЗред

$ADS = get-item * -stream * | where stream тАУne ':$Data' 

рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ $user рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдХреНрдпреВрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВрдЧреЗред

$user = quser

рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреИрд░ рдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд░ рдСрдЯреЛрд░рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдЯрдо рдХреЛ рдСрдЯреЛрдкреНрд▓реЗ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк Get-ItemProperty cmdlet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ: $runUser - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдСрдЯреЛрд▓реЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ $runMachine - рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдУрд░ рд╕реЗ рдСрдЯреЛрд▓реЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

$runUser = Get-ItemProperty 
"HKCU:SoftwareMicrosoftWindowsCurrentVersionRun"
$runMachine = Get-ItemProperty 
"HKLM:SoftwareMicrosoftWindowsCurrentVersionRun"

рд╕рднреА рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдФрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВред


$array = $process, $netTCP, $netUDP, $task, $user, $runUser, $runMachine, $job, $ADS
$arrayName = "Processes", "TCPConnect", "UDPConnect" "TaskScheduled", "Users", "RunUser", "RunMachine",
"ScheduledJob", "Alternative Data Stream"

рдФрд░, рдлреЙрд░ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

for ($w = 0; $w -lt $array.count; $w++){
	$name = $arrayName[$w]
	$array[$w] >> $path$name.txt

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реА 9 рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреАред

рдЖрдЬ, рд╕рд╛рдЗрдмрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкреЗрд╢реЗрд╡рд░ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдореГрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдЯреЛрд▓реЛрдб рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдмрд┐рдирд╛ рдбрдВрдкрд┐рдВрдЧ, рдЗрдореЗрдЬ рдЖрджрд┐ рдХреЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ