ื›ืœื™ ืขื–ืจ ืœื—ื™ื‘ื•ืจ ืฆืœ ืื ื•ืฉื™ ืฉืœ ืœื-ืžื ื”ืœ ืœื”ืคืขืœื•ืช ืžืฉืชืžืฉ RDP ื‘-WinServer 2012R2

ื”ื‘ืขื™ื” ื‘ืชืงื•ืคืช ื”ื”ืกื’ืจ ืฉืœ ื”ืืจื’ื•ืŸ ื”ืคื›ื” ืœื”ื™ื•ืช ื”ื‘ืื”: ื‘ืืžืช ื™ืฉ ืฆื•ืจืš ืœืžื–ืขืจ ืืช ืžืกืคืจ ื”ื‘ื™ืงื•ืจื™ื ื‘ืžืฉืจื“ื™ื ืขืœ ื™ื“ื™ ืžื•ืžื—ื™ื ื”ืžืกืคืงื™ื ืฉื™ืจื•ืช ื•ื™ื™ืขื•ืฅ ืขืœ ืชื•ื›ื ื•ืช ื™ื™ืฉื•ืžื™ื, ื•ืœืžืขืŸ ื”ืืžืช, ืžืฉืชืžืฉื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžื ืฆืœื™ื ืœืจืขื” ืืช ืขื–ืจืชื ืฉืœ ืžื•ืžื—ื™ื ืžื‘ืœื™ ืœืจืฆื•ืช ืœื”ืชืขืžืง. ืืช ื”ื ื•ืฉื ืขืฆืžื•, ื”ื ืื•ืžืจื™ื "ื”ื ื™ื‘ื•ืื• - ื”ื ื™ืขื–ืจื• - ื”ื ื™ืขืฉื• ืืช ื–ื”, ืื‘ืœ ืื ื™ ืืขืฉืŸ / ืืฉืชื” ืงืคื” ื•ื›ื•'." ื™ื™ืขื•ืฅ ื˜ืœืคื•ื ื™ ื‘ืขืช ืฉื™ืชื•ืฃ ืฉืจืช ื™ืขื™ืœ ื™ื•ืชืจ ืื ืืชื” ืฆื•ืคื” ื‘ืžืกืš ื”ืžืจื•ื—ืง.

ื›ืœื™ ืขื–ืจ ืœื—ื™ื‘ื•ืจ ืฆืœ ืื ื•ืฉื™ ืฉืœ ืœื-ืžื ื”ืœ ืœื”ืคืขืœื•ืช ืžืฉืชืžืฉ RDP ื‘-WinServer 2012R2

ืœืื—ืจ "ื”ืžืฆืืช" ื”ืื•ืคื ื™ื™ื ืฉืœื ื•, ืžื™ื“ืข ืฉืคื•ื™ ืขืœ ื ื•ืฉื ื”ืžืืžืจ ื”ื•ืคื™ืข: RDS Shadow - ื—ื™ื‘ื•ืจ ืฆืœ ืœื”ืคืขืœื•ืช ืžืฉืชืžืฉ RDP ื‘-Windows Server 2012 R2 ืื• ืžืฆื‘ ืฆืœ ืžืฉืชืžืฉ ืœืœื ื”ืจืฉืื•ืช ื‘ืฉืจืช Windows ืื• ื”ืืฆืœืช ื ื™ื”ื•ืœ ืžืคื’ืฉื™ RDP. ื›ื•ืœื ื›ืจื•ื›ื™ื ื‘ืฉื™ืžื•ืฉ ื‘ืงื•ื ืกื•ืœื”, ืืคื™ืœื• ืขื ืืœืžื ื˜ื™ื ืฉืœ ื“ื™ืืœื•ื’ ืคืฉื•ื˜.

ื›ืœ ื”ืžื™ื“ืข ืœืžื˜ื” ืžื™ื•ืขื“ ืœืžื™ ืกื•ื‘ืœ ืกื˜ื™ื•ืช ื—ืจื™ื’ื•ืช ื‘ื“ืจืš ื›ืœืœ ื›ื“ื™ ืœื”ืฉื™ื’ ืืช ื”ืชื•ืฆืื” ื”ืจืฆื•ื™ื”, ื”ืžืฆืืช ืฉื™ื˜ื•ืช ืžื™ื•ืชืจื•ืช.
ื›ื“ื™ ืœื "ืœืžืฉื•ืš ืืช ื”ื—ืชื•ืœ ื‘ื–ื ื‘", ืืชื—ื™ืœ ืขื ื”ืื—ืจื•ืŸ: ื”ืื•ืคื ื™ื™ื ืขื•ื‘ื“ื™ื ืขื‘ื•ืจ ื”ืžืฉืชืžืฉ ื”ืžืžื•ืฆืข ื‘ืืžืฆืขื•ืช ื›ืœื™ ื”ืฉื™ืจื•ืช AdmiLink, ืขืœ ื›ืš ื‘ื–ื›ื•ืช ืžื—ื‘ืจื•.

