
рд╣реБрдХ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдХрдиреАрдХ рд╣реИред рд╣реБрдХ рдХрд┐рд╕реА рднреА рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреА рддрд░рд╣, рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЪреНрдЫреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ (рд╕реНрдирд┐рдлрд░реНрд╕, рдСрдбрд┐рдпреЛ / рд╡реАрдбрд┐рдпреЛ рдЧреНрд░реИрдмрд░реНрд╕, рдХреНрд▓реЛрдЬ-рдПрдВрдб рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░, рд▓реЙрдЧрд┐рдВрдЧ, рдмрдЧ рдлрд┐рдХреНрд╕рд┐рдВрдЧ) рдФрд░ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЗрд░рд╛рджреЗ (рдЯреНрд░реЛрдЬрди, рдХреНрд░реИрдХ, рдХреЗрд▓реЙрдЧрд░реНрд╕) рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рд░ рджреЛрдиреЛрдВ
рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░
рд╣реИрдмрд░ рдкрд░ рдирд╣реАрдВ ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ - рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд░ рд▓реЗрдЦ "рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдмрд▓", "рдореЗрдореЛрд░реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдкрд╛рда рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрддреНрд░ рдкрд╛рдардХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдзреЗ рд╕реЗ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдРрд╕реА рдмрд╛рддреЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреМрдкрдЯ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдХреЛрдИ рд╕рдВрдпреЛрдЬрдХ, рдХреЛрдИ рдЬрдЯрд┐рд▓ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд░рд▓ рд╕реА ++ рдХреЛрдб рдХреА рджреЛ рджрд░реНрдЬрди рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣реБрдХ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдЕрд╕рд▓реА рдЪреБрдиреМрддреА
рд╣рдо рдЬреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреБрдж рдХреЛ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ
"рд╣реИрд▓реЛ, рд╣реИрдмрд░!" рд▓рд┐рдЦреЗрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдП рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ, рдЬреЛ рдЕрдм рдХрд╣рддрд╛ рд╣реИ (рдФрд░ рдЕрдм рдпрд╣
"*** / Habrahabr - рдореЛрдЬрд╝рд┐рд▓рд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕" рд╣реИ , рдЬрд╣рд╛рдВ *** - рдЕрдиреБрднрд╛рдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕реНрд░реЛрддреЛрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧ-рдЗрди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред
рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд
рдЬрдм рдЖрдк рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдореЛрдЯреЗ рддреМрд░ рдкрд░, exe рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (dll рдлрд╛рдЗрд▓реЗрдВ) рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ (рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рддреНрдпреЗрдХ exe рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд░реНрдЬ рдХреА рдЧрдИ рд╣реИ), рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ) рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдлрд┐рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИрдВ (рдХрд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдФрд░ рдХрд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ)ред рдПрдХ рдкреНрд▓реЗрдЯ "SomeFunction1 () рдлрд╝рдВрдХреНрд╢рди - SomeLibrary1.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА -% function_address_SomeFunction1 ()%" рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреА рдореЗрдореЛрд░реА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдвреВрдВрдвреЗрдЧрд╛, рд╡рд╛рдВрдЫрд┐рдд рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╣реБрдХрд┐рдВрдЧ рдХрд╛ рд╕рд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рджреВрд╕рд░реА рдЬрдЧрд╣ рд╣реИред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА SomeLibrary2.dll рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди SomeFunction2 () рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдпрд╛рдж рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ (рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рд╣реИ) рдФрд░ рдКрдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдмрд╣реБрдд рд╕реЗ рд▓реЗрдмрд▓ рдХреЛ рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдм рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ "SomeFunction1 () рдлрд╝рдВрдХреНрд╢рди - SomeLibrary2.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛ - % address_of our_function_SomeFunction2 ()% "ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдореЗрдореЛрд░реА рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЦреИрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рдЖрдк рдмрд╕ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдЙрдиреНрдирдд рд▓реЗрдЦ (рдпрд╛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рдХрдо рд╕реЗ рдХрдо рдПрдХ) рдкрдврд╝реЗрдВред рд╣рдо рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ - рд╣рдо рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП Microsoft рдбреЗрдЯреНрд░реЛрдЬрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдЧрдВрджреЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
Microsoft Detours рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж

рд╕реАрдЦрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиред

рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реИ

рдЕрдЪреНрдЫрд╛ рдкреНрд░рд▓реЗрдЦрди

рд╕реНрд░реЛрдд рдореЗрдВ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ

рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд - рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм "рджреЛрд╕реНрдд" рдирд╣реАрдВ

рдЕрдиреБрд╕рдВрдзрд╛рди рдФрд░ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐: рд╢реБрд▓реНрдХ

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ

рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдпрд╛ x64 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдпреЛрдЧреНрдп рд╕рднреНрдп рдзрди
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯреНрд░реЙрдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╣реБрдХ рдХрд╛ рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ - рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдкрдХрд╛ рдПрдХ рдмрд╛рд░ рдХрд╛ рдордиреЛрд░рдВрдЬрди рд╣реИ, рддреЛ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рд╕рдлрд▓ рд╣реЛрдВрдЧреЗ рдФрд░ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣реБрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдореБрдХреНрдд рдФрд░ рдЦреБрд▓реЗ (рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓) рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ
mhook , Detours рдЦрд░реАрджреЗрдВ рдпрд╛ рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рд▓рд┐рдЦреЗрдВ (рдкрд┐рдЫрд▓реЗ рджреЛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Detours рдореИрдВрдиреЗ
рдпрд╣рд╛рдБ рд▓рд┐рдЦрд╛
рдерд╛ ред
рдореБрд╢реНрдХрд┐рд▓ рдпреЛрдЬрдирд╛
- рд╕рдордЭреЗрдВ рдХрд┐ рд╣реБрдХ рдХреЛ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдПрдВ рдЬреЛ рдореВрд▓ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ рдФрд░ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░реЗрдЧрд╛ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред
- рдПрдХ рд╣реБрдХ рд╕реЗрдЯ рдХрд░реЗрдВ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП)ред
- рд▓рд╛рдн!
рд╣реБрдХ рдХрд╣рд╛рдБ рд▓рдЧрд╛рдирд╛ рд╣реИ
MSDN рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ
SendMessage рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕
рдорд╛рдорд▓реЗ рдореЗрдВ ,
WM_SETTEXT рдХреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкрд╛рда рд╕реНрд╡рдпрдВ рдЕрдВрддрд┐рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:
- SendMessage рдХреЗ рдмрдЬрд╛рдп, PostMessage рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- SendMessage рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдореИрдХреНрд░реЛ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд╣реИ)
- рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдХреБрдЫ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдорд╛рдирдХ рд╡рд┐рдВрдбреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬрд╝ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо GUI рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдЕрдЪрд╛рдирдХ!)
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЕрджреНрднреБрдд рдореБрдлреНрдд
рдПрдкреАрдЖрдИ рдореЙрдирд┐рдЯрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рд╕реВрд╕реА рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдХрд╛рд░реНрдп рдкрд░ рдФрд░ рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╡рд╣ рд╣реБрдХ рдХреА рдорджрдж рд╕реЗ рднреА рдРрд╕рд╛ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рдореЙрдирд┐рдЯрд░ рдПрдкреАрдЖрдИ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдореЙрдирд┐рдЯрд░ рдореЗрдВ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдо рдХрд┐рд╕ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╕рдореВрд╣ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдЪреБрдирддреЗ рд╣реИрдВ - рддреЛ рдЕрдзреНрдпрдпрди рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдпрд╛ рд╢рд╛рдпрдж рдлреНрд░реАрдЬ рднреА), рд╣рдо рдмрд╣реБрдд рдХрдо рдЪреБрди рд▓реЗрдВрдЧреЗ - рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдореВрд╣ рдХреЛ рд╕реЛрдЪрдирд╛ рдФрд░ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╡рд┐рдВрдбреЛрдЬ рдЬреАрдпреВрдЖрдИ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпреВрдЖрдИ рд╡рд┐рдХрд╛рд╕ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд░рдирд┐рдВрдЧ рдкреНрд░реЛрд╕реЗрд╕ рдкреИрдирд▓ рдореЗрдВ рд╣рдорд╛рд░реЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, рджрд╛рдИрдВ рдУрд░ рдкреИрдирд▓ рдореЗрдВ рдПрдкреАрдЖрдИ рдореЙрдирд┐рдЯрд░ рд╕рднреА рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдХреЙрд▓ рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкрд░ рдЬрд╛рдПрдВ, рд╣реЗрдмреНрд░рд╛ рдЦреЛрд▓реЗрдВ, рд╣реЗрдбрд░ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдФрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкрд┐ рдореЙрдирд┐рдЯрд░ рдкрд░ рд▓реМрдЯреЗрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдмреБрд▓рд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ - рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдХреБрдЫ рд╣реА рд╕реЗрдХрдВрдб рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рд╕рдм рдХреБрдЫ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рд╣рд╛рдВ, рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╣рдЬ рдЦреЛрд▓рдиреЗ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ! рдФрд░ рдЖрдк рдЕрднреА рднреА рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕реЗрдХрдВрдб рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИред :)

