рдШреБрдЯрдиреЗ рдкрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдЯреАрд╕реАрдкреА рд╕реНрдирд┐рдлрд░ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ (рднрд╛рдЧ рджреЛ)

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

рдЫрд╡рд┐
рдХрдЯ рдХреЗ рддрд╣рдд рд╕реВрддреНрд░, рд╡рд┐рд╡рд░рдг рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг ...

рдЗрд╕рд▓рд┐рдП, рддрдерд╛рдХрдерд┐рдд рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдордп рд▓рд┐рдпрд╛ рд╕реНрдерд╛рдпреА "рдЯреНрд░реИрдкреНрд╕ рдЬрд┐рдиреНрд╣реЗрдВ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд░реАрд░рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рд╣реИ , рдФрд░ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рд╣реИ ред

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

рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ WS2_32 рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ред рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг (рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП) рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИред

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

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

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

"рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╡рд┐рд╢реЗрд╖ рддрдХ" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЬрд╛рд▓ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЙрди рд╕рднреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрд╛рдпрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА WinSock рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ рдЬреИрд╕реЗ XP, XPSP1, XPSP2, XPSP3, Vista, VistaSP1, Vista PU, рд╡рд┐рдВрдбреЛрдЬ 7, рдЖрджрд┐ред рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдЕрджреНрдпрддрди рд╣реИрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд▓ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЗрддрдиреЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

"рдЬрдЯрд┐рд▓ рддрд░реНрдХ" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛
рдХ) рд╣рдореЗрд╢рд╛ "рдкреВрд░реЗ" рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдСрдкрдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдФрд░ рдХрд╣реАрдВ рдмреАрдЪ рдореЗрдВ рдирд╣реАрдВред
b) рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬрдЧрд╣ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг "рд╡рд┐рджреЗрд╢реА" рдЬрд╛рд▓ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдШреБрд╕рдкреИрда рдХрд░рдиреЗ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд╣рд▓рд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВрдЧреЗ JMP XX XX XX XX XX, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ PUSH XX XX XX XX RETN, рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреБрдЫ рднреАред рдЗрд╕рд▓рд┐рдП, JMP рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреВрд╕рд░реА рдЬрдЧрд╣ рд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХреНрд░рдордг рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕рдВрдХреНрд░рдордг рдХреЛ рдЧрд┐рдирд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди PUSH-RETN рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрддреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдФрд░ "рдХреБрдЫ рднреА" рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд╛рди рдХрд╛ рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

00004EE1: 3C01 cmp al,1 00004EE3: 7404 je 000004EE9 00004EE5: E916010000 jmp 000005000 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рд░рдХреНрддрд╕реНрд░рд╛рд╡реА рдорд╛рдорд▓рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:


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

рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ WS2_32 рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╛рдзрд╛рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╕рднреА рдХрд╛рд░реНрдп рдЬреЛ рд╣рдо рдЕрд╡рд░реЛрдзрди рдХрд░рддреЗ рд╣реИрдВ, рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ:

 8BFF mov edi,edi 55 push ebp 8BEC mov ebp,esp 83ECXX sub esp,0000000XX 

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

рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо Interceptor.cpp рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ ... рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдирдП рддрд░реАрдХреЗ рд╕реЗ рдкреБрд░рд╛рдиреА рд╡рд┐рдзрд┐ рдХреЗ рдЪрдХ рд╕реЗ рдЕрдирд╛рдЬ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдХреЛрдб рдЬреЛрдбрд╝ рджреЗрдЧрд╛:

 /************************************************************************/ /*     */ /************************************************************************/ BOOL hookInstall(PAPIHOOK thisHook) { ... #ifdef PERSISTENT_HOOKS //     thisHook->oldCodeSize = 0; //   5         //         .    //        (5  ) for (; thisHook->oldCodeSize < HOOK_CODE_SIZE; ) { //     int opSize = getX86InstructionLength((PBYTE) thisHook->oldAddr + thisHook->oldCodeSize); //   thisHook->oldCodeSize += opSize; } //       +   thisHook->oldCode = (UCHAR *) xmalloc(thisHook->oldCodeSize + HOOK_CODE_SIZE); if (NULL == thisHook->oldCode) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } DWORD fl; //  EXECUTE     DEP VirtualProtect(thisHook->oldCode, thisHook->oldCodeSize + HOOK_CODE_SIZE, PAGE_EXECUTE_READWRITE, &fl); //          memcpy(thisHook->oldCode, thisHook->oldAddr, thisHook->oldCodeSize); //         ... thisHook->oldCode[thisHook->oldCodeSize] = asmJMP; // ...      , //    JMP DWORD *d = (DWORD*) ((PBYTE) (thisHook->oldCode + thisHook->oldCodeSize + 1)); *d = (DWORD) ((PBYTE) thisHook->oldAddr + thisHook->oldCodeSize) - (DWORD) d - sizeof(DWORD); #else //     //       thisHook->oldCodeSize = HOOK_CODE_SIZE; memcpy(thisHook->oldCode, thisHook->oldAddr, HOOK_CODE_SIZE); #endif //     thisHook->isInstalled = TRUE; //   hookEnable(thisHook); #ifdef PERSISTENT_HOOKS //      VirtualProtect(thisHook->oldAddr, HOOK_CODE_SIZE, oldFlags, &oldFlags); #endif return TRUE; } 

рдЬрд╛рджреВ рдлрд╝рдВрдХреНрд╢рди getX86InstructionLength () рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ 5 рдкрд░ рд▓реМрдЯрд╛ред рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рдирд╣реАрдВ рд╣реИ - 5 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣рд▓реЗ рддреАрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ рдФрд░ рд╕реНрд░реЛрдд рдореЗрдВ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ x86 рдирд┐рд░реНрджреЗрд╢ рд▓рдВрдмрд╛рдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рдХрд┐рд╕реА рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдпреЛрдЧрджрд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП ... рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡рд┐рд╢рд╛рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╡рд┐рдЪрд▓рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

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

 /************************************************************************/ /*     */ /************************************************************************/ BOOL hookRemove(PAPIHOOK thisHook) { //   ,     if (!thisHook->isInstalled) return FALSE; #ifdef PERSISTENT_HOOKS DWORD oldFlags; if (!VirtualProtect(thisHook->oldAddr, HOOK_CODE_SIZE, PAGE_EXECUTE_READWRITE, &oldFlags) || IsBadWritePtr(thisHook->oldAddr, HOOK_CODE_SIZE)) { SetLastError(ERROR_WRITE_PROTECT); return FALSE; //     } #endif //    hookDisable(thisHook); #ifdef PERSISTENT_HOOKS VirtualProtect(thisHook->oldAddr, HOOK_CODE_SIZE, oldFlags, &oldFlags); if (thisHook->oldCode != NULL) xfree(thisHook->oldCode); #endif //      thisHook->isInstalled = FALSE; //        thisHook->newAddr = (LPVOID) NULL; thisHook->oldAddr = (LPVOID) NULL; return TRUE; } 

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ DEP (рдбреЗрдЯрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд░реЛрдХрдерд╛рдо) рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ EXECUTE рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореВрд▓ рдХреЛрдб рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдЧреАред рдЕрдиреНрдпрдерд╛, рд╕рд┐рд╕реНрдЯрдо рдмрд╕ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдореЗрдВ рдХреБрдЫ рднреА рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:

 #ifdef PERSISTENT_HOOKS /************************************************************************/ /*        */ /*   : typedef int (WSAAPI *PF_send) (SOCKET s, char *buf, int len, int flags); int WSAAPI my_send(SOCKET s, char *buf, int len, int flags) { PAPIHOOK thisHook = hookFind(my_send); PF_send p_send = (PF_send) thisHook->oldProc; if (NULL == thisHook || NULL == p_send) return (int) 0; int rv; ... /************************************************************************/ #define DEFINE_HOOK(RTYPE, CTYPE, NAME, ARGS)\ typedef RTYPE(CTYPE *PF_##NAME) ##ARGS; \ RTYPE CTYPE my_##NAME ##ARGS \ { \ PAPIHOOK thisHook = hookFind(my_##NAME); \ PF_##NAME p_##NAME = (PF_##NAME) thisHook->oldProc; \ if (NULL == thisHook || NULL == p_##NAME) \ return (RTYPE) 0; \ RTYPE rv; #define LEAVE_HOOK() } \ return rv; 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореВрд▓ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рдЕрдм рд╣рдо рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╣рддреЗ рд╣реИрдВ-> oldProcред рдпрд╣ рдареАрдХ рд╡рд╣реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдордиреЗ рдореВрд▓ рдкрд╛рдБрдЪ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдмрдЪрд╛рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд┐рдпрд╛ред

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

рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореВрд▓ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЕрд╡рд░реЛрдзрди рдХреЛ рдЧрд╣рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдФрд░ рднреА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реИ, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдХрд┐рд╕реА рдиреЗ рдореБрдЭрд╕реЗ рдкреВрдЫрд╛, "рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?" рдореИрдВ рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реВрдВ, рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ рдЬреЛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЪреЗрдХрд╕рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрднреА рддрдХ рдЙрдирдореЗрдВ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдореИрдВ рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдФрд░ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдЧреНрд░рдгреА рдирд╣реАрдВ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдореЗрд░реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдиреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд░рдЦрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдард╛ рд╕реЗ,
// рд╕реНрдЯ

Source: https://habr.com/ru/post/In150933/


All Articles