I. ืžืกื•ืฃ ื•ืฆืœ RDP.

ืžืื– ื”ืฉื™ืžื•ืฉ ืขื ื–ื›ื•ื™ื•ืช ืžื ื”ืœ ืฉืœ ืžืกื•ืฃ ืžื ื”ืœ ื”ืฉืจืชื™ื -> QuickSessionCollection -> ืขืœ ื™ื“ื™ ืœื—ื™ืฆื” ืขืœ ื”ื”ืคืขืœื” ืฉืœ ื”ืžืฉืชืžืฉ ื”ืžืขื ื™ื™ืŸ, ื‘ื—ื™ืจืช Shadow ืžืชืคืจื™ื˜ ื”ื”ืงืฉืจ ืœืฆื•ื•ืช ื”ืžื“ืจื™ืš ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ืชื•ื›ื ื”, ืื™ื ื” ืื•ืคืฆื™ื”, ื ื‘ื—ื ื” ืฉื™ื˜ืช "ืขืฅ" ื ื•ืกืคืช, ื›ืœื•ืžืจ:

1. ื’ืœื” ืืช ืžื–ื”ื” ื”-RPP ืฉืœ ื”ื”ืคืขืœื”:

query user | findstr Administrator

ืื•ึน:

qwinsta | findstr Administrator 

ื™ืชืจ ืขืœ ื›ืš "| findstr ืžื ื”ืœ"ื–ื” ื”ื™ื” ื ื•ื— ืจืง ื›ืฉื™ื“ืขืช ืžื” ื‘ื“ื™ื•ืง ืžื ื”ืœ ืืชื” ืฆืจื™ืš, ืื• ื”ืฉืชืžืฉ ืจืง ื‘ื—ืœืง ื”ืจืืฉื•ืŸ ื›ื“ื™ ืœืจืื•ืช ืืช ื›ื•ืœื ืžื—ื•ื‘ืจื™ื ืœืฉืจืช.

ื›ืœื™ ืขื–ืจ ืœื—ื™ื‘ื•ืจ ืฆืœ ืื ื•ืฉื™ ืฉืœ ืœื-ืžื ื”ืœ ืœื”ืคืขืœื•ืช ืžืฉืชืžืฉ RDP ื‘-WinServer 2012R2

2. ื”ืชื—ื‘ืจ ืœื”ืคืขืœื” ื–ื•, ื‘ืชื ืื™ ืฉื–ื” ื‘ื“ื•ืžื™ื™ืŸ ืžื“ื™ื ื™ื•ืช ืงื‘ื•ืฆืชื™ืช ื”ืืคืฉืจื•ืช "ื”ื’ื“ืจ ื›ืœืœื™ ืฉืœื™ื˜ื” ืžืจื—ื•ืง ืขื‘ื•ืจ ื”ืคืขืœื•ืช ืžืฉืชืžืฉ ืฉืœ ืฉื™ืจื•ืชื™ ืฉื•ืœื—ืŸ ืขื‘ื•ื“ื” ืžืจื•ื—ืง" ื ื‘ื—ืจื” ื›ืืฉืจ ืœืคื—ื•ืช ื”ืืคืฉืจื•ืช "ืคืงื— ื”ืคืขืœื” ืขื ื”ืจืฉืืช ืžืฉืชืžืฉ" ื ื‘ื—ืจื” (ื™ื•ืชืจ):

mstsc /shadow:127

ืฉื™ืžื• ืœื‘ ืฉื”ืจืฉื™ืžื” ืชื›ื™ืœ ืจืง ื›ื ื™ืกื•ืช ืžืฉืชืžืฉ.

ืื ื™ ื—ื•ื–ืจ ืขืœ ื›ืš ืฉืœืœื ื–ื›ื•ื™ื•ืช ืื“ืžื™ืŸ ืชืงื‘ืœ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ื›ืœื™ ืขื–ืจ ืœื—ื™ื‘ื•ืจ ืฆืœ ืื ื•ืฉื™ ืฉืœ ืœื-ืžื ื”ืœ ืœื”ืคืขืœื•ืช ืžืฉืชืžืฉ RDP ื‘-WinServer 2012R2

