рдПрдорд╣реВрдХ рдмрдирд╛рдо рдЬреБрдорд╛

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

рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдВрд╡рд╛рдж рдХрд┐рдпрд╛, рдореВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред Mhook рдПрдХ рд╡рд┐рджреЗрд╢реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЛрдб рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдореБрджреНрджрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдмреЗ рдкрд░ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рд╡реЗ рд╕рд╛рдЗрдЯ рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХреЛрдб рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 5 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЙрд╕ рдкрддреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЬрдВрдк рдХреЛрдб (jmp #addr) рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЬрд┐рди 5 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдореЗрдВ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрди 5 рд╕рдВрдЧреНрд░рд╣реАрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╡рд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рд╕рдВрдХреНрд░рдордг рд╣реЛрдЧрд╛ред рддреЛ рдпрд╣ рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рджрд┐рдЦреЗрдЧрд╛:



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

рднрдпрд╛рдирдХ рдЖрддрдВрдХ
// рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП
рд╢реВрдиреНрдп onProc ( DWORD backTrace, DWORD arg1 ) {
рдкреНрд░рд┐рдВрдЯрдл ( "% d% d" , рдмреИрдХрдЯреНрд░реЗрд╕, arg1 ) ;
}

// рдордзреНрдпрд╡рд░реНрддреА рдЕрд╡рд░реЛрдзрди рд╕рдорд╛рд░реЛрд╣
__declspec ( рдирдЧреНрди ) рд╢реВрдиреНрдп рд╣реБрдХрдкреНрд░реЛрдХ ( ) {
// рд░рдЬрд┐рд╕реНрдЯрд░ рд░рдЬрд┐рд╕реНрдЯрд░
pushad
// рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдбреЗрдЯрд╛ рдЙрдард╛рдУ
__asm {
рдзрдХреНрдХрд╛ [ esp + 0x20 ]
рдкреЙрдк backTrace
рдзрдХреНрдХрд╛ [ esp + 0x24 ]
рдкреЙрдк arg1
} ;
// рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рдУ
onProc ( backTrace, рдЦрд┐рд▓рд╛рдбрд╝реА ) ;
__asm {
// рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдПрдВ
popad
jmp realProc
} ;
}
// рд╕реЗрдЯ рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди
Mhook_SetHook ( & ( PVOID & ) realProc, hookProc ) ;



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

рдкреНрд░рд╕рдВрдЧ рдкреНрд░рд╕рдВрдЧ ;
// рдЖрдк рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдореВрд▓реНрдп рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
DWORD var = рд╕рдВрджрд░реНрднред EAX ;
// рд▓реЗрдХрд┐рди рдЖрдк рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рдВрджрд░реНрднред EAX = var
// рдЖрдк рдореЗрдореЛрд░реА рд╕реЗ рдореВрд▓реНрдп рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
// рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рд╕реНрдерд┐рд░ рдХреА рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
var = рд╕рдВрджрд░реНрдн [ 0xBEDABEDA ]
// рддреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ
var = рд╕рдВрджрд░реНрдн [ EAX ]
// рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рдВрджрд░реНрдн [ 0xBEDABEDA ] = var
рд╕рдВрджрд░реНрдн [ EAX ] = var
// рдФрд░ рддрд╛рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ
рд╕рдВрджрд░реНрднред EAX = рдкреНрд░рд╕рдВрдЧред EAX + рд╕рдВрджрд░реНрднред EBX * 4
// рдФрд░ рддрд╛рдХрд┐ рдпрд╣ рдЕрдВрдХрдЧрдгрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛ рд╕рдХреЗ
рд╕рдВрджрд░реНрдн [ рдкреНрд░рд╕рдВрдЧ EAX + рд╕рдВрджрд░реНрднред EBX * 4 ] = var
// рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред
// рддрд╛рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдСрдлрд╕реЗрдЯ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ
var = рдкреНрд░рд╕рдВрдЧред рдИрдПрд╕рдЖрдИ [ 0x20 ]


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрди рд░реВрдк рд▓реЗрдЧрд╛:

рд╢реВрдиреНрдп onProc ( рд╕рдВрджрд░реНрдн рд╕рдВрджрд░реНрдн ) {
DWORD рдмреИрдХрдЯреНрд░реЗрд╕ = рд╕рдВрджрд░реНрдн [ esp ]
DWORD arg1 = рд╕рдВрджрд░реНрдн [ esp + 4 ]
рдкреНрд░рд┐рдВрдЯрдл ( "% d% d" , рдмреИрдХрдЯреНрд░реЗрд╕, arg1 ) ;
}
рд░рдЬрд┐рд╕реНрдЯрд░рд╣реВрдХ ( рд░рд┐рдпрд▓рдкреНрд░реЛрдХ, рд╣реБрдХрдкреНрд░реЛрдХ ) ;


рдпрд╣ рд╕рдм рдЦреБрд╢реА рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛ рдерд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг, рдЕрдиреБрдХреНрд░рдордг рдФрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рджреЗрдирд╛ рдерд╛ред рдореИрдВ рдЗрд╕рдореЗрдВ рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдб рдХрд╛ рд▓рд┐рдВрдХ)ред