рд╣рдореЗрдВ рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЙрд╕реЗ рдвреВрдБрдврдирд╛, рдирд┐рдЧрд░рд╛рдиреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЯреИрдм рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╣рдо рдЦреЛрдЬ рдореЗрдВ "WM_SETTEXT" рдбреНрд░рд╛рдЗрд╡ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде SendMessageW рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрд▓ рд╣реИрдВ - рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ "W" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдпреВрдирд┐рдХреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣реБрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдЯреАрдХ рдирд╛рдо рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдЕрдм рд╣рдо рдЗрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
рд╣рдо рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ
1. рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
2. рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ: рдлрд╝рд╛рдЗрд▓-> рдирдпрд╛-> рдкреНрд░реЛрдЬреЗрдХреНрдЯред Visual C ++ -> Win32 -> Win32 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рдореЗрдВ, "Dll" рдЯрд╛рдЗрдк рдХрд░реЗрдВред
3. dllmain.cpp рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦреЗрдВ:
#include <windows.h> #include "C:\Program Files\Microsoft Research\Detours Express 3.0\src\detours.h" LRESULT (WINAPI * TrueSendMessageW)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) = SendMessageW; __declspec(dllexport) LRESULT WINAPI MySendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { if (Msg == WM_SETTEXT && wcsstr((LPCTSTR)lParam, L"/ - Mozilla Firefox") != NULL) return TrueSendMessageW(hWnd, Msg, wParam, (LPARAM)L", !"); return TrueSendMessageW(hWnd, Msg, wParam, lParam); } BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) { if (dwReason == DLL_PROCESS_ATTACH) { DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)TrueSendMessageW, MySendMessageW); DetourTransactionCommit(); } else if (dwReason == DLL_PROCESS_DETACH) { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)TrueSendMessageW, MySendMessageW); DetourTransactionCommit(); } return TRUE; }
4. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рд▓рд┐рдВрдХрд░ рд╕реЗрдЯрд┐рдВрдЧ рдЯреИрдм рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "C: \ Program Files \ Microsoft Research \ Detours Express 3.0 \ lib.X86 \ detours.lib" рдорд╛рди рдЬреЛрдбрд╝реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ, рдЖрдкрдХрд╛ рдкрде рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдбреЗрдЯреНрд░реЙрдЬрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╣рд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИред
5. рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдмрд┐рд▓реНрдб -> рдмрд┐рд▓реНрдб рд╕рдорд╛рдзрд╛рдиред рдЖрдЙрдЯрдкреБрдЯ dll-ku рд╣реИ (рдЗрд╕реЗ рд╣реБрдХрдЯреЗрд╕реНрдЯ рдХрд╣рд╛ рдЬрд╛рдП)
рд╕реНрд░реЛрдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ (SendMessageW рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдбреАрдЯреЙрд░реНрд╕ (рд╣реБрдХ рд╕реЗрдЯ / рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рд░реЗрдЦрд╛ # 3 рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ TrueSendMessageW рдЪрд░ рдореЗрдВ SendMessageW рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рджреЛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд╣рдорд╛рд░реЗ "рдирдХрд▓реА" рд╕реЗ рдЕрд╕рд▓реА рдлрд╝рдВрдХреНрд╢рди SendMessageW рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рдЬрдм рд╣рдо рд╣реБрдХ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕ рд╕рдордп рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдирдХрд▓реА MySendMessageW рдлрд╝рдВрдХреНрд╢рди рдЖрддрд╛ рд╣реИред рд╡рд╣ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рд╕рдВрджреЗрд╢ WM_SETTEXT рднрд░ рдЖрдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рда рдореЗрдВ рд╣реИрдмрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ - рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред рдЕрдиреНрдпрдерд╛, рд╣рдо рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
__Declspec (dllexport) рдЙрдкрд╕рд░реНрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред
DllMain рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рдЧрд╛рд╡ / рдЯреБрдХрдбрд╝реА рдХреЗ рдХреНрд╖рдгреЛрдВ рдкрд░ред рдпрд╣рд╛рдБ рднреА, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╕рдВрд▓рдЧреНрдирдХ рдХреЗ рд╕рдордп, рд╣рдореЗрдВ рд╣реБрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдбрд┐рдЯреИрдЪ рдХреЗ рд╕рдордп, рд╣рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдбреЗрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрдкрдХреЛ рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрдИ рд▓реЛрдЧ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реБрдХ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд▓рд╛рдЗрди рд╣реИ
DetourAttach(&(PVOID&)TrueSendMessageW, MySendMessageW);
рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ "рд╡рд┐рд╢реНрд╡рд╛рд╕" рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ SendMessageW рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ MySendMessageW рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛ред рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдХрдИ рд╕рдкреНрддрд╛рд╣ рд▓рдЧ рдЧрдПред рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛ рд▓рд┐рдпрд╛ - рдмрдзрд╛рдИред
рд╣реБрдХ рд╕реЗрдЯ рдХрд░реЗрдВ
Microsoft Detours рд╣реБрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо withdll.exe рд╢рд╛рдорд┐рд▓ рд╣реИ - рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрд┐рд╕реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
withdll.exe -d:hooktest.dll "C:\Program Files\Mozilla Firefox\firefox.exe"
рд▓рд╛рдн!
рд╣рдо рд╣реЗрдмрд░ рдЦреЛрд▓рддреЗ рд╣реИрдВ:

рд╣реБрд░реНрд░реЗ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рд╣реБрдХ рд╕реАрдЦрдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛ред