PowerShell āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻ
āĻā§āĻŽā§āĻļāύ āĻā§āϞ āϝāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāĻ āĻŽā§āϝāĻžāϞāĻāϝāĻŧā§āϝāĻžāϰ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰ⧠āĻāĻŦāĻ āϤāĻĨā§āϝ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻŦāĻŋāĻļā§āώāĻā§āĻ āĻāĻāϝāĻŧāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤
āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āϤāĻĨā§āϝ āϏā§āϰāĻā§āώāĻžāϰ āĻāĻāύāĻžāĻā§āϞāĻŋāϰ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻžāύāĻžāϤ⧠āĻļā§āώ āĻĄāĻŋāĻāĻžāĻāϏāĻā§āϞāĻŋ āĻĨā§āĻā§ āĻĄā§āĻāĻž āϏāĻāĻā§āϰāĻšā§āϰ āĻāύā§āϝ PowerShell-āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻŦā§ā§ˇ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻžāĻā§ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϞāĻŋāĻāϤ⧠āĻšāĻŦā§ āϝāĻž āĻļā§āώ āĻĄāĻŋāĻāĻžāĻāϏ⧠āĻāϞāĻŦā§ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ⧠āĻāĻ āϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāϰāĻŖ āĻĨāĻžāĻāĻŦā§āĨ¤
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
}
}
}āĻļā§āϰ⧠āĻāϰāϤā§, āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϤā§āϰāĻŋ āĻāϰā§āύ CSIRT āĻāĻā§āϏāĻā§āύāĻļāύ, āϝāĻž āĻāĻāĻāĻŋ āϝā§āĻā§āϤāĻŋ āĻā§āϰāĻšāĻŖ āĻāϰāĻŦā§ - āĻĒā§āϰāĻžāĻĒā§āϤ āĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻžāϰ āĻĒāĻĨāĨ¤ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ cmdlets Powershell v5-āĻ āĻāĻžāĻ āĻāϰāĻžāϰ āĻāĻžāϰāĻŖā§, āϏāĻ āĻŋāĻ āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āĻāύā§āϝ PowerShell āϏāĻāϏā§āĻāϰāĻŖā§āϰ āĻāĻāĻāĻŋ āĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤
function CSIRT{
param($path)# ĐŋŅи СаĐŋŅŅĐēĐĩ ŅĐēŅиĐŋŅа ĐŊĐĩОйŅ
ОдиĐŧĐž ŅĐēаСаŅŅ Đ´Đ¸ŅĐĩĐēŅĐžŅĐ¸Ņ Đ´ĐģŅ ŅĐžŅ
ŅаĐŊĐĩĐŊиŅ
if ($psversiontable.psversion.major -ge 5)āϤā§āϰāĻŋ āĻāϰāĻž āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āύā§āĻāĻŋāĻā§āĻļāύ āϏāĻšāĻ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻĻā§āĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻļā§āϰ⧠āĻāϰāĻž āĻšāϝāĻŧā§āĻā§: $date āĻāĻŦāĻ $Computer, āϝāĻž āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰā§āϰ āύāĻžāĻŽ āĻāĻŦāĻ āĻŦāϰā§āϤāĻŽāĻžāύ āϤāĻžāϰāĻŋāĻ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻž āĻšāĻŦā§āĨ¤
$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 āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻāĻŋāĻā§ win32_process āĻā§āϞāĻžāϏā§āϰ āϏāĻžāĻĨā§ get-ciminstance cmdlet āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰ⧠āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤ āϏāĻŋāϞā§āĻā§āĻ-āĻ āĻŦāĻā§āĻā§āĻ āϏāĻŋāĻāĻŽāĻĄāĻŋāϞā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻĒāύāĻŋ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻāĻāĻāĻĒā§āĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻŽāĻžāĻĻā§āϰ āĻā§āώā§āϤā§āϰā§, āĻāĻā§āϞāĻŋ āĻšāĻŦā§ āĻĒā§āϝāĻžāϰā§āύā§āĻāĻĒā§āϰāϏā§āϏāĻŋāĻĄ (āĻĒāĻŋāĻĒāĻŋāĻāĻāĻĄāĻŋ āĻĒā§āϝāĻžāϰā§āύā§āĻ āĻĒā§āϰāϏā§āϏ āĻāĻāĻĄāĻŋ), āĻā§āϰāĻŋāϝāĻŧā§āĻļāύ āĻĄā§āĻ (āĻĒā§āϰāϏā§āϏ āϤā§āϰāĻŋāϰ āϤāĻžāϰāĻŋāĻ), āĻĒā§āϰāϏā§āϏāĻĄ (āĻĒāĻŋāĻāĻāĻĄāĻŋ āĻĒā§āϰāϏā§āϏ āĻāĻāĻĄāĻŋ), āĻĒā§āϰāϏā§āϏāύā§āĻŽ (āĻĒā§āϰāϏā§āϏ āύā§āĻŽ), āĻāĻŽāĻžāύā§āĻĄāϞāĻžāĻāύāĨ¤ (āϏā§āĻāĻžāϰā§āĻ āĻāĻŽāĻžāύā§āĻĄ)āĨ¤
$process = get-ciminstance -classname win32_process | Select-Object creationdate, processname, processid, commandline, parentprocessidāϏāĻŽāϏā§āϤ TCP āĻāĻŦāĻ UDP āϏāĻāϝā§āĻā§āϰ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻž āĻĒā§āϤā§, $netTCP āĻāĻŦāĻ $netUDP āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻā§āϞāĻŋāĻā§ āϝāĻĨāĻžāĻā§āϰāĻŽā§ Get-NetTCPConnection āĻāĻŦāĻ Get-NetTCPConnection cmdlets āĻŦāϰāĻžāĻĻā§āĻĻ āĻāϰ⧠āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤
$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 cmdlets āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋāĨ¤ āĻāϞā§āύ āϤāĻžāĻĻā§āϰ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻž āϝāĻžāĻ $task āĻāĻŦāĻ $job, āĻāĻžāϰāĻŖ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§, āϏāĻŋāϏā§āĻā§āĻŽā§ āĻ āύā§āĻāĻā§āϞāĻŋ āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻāĻžāĻ āϰāϝāĻŧā§āĻā§, āϤāĻžāϰāĻĒāϰ⧠āĻĻā§āώāĻŋāϤ āĻāĻžāϰā§āϝāĻāϞāĻžāĻĒ āϏāύāĻžāĻā§āϤ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻŦā§āϧ āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻāĻžāĻāĻā§āϞāĻŋ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāĻž āĻŽā§āϞā§āϝāĻŦāĻžāύāĨ¤ āϏāĻŋāϞā§āĻā§āĻ-āĻ āĻŦāĻā§āĻā§āĻ cmdlet āĻāĻŽāĻžāĻĻā§āϰ āĻāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤
$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āĻāύāĻāĻŋāĻāĻĢāĻāϏ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽā§, āĻŦāĻŋāĻāϞā§āĻĒ āĻĄā§āĻāĻž āϏā§āĻā§āϰā§āĻŽ (āĻ āϞā§āĻāĻžāϰāύā§āĻ āĻĄā§āĻāĻž āϏā§āĻā§āϰāĻŋāĻŽ, āĻāĻĄāĻŋāĻāϏ) āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻāĻŋāύāĻŋāϏ āϰāϝāĻŧā§āĻā§āĨ¤ āĻāϰ āĻŽāĻžāύ⧠āĻšāϞ āϝ⧠NTFS-āĻ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞāĻā§ āĻāĻā§āĻāĻžāĻā§āϤ āĻāĻāĻžāϰā§āϰ āĻāĻāĻžāϧāĻŋāĻ āĻĄā§āĻāĻž āϏā§āĻā§āϰāĻŋāĻŽā§āϰ āϏāĻžāĻĨā§ āĻāϰāĻ āϝā§āĻā§āϤ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ ADS āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§, āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻĄā§āĻāĻž āϞā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻž āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āĻ āĻĻā§āĻŦāĻžāϰāĻž āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻšāĻŦā§ āύāĻžāĨ¤ āĻāĻāĻŋ āĻĻā§āώāĻŋāϤ āĻā§āĻĄ āĻāύāĻā§āĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ/āĻ āĻĨāĻŦāĻž āĻĄā§āĻāĻž āϞā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻĒāĻžāĻāϝāĻŧāĻžāϰāĻļā§āϞ⧠āĻŦāĻŋāĻāϞā§āĻĒ āĻĄā§āĻāĻž āϏā§āĻā§āϰāĻŋāĻŽ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰāϤā§, āĻāĻŽāϰāĻž get-item cmdlet āĻāĻŦāĻ āĻŦāĻŋāϞā§āĻ-āĻāύ āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦāĨ¤ Windows āϏāĻŽāϏā§āϤ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āϏā§āĻā§āϰāĻŋāĻŽ āĻĻā§āĻāϤ⧠* āĻāĻŋāĻšā§āύāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āĻāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž $ADS āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰāĻŦāĨ¤
$ADS = get-item * -stream * | where stream âne ':$Data' āϏāĻŋāϏā§āĻā§āĻŽā§ āϞāĻ āĻāύ āĻāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āϤāĻžāϞāĻŋāĻāĻž āĻāĻžāύāĻžāϰ āĻāύā§āϝ āĻāĻāĻŋ āĻāĻĒāϝā§āĻā§ āĻšāĻŦā§, āĻāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ $user āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰāĻŦ āĻāĻŦāĻ āĻāĻāĻŋāϤ⧠quser āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϰ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻŦāĨ¤
$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āĻāĻŋ āĻĒāĻžāĻ ā§āϝ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāĻŦā§āĨ¤
āĻāĻ, āϏāĻžāĻāĻŦāĻžāϰ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻĒā§āĻļāĻžāĻĻāĻžāϰāϰāĻž āϤāĻžāĻĻā§āϰ āĻāĻžāĻā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻžāĻā§āϰ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϤāĻĨā§āϝ āϏāĻŽā§āĻĻā§āϧ āĻāϰāϤ⧠PowerShell āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻ
āĻā§āϞā§āĻĄ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϝā§āĻ āĻāϰā§, āĻāĻĒāύāĻŋ āĻĄāĻžāĻŽā§āĻĒāĻŋāĻ, āĻāĻŦāĻŋ āĻāϤā§āϝāĻžāĻĻāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻŋāĻā§ āϤāĻĨā§āϝ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāϤā§āϏ: www.habr.com