ืื‘ืœ ืœืฆื•ืจืš ืื™ืชื•ืจ ื‘ืื’ื™ื ืจืืฉื•ื ื™ ืฉืœ ื”ืชื•ื›ื ื™ืช ืฉืชื™ื“ื•ืŸ, ื”ืฉืชืžืฉืชื™ ื‘ื—ืฉื‘ื•ืŸ ืขื ื–ื›ื•ื™ื•ืช ืžื ื”ืœ.

II. ืชื›ื ื™ืช

ืื– ื”ืฆื”ืจืช ื”ื‘ืขื™ื”: ื™ืฆื™ืจืช ืžืžืฉืง ื’ืจืคื™ ืคืฉื•ื˜ ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœื—ื•ืฉ ื”ืฆืœ ืฉืœ ื”ืžืฉืชืžืฉ ื‘ืจืฉื•ืชื•, ืฉืœื™ื—ืช ื”ื•ื“ืขื” ืœืžืฉืชืžืฉ. ืกื‘ื™ื‘ืช ื”ืชื›ื ื•ืช ืฉื ื‘ื—ืจื” ื”ื™ื Lazarus.

1. ืื ื• ืžืงื‘ืœื™ื ืืช ืจืฉื™ืžืช ื”ื“ื•ืžื™ื™ื ื™ื ื”ืžืœืื” ืฉืœ ืžืฉืชืžืฉื™ื "ื›ื ื™ืกื”" - "ืฉื ืžืœื" ืžื”ืžื ื”ืœ, ืื• ืฉื•ื‘ ื“ืจืš ื”ืžืกื•ืฃ:

wmic useraccount get Name,FullName 

ืืฃ ืื—ื“ ืœื ืื•ืกืจ ืืคื™ืœื• ืืช ื–ื”:

wmic useraccount get Name,FullName > c:testusername.txt

ืื ื™ ืื’ื™ื“ ืžื™ื“ ืฉืœื–ืืจื•ืก ื”ื™ื™ืชื” ื‘ืขื™ื” ื‘ืขื™ื‘ื•ื“ ื”ืงื•ื‘ืฅ ื”ื–ื”, ืฉื›ืŸ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ืงื™ื“ื•ื“ ืฉืœื• ื”ื•ื UCS-2, ืื– ืคืฉื•ื˜ ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื”ืžื™ืจ ืื•ืชื• ื™ื“ื ื™ืช ืœ-UTF-8 ืจื’ื™ืœ. ื™ืฉ ื”ืจื‘ื” ื›ืจื˜ื™ืกื™ื•ืช ื‘ืžื‘ื ื” ื”ืงื‘ืฆื™ื, ืื• ื™ื•ืชืจ ื ื›ื•ืŸ ื”ืจื‘ื” ืจื•ื•ื—ื™ื, ืฉื”ื•ื—ืœื˜ ืœืขื‘ื“ ืื•ืชื ื‘ืื•ืคืŸ ืชื›ื ื•ืชื™, ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืชื™ืคืชืจ ื‘ืขื™ื™ืช ื”ืงื™ื“ื•ื“, ื•ื”ืงื•ื‘ืฅ ื™ืขื•ื“ื›ืŸ ื‘ืื•ืคืŸ ืคืจื•ื’ืจืžื˜ื™.

ืœื›ืŸ, ื”ืจืขื™ื•ืŸ ื”ื•ื ืฉืชื”ื™ื” ืชื™ืงื™ื” ื ื’ื™ืฉื” ืœืžืฉืชืžืฉื™ ื”ืชื•ื›ื ื”, ืœืžืฉืœ c:test, ืฉื‘ื” ื™ื”ื™ื• 2 ืงื‘ืฆื™ื: ื”ืจืืฉื•ืŸ ืขื ื›ื ื™ืกื” ื•ืฉื ืžืœื, ื”ืฉื ื™ ืขื id_rdp ื•ื›ื ื™ืกื” ืฉืœ ืžืฉืชืžืฉื™ื. ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžืขื‘ื“ื™ื ืืช ื”ื ืชื•ื ื™ื ื”ืœืœื• ื›ืžื™ื˜ื‘ ื™ื›ื•ืœืชื ื• :).