рдпрд╣ рд╕рдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреИрд╕реЗ рдЖрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ mhook рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдХрджрдо рдЬреЛрдбрд╝рд╛:

; рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдЪрд╛рдУ
pushad
; рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░реЗрдВ
рдЬрд╛рд╕реВрд╕реА рдХрд░рдирд╛
; рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
рдХреЙрд▓ рд╣реБрдХ
; рд╕реНрдкрд╖реНрдЯ рдвреЗрд░
esp рдЬреЛрдбрд╝реЗрдВ , рек
; рд░рдЬрд┐рд╕реНрдЯрд░ рдмрд╣рд╛рд▓ рдХрд░реЗрдВ
popad
; рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдПрдВ
jmp trampoline


рдпрд╣ рдХреЛрдб "x60x54xE8x00x00x00x00x83xC4x04x61xE9x00x00x00x00" рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЬрдм рдЖрдкрдХреЛ рд╣реБрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд╡рд╣рд╛рдВ рдПрдХ рд▓рд╛рдЗрди рдХреЙрдкреА рдХреА рдЬрд╛рддреА рд╣реИ, рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдСрдлрд╝рд╕реЗрдЯ рдХреЛ рдХреЙрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рдСрдлрд╝рд╕реЗрдЯ рдХреЛ рдЬреЗрдПрдордкреА рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд╖рд╛рдж, рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рд╡рд░реНрддрди рдкреЙрдкрдб рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдореИрдВ рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред



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

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

рдЬреБрдорд╛ рдореЗрдВ, рдХрдИ рдЖрдХрд╕реНрдорд┐рдХ рдЦреЗрд▓реЛрдВ рдореЗрдВ, рд╕реНрдХреЛрд░ рджрд╕ рдпрд╛ рд╕реМ рдХрд╛ рдПрдХ рдмрд╣реБ рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕реНрдХреЛрд░ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХ "рд╕реБрдЦрдж" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЦреЗрд▓ рдХрд╛ рдЖрдирдВрдж рдмрдврд╝рд╛рддрд╛ рд╣реИред рдФрд░ рдореИрдВ рдПрдХ рдЕрдЬреАрдм рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗрдВрдХрд╛-рдХреЛрд╕реЙрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордЬрд╛рдХ рдореЗрдВред рдпрджрд┐ рд╕реНрдХреЛрд░ рджрд╕ рдХрд╛ рдЧреБрдгрдХ рд╣реИ, рддреЛ рдХрд╣реАрдВ рдкрд░ рдпрд╣ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдФрд░, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЦрд╛рддрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рджрд╕ рд╕реЗ рд╡рд┐рднрд╛рдЬреНрдп рд░рд╣реЗрдЧрд╛ред рдЖрдк рдЗрди рд╕рднреА рд╡рд┐рднрд╛рдЬрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рднрд╛рдВрд╢ рдФрд░ рдкрддреЗ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рд░рд▓ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЛ рджрд╕ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ 0x66666667 рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдЧреБрдгрд╛ рдХрд░рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреБрд╕реНрддрдХ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЯреНрд░рд┐рдХреНрд╕", рдЕрдзреНрдпрд╛рдп 10.3)ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

