рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЙрдирдХреЗ рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рд╕рд╣рд┐рдд рдЕрд╡рд░реЛрдзрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдБрдЪ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреАред
рд╕рдЪ рд╣реИ, рдЗрд╕рдореЗрдВ рдореИрдВрдиреЗ рдЙрди рджреЛ рдЕрдкреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
1. рдЬрдм рдЬрд╛рд▓ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕ рд╕рдордп рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
2. рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рд╛рде рдХреЙрд▓ред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЙрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдзрдордХреА рджреЗрддрд╛ рд╣реИ, рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрддрди рддрдХ рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
рдпреЗ рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рддрднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрдм рд╕реНрдкрд╛рдЗрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдпрд╛рдд / рдирд┐рд░реНрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдЖрджрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╡рд░реЛрдзрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдмреЙрдбреА рдореЙрдбрд┐рдлрд┐рдХреЗрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдХреЗ рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдмреЙрдбреА рдореВрд╡рдореЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдЖрд▓реЗрдЦ рд╣реЙрдкрдкреИрдЪ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд╕реНрдкреНрд▓рд┐рдВрдЧ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
JMP NEAR OFFSET рдпрд╛ PUSH ADDR + RET рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд╛рдЬрди (рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдХрдордЬреЛрд░) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдПрдХ рд▓рдВрдмрд╛рдИ disassembler рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
1. рд╣рдо CreateWindowExW рдХреЛ рдХреЙрд▓ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддреЗ рд╣реБрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдкреАрдЖрдИ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдЙрд╕ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдЗрд╕реЗ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рддреАрди рддрддреНрд╡реЛрдВ рдХреЛ рд░рдЦреЗрдВ: рдЯреАрдореЗрдореЛ, рдЯреВрдкреЗрдирдбрд┐рдпрд▓реЙрдЧ рдФрд░ рдЯреАрдмреВрдЯрдиред
рдЖрд╡реЗрджрди рдХрд╛ рд╕рд╛рд░: рдЬрдм рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрд╡рд░реЛрдзрди CreateWindowExW рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдВрд╡рд╛рдж рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, TMemo рд╕рдВрд╡рд╛рдж рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рднреА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдХреЛрдб рдХреЗ рдПрдХ рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН:
1. рдЕрд╡рд░реЛрдзрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдШреЛрд╖рдгрд╛:
const LOCK_JMP_OPKODE: Word = $F9EB; JMP_OPKODE: Word = $E9; type
2. NEAR JMP рдФрд░ рдкрд░рдорд╛рдгреБ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ SHMP JMP рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
3. рдереЛрдерд╛рдкрд╛рд╕реНрдХрдкреНрд▓рд┐рд╕рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдкреНрд░рд╛рд░рдВрдн
рдпрд╣ рд╕рдм рдХреЛрдб рдПрдХ рдЕрд▓рдЧ SpliceHelper рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдм рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рджреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЪрд╛рд╣рд┐рдП:
var HotPathSpliceRec: THotPachSpliceData; WindowList: TStringList;
HotPathSpliceRec рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред рджреВрд╕рд░реЗ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреАред
рдкреНрд░рдкрддреНрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, THotPachSpliceData рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред
procedure TForm1.FormCreate(Sender: TObject); begin
рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВред
function InterceptedCreateWindowExW(dwExStyle: DWORD; lpClassName: PWideChar; lpWindowName: PWideChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall; var S: string; Index: Integer; begin
рдФрд░ рдпрд╣ рдмрдЯрди рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред
procedure TForm1.Button1Click(Sender: TObject); begin
рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ, рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдпрд╣
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ, рджреВрд╕рд░реА рдмрд╛рд░ рдкреЗрдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдВ, рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рд░рджреНрдж рдХрд░реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╕рдВрд╡рд╛рдж рдмрдВрдж рдХрд░реЗрдВ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЬрдм рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ TOpenDialog рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреА 14 рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
рдЕрдм рдкрддрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИред
2. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдПрдВред
рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдмреАрдорд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдорд┐рд▓реА рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдкрд╛рдИ ++ рдЬреИрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╕рд╕реНрддрд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ TTreeView рдХреЛ рдореБрдЦреНрдп рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
type TdlgWindowTree = class(TForm) WindowTreeView: TTreeView; procedure FormCreate(Sender: TObject); private procedure Sys_Windows_Tree(Node: TTreeNode; AHandle: HWND; ALevel: Integer); end; ... procedure TdlgWindowTree.FormCreate(Sender: TObject); begin Sys_Windows_Tree(nil, GetDesktopWindow, 0); end; procedure TdlgWindowTree.Sys_Windows_Tree(Node: TTreeNode; AHandle: HWND; ALevel: Integer); type TRootNodeData = record Node: TTreeNode; PID: Cardinal; end; var szClassName, szCaption, szLayoutName: array[0..MAXCHAR - 1] of Char; szFileName : array[0..MAX_PATH - 1] of Char; Result: String; PID, TID: Cardinal; I: Integer; RootItems: array of TRootNodeData; IsNew: Boolean; begin
рджрд░рдЕрд╕рд▓, рд╕рдм рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

3. рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ
рдЕрдм рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
1. рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдПрдВ рдФрд░ рдЙрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
2. рджреВрд╕рд░реЗ рдЕрдзреНрдпрд╛рдп рд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдЪрд▓рд╛рдПрдВ
3. рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рд╡рд┐рдВрдбреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рдВрд╡рд╛рдж рдХреЛ рдмрдВрдж рдХрд░реЗрдВред
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

рдСрдЯреЛ-рд╕реБрдЭрд╛рд╡ рдбреНрд░реЙрдкрдбрд╛рдЙрди рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ:

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

рдпрд╣ MessageBoxW рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рд╣реИред рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдкрд╛рдВрдЪ рдПрдирдУрдкреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдП рдЧрдП рдПрдордУрд╡реА рдИрдбреАрдЖрдИ, рдИрдбреАрдЖрдИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ HotPatch рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реЛрдзрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ CreateWindowExW рд╢рд╛рдорд┐рд▓ рд╣реИред
рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рдХреЛрдб рдХреБрдЫ рднреА рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдд рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛:

рджрд░рдЕрд╕рд▓, рдпрд╣ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
MOV EDI, EDI рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп, JMP -7 рдХреЛрдб рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкрд╛рдВрдЪ рдПрдирдУрдкреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдХреВрдж рд╣реИред
рдпрджрд┐ рд╣рдо CreateWindowExW рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдкрддреЗ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧреА PUSH EBP рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкрддреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдХреЛрдб рд░реВрдк рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
type TCreateWindowExW = function(dwExStyle: DWORD; lpClassName: PWideChar; lpWindowName: PWideChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; AMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall; function InterceptedCreateWindowExW(dwExStyle: DWORD; lpClassName: PWideChar; lpWindowName: PWideChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall; var S: string; Index: Integer; ACreateWindowExW: TCreateWindowExW; begin
рджреЛ рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдСрдлрд╕реЗрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ ACreateWindowExW рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ:

рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рджреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

рдареАрдХ рд╣реИ, рд╣рдордиреЗ рдЕрдкрдиреЗ "рдиреБрдХрд╕рд╛рди" рдХреЛ рдкрд╛рдпрд╛, рд╕рднреА 26 рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ рдЬрдм TOpenDialog рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ 14 рдирд╣реАрдВред
рдпрд╣ рд╕рднреА рдХреБрдЦреНрдпрд╛рдд рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХрд╛ рдорд╛рдорд▓рд╛ рдерд╛, рдЬрд┐рд╕реЗ рдпрджрд┐ рдЖрдк рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдХреНрд░рд┐рдПрдЯрд╡рд┐рдВрдбреЛрдПрдХреНрд╕рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

5. рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╕реЗ рд╣реБрдХ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИред
рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде, рд╡рд╣реА рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╣рдореЗрдВ "рд▓реЙрдХ xchg рд╢рдмреНрдж ptr [ecx], рдХреБрд▓реНрд╣рд╛рдбрд╝реА" рдирд┐рд░реНрджреЗрд╢ рдкрд░ SpliceLockJmp рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдкреГрд╖реНрда рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреВрд╕рд░реЗ рдереНрд░реЗрдб рд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдорд╛рд░реЗ рдереНрд░реЗрдб рдореЗрдВ рд╣рдордиреЗ рдЗрд╕ рдкрддреЗ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреГрд╖реНрда рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдВрдЧреАред
рдпрд╣ рдареАрдХ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╕рд╛рдордирд╛ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдХрд┐рдпрд╛ рдерд╛:
рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд┐рдВрдЧ рд░рд┐рдХрд╡ ред
рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдЪ рд╣реИ, рдХрд┐рд╕реА рдХреЛ рдЕрд╡рд░реЛрдзрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдереНрд░реЗрдбрд╕реЗрдлрд╝ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред
6. рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдФрд░ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реИред
рдЬрдм HotPatch рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд╡рд░реЛрдзрди рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ Microsoft рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдкрд╛рдВрдЪ рдПрдирдУрдкреА рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдВрдЧреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдПрдХ рдбрдмрд▓-рдмрд╛рдЗрдЯ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдФрд░ рдХреБрдЫ рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдк MessageBoxW рдпрд╛ CreateWindowExW рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧреА PUSH EBP рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдмрд╛рдЗрдЯ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪреВрдВрдХрд┐ рдпрд╣ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рдЦрд╛рд▓реА рдХреЙрд▓ MOV EDI, EDI рд╕реЗ рдкрд╣рд▓реЗ рд╣реИред рд▓рдВрдмрд╛рдИ рдореЗрдВ рддреАрди рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдЪ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рджреЛ-рдмрд╛рдЗрдЯ рдЕрдиреБрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЦрд╛рд▓реА рд╕реНрдЯрдм рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╢рд░реАрд░ рдХреЛ рдлреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣реЙрдЯрдкреИрдЪ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╢рд░реНрддреЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИрдВ (рдкрд╛рдВрдЪ рдПрдирдУрдкреА рдФрд░ 2 рдмрд╛рдЗрдЯреНрд╕)ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг RtlCreateUnicodeString рд╣реИред
рдпрд╣ рд╕рд╣рд╛рдпрдХ PUSH $ 0C рдЕрдиреБрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

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

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рдо рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдорд╢реАрди рдХреЛрдб рд╣реИ рдФрд░ рдЗрд╕реЗ HotPathSpliceRec.LockJmp рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗред
рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдвреЗрд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ (рдареАрдХ рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдвреЗрд░ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд▓реНрдлреА рд╕реАрдзреЗ рд╣реАрдк рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдирд┐рд╖реНрдкрд╛рджрди рдЧреБрдг рдирд╣реАрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ CAL рдХреЛ рдПрдбреНрд░реЗрд╕рдкрд╛рдЯрдкрд╛рдЗрд╕iceRec.LockJmp рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред
рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдкреГрд╖реНрда рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рднрджреНрджрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЛ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рджреВрд╕рд░реЗ, рднрд▓реЗ рд╣реА рд╣рдо рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ JMP рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рдж рд╕рд╣реА рдкрддреЗ рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ $ 77B062FB рд╣реЛрдЧрд╛, рдкрд┐рдЫрд▓реА рддрд╕реНрд╡реАрд░ рджреЗрдЦреЗрдВ), рдЬреЛ рдХрд┐ рдмреБрд▓рд╛рдП рдЧрдП рдЕрдиреБрджреЗрд╢ рдХреА рднрд░рдкрд╛рдИ рдХрд░рддрд╛ рд╣реИред
рддреАрд╕рд░рд╛, рдХреЙрд▓ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдореЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдЬрдЧрд╣ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдлрдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрдо рд╕реЗ рдХрдо рд╣рдореЗрдВ рдПрд╕рдо рдЖрд╡реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
рдЪрд▓реЛ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВредASM рдЗрдВрд╕рд░реНрдЯ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕реМрдВрдкрдХрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╛рдиреА рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдПрдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд▓рд┐рдЦреЗрдВ:
function TrampolineRtlCreateUnicodeString(DestinationString: PUNICODE_STRING; SourceString: PWideChar): Integer; stdcall; begin asm db $90, $90, $90, $90, $90, $90, $90 end; end; function InterceptedRtlCreateUnicodeString(DestinationString: PUNICODE_STRING; SourceString: PWideChar): Integer; stdcall; begin Result := TrampolineRtlCreateUnicodeString(DestinationString, SourceString); ShowMessage(DestinationString^.Buffer); end;
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдХреЙрд▓ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред
рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, 7 рдмрд╛рдЗрдЯреНрд╕ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рджреЛ-рдмрд╛рдЗрдЯ рдЬрд╛рдо рдЕрдиреБрджреЗрд╢ рдФрд░ рдкрд╛рдВрдЪ-рдмрд╛рдЗрдЯ NEAR JMP рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдХреЛрдб рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдЕрдм рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВред
рдпрджрд┐ рд╣рдо рдЖрд░рдХреНрд╖рд┐рдд рдмреНрд▓реЙрдХ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЗрди 7 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдбреЗрд▓реНрдлреА рдХреА рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд▓реНрдлреА рд╕рдВрдХрд▓рдХ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреИрдЪ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧрд╛:
function TrampolineRtlCreateUnicodeString(DestinationString: PUNICODE_STRING; SourceString: PWideChar): Integer; stdcall; begin asm push $0C
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:

рдпрд╛рдиреА рд╕реНрдЯреИрдХ рдкрд░, рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдбреЗрд╕реНрдЯрд┐рдиреЗрд╢рдирд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рд╕реЛрд░реНрд╕рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдИрдмреАрдкреА рдФрд░ рдИрд╕реАрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд┐рд▓реНрдХреБрд▓ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗред
рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрд░рдВрдн рд╕реЗ рд╣реА рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдХреЛрдб рд╕рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрд▓реЙрдЧ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд▓рд┐рдЦ рджреЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреВрджрдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рдирд┐рдпрдВрддреНрд░рдг рдЙрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдирд╣реАрдВ рд▓реМрдЯреЗрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд╡рд┐рдХреГрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреНред рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрдзрди рд╣реИрдВрдбрд▓рд░ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрдВрдХреНрд╢рди рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ рдордВрдЧрд▓рд╛рдЪрд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
type UNICODE_STRING = record Length: WORD; MaximumLength: WORD; Buffer: PWideChar; end; PUNICODE_STRING = ^UNICODE_STRING; function RtlCreateUnicodeString(DestinationString: PUNICODE_STRING; SourceString: PWideChar): BOOLEAN; stdcall; external 'ntdll.dll'; ... procedure TForm2.FormCreate(Sender: TObject); begin
рдЕрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╡рд░реЛрдзрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЫрдареЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╕реНрдкреНрд▓рд┐рд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк, рд╣реЙрдЯрдкреИрдЪ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд╡рд░реЛрдзрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИред рдпрд╣ рдПрдордУрд╡реА рдИрдбреАрдЖрдИ, рдИрдбреАрдЖрдИ рд╕реНрдЯрдм рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд╡рд░реЛрдзрди рд╣реЛрдиреЗ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ ред
рдореИрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдХреЛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рдереА, рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫреЛрдЯреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдкрдЪрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛ :)
рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдвреЗрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдкрдардиреАрдп рд╣реЛрдЧрд╛ (рдкреВрд░реНрд╡ рдЙрджрд╛рд╣рд░рдг рдереЗ)ред
рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд░рд╛рд╕реНрддрд╛ред
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб
рдЗрд╕ рд▓рд┐рдВрдХ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
┬й рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ (Rouse_) Bagel
рдордИ 2013