ื‘ื™ื ืชื™ื™ื, ื›ื“ื™ ืœืฉื™ื™ืš ืœืจืฉื™ืžืช ื”ืคืขืœื•ืช, ืื ื• ืžืขื‘ื™ืจื™ื ืืช ื”ืชื•ื›ืŸ ื”ื–ื” (ื›ื ื™ืกื” ื•ืฉื ืžืœื) ืœืžืขืจืš:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d ะณะปะพะฑะฐะปัŒะฝั‹ะน ะฟัƒั‚ัŒ ะบ ั€ะฐะทะผะตั‰ะตะฝะธัŽ ั„ะฐะนะปะพะฒ 
f1:=f_d+'user_name.txt';     //ะทะฐะดะฐั‡ะฐ ัั‡ะธั‚ะฐั‚ัŒ ะฒ ะผะฐััะธะฒ ัะพะดะตั€ะถะธะผะพะต ั„ะฐะนะปะฐ
fL := TStringList.Create; // ัั‚ั€ะพะบัƒ ะฟะพะดะฒะตั€ะณะฝะตะผ ะผะตั‚ะฐะผะฐั€ั„ะพะทะฐะผ ั ั€ะฐะทะดะตะปะธั‚ะตะปัะผะธ
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // ะžั‚ะบั€ั‹ั‚ัŒ ั„ะฐะนะป ะดะปั ั‡ั‚ะตะฝะธั
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // ะกั‡ะธั‚ั‹ะฒะฐะตะผ ัั‚ั€ะพะบะธ, ะฟะพะบะฐ ะฝะต ะทะฐะบะพะฝั‡ะธั‚ัั ั„ะฐะนะป
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //ะทะฐะผะตะฝัะตะผ ะฟะตั€ะฒั‹ะน ะฟะพะฟะฐะฒัˆ.2ะฟั€ะพะฑะตะปะฐ ั€ะฐะทะดะตะปะธั‚ะตะปะตะผ |
// ัƒะดะฐะปัะตะผ ะฒัะต ะดะฒะพะนะฝั‹ะต ะฟั€ะพะฑะตะปั‹
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //ะตัะปะธ ั€ะฐะทะดะตะปะธั‚ะตะปัŒ ััƒั‰ะตัั‚ะฒัƒะตั‚ ะทะฐะฝะพัะธะผ ะตะณะพ ะฒ ะผะฐััะธะฒ
fL.DelimitedText :=line1; // ั€ะฐะทะฑะธะฒะฐะตะผ ะฝะฐ ัั‚ะพะปะฑั†ั‹
if (fL[0]<>'') then //ะตัะปะธ ัƒั‡ะตั‚ะบะฐ ะธะผะตะตั‚ ะธะผั
begin //ะฒะฝะพัะธะผ ะตะต ะฒ ะผะฐััะธะฒ
 inc(i); // ะธะทะฑะฐะฒะปัะตะผัั ะพั‚ ะฒะพะทะผะพะถะฝั‹ั… ะพะดะธะฝะพั‡ะฝั‹ั… ะฟั€ะพะฑะตะปะพะฒ ะฒ ะปะพะณะธะฝะต
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // ะ“ะพั‚ะพะฒะพ. ะ—ะฐะบั€ั‹ะฒะฐะตะผ ั„ะฐะนะป.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('ะžัˆะธะฑะบะฐ ะพะฑั€ะฐะฑะพั‚ะบะธ ั„ะฐะนะปะฐ. ะ”ะตั‚ะฐะปะธ: '+E.Message);
 end;end;

ืื ื™ ืžืชื ืฆืœ ืขืœ "ื”ืจื‘ื” ืงื•ื“", ื”ื ืงื•ื“ื•ืช ื”ื‘ืื•ืช ื™ื”ื™ื• ืชืžืฆื™ืชื™ื•ืช ื™ื•ืชืจ.

2. ื‘ืขื–ืจืช ืื•ืชื” ืฉื™ื˜ื” ืžื”ืคืกืงื” ื”ืงื•ื“ืžืช, ืื ื• ืงื•ืจืื™ื ืืช ื”ืชื•ืฆืื” ืฉืœ ืขื™ื‘ื•ื“ ื”ืจืฉื™ืžื” ืœืืœืžื ื˜ StringGrid, ื‘ืขื•ื“ ืื ื™ ืืชืŸ ืคื™ืกืช ืงื•ื“ "ืžืฉืžืขื•ืชื™ืช":

2.1 ืื ื• ืžืงื‘ืœื™ื ืืช ื”ืจืฉื™ืžื” ื”ื ื•ื›ื—ื™ืช ืฉืœ ื”ืคืขืœื•ืช RDP ื‘ืงื•ื‘ืฅ:

f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // ะผะพะถะฝะพ ะธ ะฟะพะดะพะปัŒัˆะต ะถะดะฐั‚ัŒ ะฟะพะบะฐ ั„ะฐะนะป ะดะปั ั‡ั‚ะตะฝะธั ัะพะทะดะฐะตั‚ัั