Mov рдИрдВрдХреНрд╕ , 66666667h ; рдЬрд╛рджреВ рд╕рдВрдЦреНрдпрд╛ 2.5 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
imul ecx ; EDX: EAX (EAX (edx рдореЗрдВ - 2.5 рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо)
рд╕рд░ edx , 2 ; рдкрд░рд┐рдгрд╛рдо 4 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдпрд╣ edx = ecx / 10 рдирд┐рдХрд▓рд╛ рд╣реИ


рдПрдХ рдФрд░ рд╕рдлрд▓рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ Mov eax, 66666667 рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рдВрдЪ рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ jmp рдпрд╛ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд▓реВрдк рдореЗрдВ рдкрд╛рда рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рдСрдкрд░реЗрд╢рди рдХреЛрдб (0xB8, 0x67, 0x66, 0x66, 0x66) рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЬрд╛рд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рджрд╕ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдПрдХ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рдСрдкрд░реЗрд╢рди рд╣реИ, рдЬреЛ рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬреЛ рдЬрд╛рд▓ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдХреБрд▓ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЦреЗрд▓ рдХреА рдЧрддрд┐ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдСрдкрд░реЗрдВрдб рдореЗрдВ рд╕реЗ рдПрдХ рдЪрд╛рд▓реВ рдЦрд╛рддреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛред рдФрд░ рдореБрдЭреЗ рдЦрд╛рддрд╛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ? рдХрдИ рдирд┐рдпрдореЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХреЗрдВ рдХрд┐ рд╕реНрдХреЛрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред
1) рдЦреЗрд▓ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
2) рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ - рд╢реЙрдЯ
3) рдкреНрд░рддреНрдпреЗрдХ рд╢реЙрдЯ рдкреНрд░рднрд╛рд╡реА рд╣реИ
4) рдкреНрд░рддреНрдпреЗрдХ рд╢реЙрдЯ рддреАрд╕ рдЕрдВрдХ рд▓рд╛рддрд╛ рд╣реИ
5) рджреВрд╕рд░реЗ рдирд┐рдпрдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо: рдЪреВрдВрдХрд┐ рдЖрдкрдХреЛ рдЧреЗрдо рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рдЙрд╕ рдХреЗ рдХреБрдЫ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреЛрд░рд┐рдВрдЧ рдЦреЗрд▓ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╣реА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЧреЗрдВрджреЛрдВ рдХреЗ рд╕реАрдХреНрд╡реЗрдВрд╕ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред
рдирд┐рдпрдо рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЧреЗрдо рдХреА рд╡рд┐рдВрдбреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдПрдХ рдЬрд╛рд▓ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрдм рдпрд╣ рдорд╛рдЙрд╕ рдмрдЯрди рдкрд░ рд╕рднреА рдХреНрд▓рд┐рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХреАрдмреЛрд░реНрдб рдкрд░ рдмрдЯрди рджрдмрд╛рдХрд░ рдЧреЗрдо рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдПрдХ рд╡рд┐рдВрдбреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрдИрдбреАрдП рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░рдХреНрд▓рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рдВрдбреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реБрдХ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

рд╢реВрдиреНрдп onMainProc ( рд╕рдВрджрд░реНрдн * рд╕рдВрджрд░реНрдн ) {
// рдмрдЯрди 0 рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ: рдХреЛрдИ рд╕реНрдХреЛрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ
рдЕрдЧрд░ ( рд╕рдВрджрд░реНрдн - > ESP [ 0x08 ] == WM_KEYUP ) рдФрд░& ( рд╕рдВрджрд░реНрдн - > ESP [ 0x0C ] == VK_NUMPAD0 ) ) {
рдЕрдЧрд░ ( рд░рд╛рдЬреНрдп == kCounting ) {
рд░рд╛рдЬреНрдп = kNotCounting ;
} {
рд░рд╛рдЬреНрдп = kCounting ;
}
}
// рдпрджрд┐ рдЧрд┐рдирддреА рдЬрд╛рд░реА рд╣реИ рдФрд░ рдмрд╛рдИрдВ рдорд╛рдЙрд╕ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЧрд┐рдирддреА рдмрдврд╝ рдЬрд╛рддреА рд╣реИ
рдЕрдЧрд░ ( рд░рд╛рдЬреНрдп == kCounting ) && ( рд╕рдВрджрд░реНрдн - > ESP [ 0x08 ] == WM_LBUTTONUP ) ) {
рд╕реНрдХреЛрд░ + = 30 ;
}
}

// рдФрд░ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдЬрд╛рд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
рд╢реВрдиреНрдп onDivision ( рд╕рдВрджрд░реНрдн * рд╕рдВрджрд░реНрдн ) {
char buf [ 512 ] ;
рдЕрдЧрд░ ( рд░рд╛рдЬреНрдп == kCounting ) {
// рдпрджрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рднрд╛рдВрд╢ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЦрд╛рддреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рд╡рд╣ рдкрддрд╛ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╛рди рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ
рдЕрдЧрд░ ( рд╕рдВрджрд░реНрдн - > EBX == рд╕реНрдХреЛрд░ ) || ( рд╕рдВрджрд░реНрдн - > ECX == рд╕реНрдХреЛрд░ ) || ( рд╕рдВрджрд░реНрдн - > EDX == рд╕реНрдХреЛрд░ ) } {
рд╕реНрдкреНрд░рд┐рдВрдЯрдл ( buf, "% x: EBX =% d, ECX =% d, EDX =% d" , рд╕рдВрджрд░реНрдн - > ESP [ 0 ] , рд╕рдВрджрд░реНрдн - > EBX, рд╕рдВрджрд░реНрдн - > ECX, рд╕рдВрджрд░реНрдн - > EDX ) ;
OutputDebugStringA ( buf ) ;
}
}
// рдЗрд╕ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп, рдЬреЗрдПрдордкреА рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╕рдВрджрд░реНрдн - > EAX = 0x66666667 ;
}


рд╡реАрдбрд┐рдпреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ (рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрд╢реЛрдзрди рдирд┐рдХрд▓рд╛ред "рдЬрд╝реВрдорд╛ рдХрд╛ рд╕рд╕реНрддрд╛")ред



рдкрддрд╛ рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд╣ рд╕рдВрдмрдВрдз рд╣реИред



рд╡рд╣ рднрд╛рдЧ рдЬрд╣рд╛рдВ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддрд╛ рд╣реИ, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЕрдВрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдиреЗ рд╕реНрддрд░ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рд╕реНрдХреЛрд░ рдХрд┐рдпрд╛ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд╝рдВрдХреНрд╢рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреЗрдВрджреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреЛрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВред рдкрд╣рд▓рд╛ рддрд░реНрдХ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕реВрдЪрдХ рд╣реИ (рд╢рд╛рдпрдж рдХрд╛рдЙрдВрдЯрд░ рд╣реА)ред рдСрдлрд╕реЗрдЯ рдореЗрдВ 0x18C рдмрд┐рдВрджреБрдУрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рдСрдлрд╕реЗрдЯ 0x190 рдХреЗ рд╕реНрддрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╡рд░реНрддрдорд╛рди рд╕реНрдХреЛрд░ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдореИрдВ рдвреЗрд░ рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВред рддреБрд░рдВрдд рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рд▓реВ рдЦрд╛рддрд╛ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдСрдлрд╕реЗрдЯ 0x104 рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдореИрдВ рдСрдкрд░реЗрд╢рди рдЬреЛрдбрд╝рдиреЗ [esi + 0x104], рдПрдбреАред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рдПрдХ рдЬрд╛рд▓ рдмрд┐рдЫрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЖрдкрдХрд╛ рдХреБрдЫ рдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╛рд▓ рдХреЛрдб рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред EDI рд░рдЬрд┐рд╕реНрдЯрд░ рджрд╕ рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдПрдХ рд╕рдлрд▓ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдмрдврд╝реЗ рд╣реБрдП рдЕрдВрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ

рд╢реВрдиреНрдп onAddScore ( рд╕рдВрджрд░реНрдн * рд╕рдВрджрд░реНрдн ) {
рд╕рдВрджрд░реНрдн - > рдИрдбреАрдЖрдИ = рд╕рдВрджрд░реНрдн - > рдИрдбреАрдЖрдИ * 10 ;
}


рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рдкрджреЛрдВ рдФрд░ рдШреЛрдбрд╝реЗ рдХреЗ рдЪрд┐рддреНрд░рдг рдХреЗ рдмреАрдЪ рдмрдбрд╝реЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рдХреИрд╕реЗ рджреА рдЬрд╛рдП, рддреЛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж)ред

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

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


All Articles