2.2 ืขื‘ื“ ืืช ื”ืงื•ื‘ืฅ (ืจืง ืฉื•ืจื•ืช ืงื•ื“ ืžืฉืžืขื•ืชื™ื•ืช ืžืกื•ืžื ื•ืช):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //ะบะธะดะฐะตะผ ะฒ ั†ะธะบะปะต ะฒ StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //ัƒะฑะธั€ะฐะตะผ ะธะท ะปะพะณะธะฝะฐ ะฟั€ะพะฑะตะปั‹
if (SearchArr(login1)>=0) then //ะธั‰ะตะผ ะฒ ะผะฐััะธะฒะต ะธะท ะฟ1. ะปะพะณะธะฝ ะธ ะทะฐะฟะธัั‹ะฒะฐะตะผ ะฒ ั‚ะฐะฑะปะธั†ัƒ ะคะ˜ะž
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; // ะปะธะฑะพ ะทะฐะฟะธัั‹ะฒะฐะตะผ ะฟะปัŽัะธะบ:)
.... //ะฒ ะทะฐะฒะธัะธะผะพัั‚ะธ ะพั‚ ะฒั‹ะฑะพั€ะฐ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ัะพั€ั‚ะธั€ัƒะตะผ ะธ ั„ะพั€ะผะฐั‚ะธั€ัƒะตะผ ะฟะพ ะดะฐะฝะฝั‹ะผ
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. ื—ื™ื‘ื•ืจ ื™ืฉื™ืจ ื‘ืขืฆืžื• ื‘ืœื—ื™ืฆื” ืขืœ ื”ืฉื•ืจื” ืขื ื”ืžืฉืชืžืฉ ื•ืžืกืคืจ ื”ืคื’ื™ืฉื” ืฉืœื•:

  id:=(StringGrid1.Row);// ัƒะทะฝะฐะตะผ ะฝะพะผะตั€ ัั‚ั€ะพะบะธ  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; //ะฟะพะปัƒั‡ะฐะตะผ ะธะดะตะฝั‚ะธั„ะธะบะฐั‚ะพั€ rdp
  cmdline:='/c mstsc /shadow:'+ ids; //ะธ ะฟะพะดะบะปัŽั‡ะฐะตะผัั....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. ื ืขืฉื• ืขื•ื“ ื›ืžื” ืงื™ืฉื•ื˜ื™ื, ื›ืžื• ืžื™ื•ืŸ ื‘ืœื—ื™ืฆื” ืขืœ ื›ืคืชื•ืจ ื”ืจื“ื™ื•, ื•ื”ื•ื“ืขื•ืช ืœืžืฉืชืžืฉ ืื• ืœื›ืœ ื”ืžืฉืชืžืฉื™ื.

ื›ืœื™ ืขื–ืจ ืœื—ื™ื‘ื•ืจ ืฆืœ ืื ื•ืฉื™ ืฉืœ ืœื-ืžื ื”ืœ ืœื”ืคืขืœื•ืช ืžืฉืชืžืฉ RDP ื‘-WinServer 2012R2

โ†’ ื ื™ืชืŸ ืœืจืื•ืช ืืช ืงื•ื“ ื”ืžืงื•ืจ ื”ืžืœื ื›ืืŸ

III. ืฉื™ืžื•ืฉ ื‘-AdminLink - ืžื” ืฉืจืื™ืชื™:

AdminLink ืื›ืŸ ืžื™ื™ืฆืจ ืงื™ืฆื•ืจ ื“ืจืš ืฉืžืคื ื” ืœืžื™ืงื•ื ื›ืœื™ ื”ืฉื™ืจื•ืช admilaunch.exe, ื•ืขื•ืชืง ืื™ืฉื™ ืฉืœ ื›ืœื™ ื”ื”ืฉืงื” AdmiRun.Exe ืืฉืจ ื ืžืฆื ื‘ืชื™ืงื™ื™ื” ืฉืœ ื”ืžืฉืชืžืฉ, ืœืžืฉืœ ื•ืืกื™ื”, ื”ืงืœื“ C:UsersvasyaWINDOWS. ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื ื”ื›ืœ ื›ืœ ื›ืš ื’ืจื•ืข: ืืชื” ื™ื›ื•ืœ ืœืฉื—ืง ืขื ื–ื›ื•ื™ื•ืช ื’ื™ืฉื” ืœืงื•ื‘ืฅ ืงื™ืฆื•ืจื™ ื”ื“ืจืš ื•ืื—ืจื™ื ื›ื“ื™ ืœื ืงื•ืช ืืช ืžืฆืคื•ืŸ ื”ืžื ื”ืœ ืฉืœืš.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”