рдЖрдЬ рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ C ++ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреИрдХрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдмрд╛рд░, рдЬрдм рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдЕрднреА рддрдХ рдирд╣реАрдВ рдерд╛, рдкреИрдХрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣рдо рддрддреНрдХрд╛рд▓реАрди рдпреБрд╡рд╛ рдпреВрдкреАрдПрдХреНрд╕ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдЪрдврд╝ рдЧрдПред рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрд╕рд┐рдЯрд╛рдЗрд▓рдХреЛрд▓рд╛рдЗрди рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдХрдо рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдпреВрдкреАрдПрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЙрдмрд╛рдК рдерд╛ - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдордиреЗ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ред рдореИрдЯ рдкрд┐рдЯреНрд░реЗрдХ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдзрд┐рдХ рдорджрдж рдХреАред рдЕрдм рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдмреИрдВрдХрд┐рдВрдЧ рдЯреНрд░реЙрдлреА рдХреЛ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (
рдЬрд╝реАрдЙрд╕ 2.0.8.9 )ред рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ, рд╡рд┐рдВрдбреЛрдЬ рдкреНрд░рдХрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ (
рд╡рд┐рдВрдбреЛрдЬ 2000 ) рдореЗрдВ рд╣реИрдВред
рдкреИрдХрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдиреБрд╕рдВрдзрд╛рди, рд╕реАрдзреЗ рдЙрд╕ рдкрдХреНрд╖ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕ рддрд░рдл рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг
рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ " рдЧреБрд░реБ рдХреЗ
рдмрд╛рд░реЗ рдореЗрдВ рдкреИрдХрд░реНрд╕ рдлреЙрд░ рд▓рд╛рд╕реНрдЯ рдЯрд╛рдЗрдо" рд▓реЗрдЦ рд╣реИ, рдЬреЛ рдХреБрдЦреНрдпрд╛рдд рдЧреБрд░реБ рд╡реЛрд▓реЛрдбрд╛ рдФрд░ NEOx рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо, рдмрджрд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реА рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреАрдИ рдкреИрдХрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рд╕рдмрд╕реЗ рдареЛрд╕ рдФрд░ рд╕реБрд╕рдВрдЧрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, notepad.exeред рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп 32-рдмрд┐рдЯ рдлреЙрд░реНрдо рдореЗрдВ, рдЗрд╕рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 60 Kb рд╣реИред рд╣рдо рдЗрд╕рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХрд░реНрдо рдХреНрдпрд╛ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рдЦреИрд░, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдлрд╛рдЗрд▓ рдХреЛ рдкрд╣рд▓реА рд╕реЗ рдЖрдЦрд┐рд░реА рдмрд╛рдЗрдЯ рддрдХ рдПрдХ рдПрд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред рдЕрдм рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд┐рдЪреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рд╕рд░рд▓ рдХрдВрдкреНрд░реЗрд╕рд░ рдХреЛ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ 60 Kb рдореЗрдВ рд╕рд░рдгреА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 20 Kb рдореЗрдВред рдпрд╣ рд╢рд╛рдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдиреЛрдЯрдкреИрдб рдХреА рдЫрд╡рд┐ рдЙрдЪреНрдЪ рдПрдиреНрдЯреНрд░реЙрдкреА рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдпрд╣ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдХрд░ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдордзреНрдпрдо (рдмреВрдЯрд▓реЛрдбрд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬреЛ рдЗрд╕реЗ рдЦреЛрд▓ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред рд╣рдо рдорд╛рдзреНрдпрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рд╕рдВрдХреБрдЪрд┐рдд рдиреЛрдЯрдкреИрдб рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ (рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рдереЛрдбрд╝реЗ рд╕рдВрдХреБрдЪрд┐рдд рдиреЛрдЯрдкреИрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╣реИ) рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬреНрдб рдЗрдореЗрдЬ рдХреЛ рдвреВрдВрдв рд▓реЗрдЧрд╛, рдЗрд╕реЗ рдЕрдирдкреИрдХ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдПрдХ рд▓реЛрдбрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдкреИрдХрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдкреИрдХрд░ рдХрд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
- рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ;
- рдХреБрдЫ рджреЛрд╖рд░рд╣рд┐рдд рд╕рдВрдкреАрдбрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдВ;
- рдкреАрдИ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓реЛрдб рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓реЛрдбрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рдмреВрдЯрд▓реЛрдбрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
- рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдвреВрдВрдвреЗрдВ;
- рдЗрд╕реЗ рдЦреЛрд▓рдирд╛;
- рдкреАрдИ-рдлрд╛рдЗрд▓ рдХреЗ рд╣реЗрдбрд░реНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ, рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдВрддрддрдГ рдЪрд▓рд╛рдПрдВред
рд╣рдо рд▓реЛрдбрд░ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдкреИрдХрд░ рджреНрд╡рд╛рд░рд╛ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд▓реЛрдбрд░
рддреЛ, рд╣рдорд╛рд░реЗ рд▓реЛрдбрд░ рдХреЛ рдкрд╣рд▓реА рдЪреАрдЬ рдпрд╣ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрдХреБрдЪрд┐рдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХрд╛ рдкрддрд╛ рд╣реИред рдЦреЛрдЬ рдХреЗ рддрд░реАрдХреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреИрдХрд░ рдиреЗ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рд▓реЛрдбрд░ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рддреНрдпрд╛рд░реЛрдкрд┐рдд рдХрд┐рдпрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЙрд╕рдиреЗ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЦрдВрдб рдЬреЛрдбрд╝рд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд рдЫрд╡рд┐ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ
рд▓реЗрдХрд┐рди, рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрд▓рд┐рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдПрдХ рдкреИрдХрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕реЗ рдХрд░рдиреЗ рджреЛред рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдЫрд╡рд┐ рдХрд╛ рдкрддрд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЧрдгрдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдФрд░ рдлрд┐рд░ рдмрд╕ рд╕рд╣реА рд╕реНрдерд╛рди рдкрд░ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рджреЛ рдЕрдВрдХ рдЫреЛрдбрд╝реЗрдВ:
LPBYTE pbPackedImage = (LPBYTE) 0xDEADBEEF; DWORD dwPackedImageSize = 0xBEEFCACE;
рдЬрдм рдкреИрдХрд░ рд▓реЛрдбрд░ рдореЗрдВ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдкреНрд░рддреНрдпрд╛рд░реЛрдкрд┐рдд рдХрд░реЗрдЧрд╛, рддреЛ рдпрд╣ рд▓реЛрдбрд░ рдХреЗ рд╢рд░реАрд░ рдкрд░ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЦреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рд░рдгреА рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде 0xDEADBEEF рдФрд░ рдЙрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде 0xBEEFCACE рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЕрдм рдЬрдм рд╣рдордиреЗ рдпрд╣ рддрдп рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдкрддреЗ рдХреА рдЦреЛрдЬ рдХреИрд╕реЗ рдХреА рдЬрд╛рдП, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдкреИрдХрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдВрдкреНрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рддреИрдпрд╛рд░-рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк
aplib , рдиреАрдЯ рдФрд░ рдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдирд╛ рд╣реИ рдЬреЛ Lempel-Ziv рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (LZ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдкреАрдбрд╝рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рджрд┐рди рдЗрд╕реЗ рдЪреБрдиреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдЬ рд╣рдо рдПрдХ рдФрд░ рднреА рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рдореВрдб рдореЗрдВ рд╣реИрдВ - рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди!
XP рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╣рдорд╛рд░реЗ рдкрд╕рдВрджреАрджрд╛ ntdll.dll рдиреЗ рджреЛ рдорд╣рд╛рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рд╢реБрд░реВ рдХрд┐рдпрд╛:
NTSTATUS RtlCompressBuffer( __in USHORT CompressionFormatAndEngine, __in PUCHAR UncompressedBuffer, __in ULONG UncompressedBufferSize, __out PUCHAR CompressedBuffer, __in ULONG CompressedBufferSize, __in ULONG UncompressedChunkSize, __out PULONG FinalCompressedSize, __in PVOID WorkSpace ); NTSTATUS RtlDecompressBuffer( __in USHORT CompressionFormat, __out PUCHAR UncompressedBuffer, __in ULONG UncompressedBufferSize, __in PUCHAR CompressedBuffer, __in ULONG CompressedBufferSize, __out PULONG FinalUncompressedSize );
рдЙрдирдХреЗ рдирд╛рдо рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВ - рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рд╡рд┐рдШрдЯрди рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ред рдмреЗрд╢рдХ, рдЕрдЧрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрддреЗ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╡рд┐рдВрдбреЛрдЬ 2000 рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рдереЗ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ NT 4.0,;) рдХреЗ рд╕рд╛рде рднреА рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдореВрд▓реА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, RtlCompressBuffer \ RtDDecompressBuffer рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо SDK рд╣реЗрдбрд░ рдореЗрдВ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ GetProcAdds рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛
рдЬрдм рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдВрддрддрдГ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдирдкреИрдХ рдХрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ) рдФрд░ рдКрдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
DWORD dwImageSize = 0; DWORD dwImageTempSize = dwPackedImageSize * 15;
COMPRESSION_FORMAT_LZNT1 рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ LZ рд╕рдВрдкреАрдбрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди
рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░ рд╕рдХрддрд╛
рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЗрдореЛрд░реА (pbImage) рдореЗрдВ рдкреАрдИ рдлрд╛рдЗрд▓ рдХреА рдХрдЪреНрдЪреА рдЫрд╡рд┐ рд╣реИред рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рджреЗрд╢реА рд╡рд┐рдВрдбреЛрдЬ рдкреАрдИ рд▓реЛрдбрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕реВрдЪреА рдХреЛ рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд▓реЛрдЧреЛрдВ рддрдХ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ:
- рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЗрдбрд░ (OPTIONAL_HEADER) рдХреА рдЫрд╡рд┐ рдмреЗрд╕ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдЫрд╡рд┐ (рд╣реЗрдбрд░) рдХреА рд╢реБрд░реБрдЖрдд рд░рдЦреЗрдВред
- рдЕрдиреБрднрд╛рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдкрддреЗ рдкрд░ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрднрд╛рдЧ рд░рдЦреЗрдВред
- рдЖрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рднреА рдкрддреЗ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рдирдХ рдкреАрдИ рд▓реЛрдбрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдХреЗ, рд╣рдо рдХреБрдЫ рдкреАрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреИрдХрд░ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреВрд░реНрдг рдмрд╣реБрдордд рдХреЗ рд▓рд┐рдП, рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреА - рдЖрдк рдЭреБрдВрдбреЛрдВ, рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдФрд░ рдЕрдиреНрдп рджреБрд░реНрд▓рдн рдФрд░ рдЧрдВрджрд╛ рдХрдЪрд░реЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдЖрдк рдЧрдВрднреАрд░ рд╕рдВрдЧрддрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╛ рддреЛ рдЦреБрдж рдПрдХ рд╢рд╛рдВрдд рдкреАрдИ-рд▓реЛрдбрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдпрд╛ рд╡реЗрдм рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рддреЗ рд╣реИрдВ - рд╣рдо рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдереЗ, рдФрд░ рд╣рдордиреЗ рдирд░рдХрдВрдХрд╛рд▓реЛрдВ рд╕реЗ рдЬреАрдЖрд░
8 рдХреЗ
рдХрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реБрдП рд╕рдм рдХреБрдЫ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬреЛ рд╣рдо рдЗрд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПред ;) рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдХрд╛рдЯ-рдЫрд╛рдБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдкреАрдИ-рд▓реЛрдбрд░ рдХрд╛ рдХрд╛рд░реНрдп рдПрдХ рд╕реМ рд▓рд╛рдЗрдиреЗрдВ рд╣реИ, рдХрдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдЕрдкрдирд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рдбрд┐рд╕реНрдХ рдкрд░ рдкреВрд░реНрдг рдХреЛрдб) рджреЗрддреЗ рд╣реИрдВ:
HMODULE LoadExecutable (LPBYTE image, DWORD* AddressOfEntryPoint)
рдпрд╣ рд╣рдорд╛рд░реА рдЕрдирдкреИрдХреНрдб рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ (рдкрддреЗ рдХреЗ рдмрд░рд╛рдмрд░ рдЬрд╣рд╛рдВ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ) рдФрд░ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рдкрддреЗ (AddressOfEntryPoint рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛) рдХрд╛ рд╣реИрдВрдбрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рддрд╛рдХрд┐ рдЖрдк рдЕрдВрдд рдореЗрдВ рд╡рд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЕрднреА рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдЯрд┐рд▓ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GetModuleHandle (NULL) рд▓реЛрдбрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЗрдореЗрдЬ рдмреЗрд╕ рд▓реМрдЯрд╛рдПрдЧрд╛, рди рдХрд┐ рдЕрдирдкреИрдХреНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдоред FindResource рдФрд░ LoadResource рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣рдорд╛рд░реЗ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВред рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреНрд▓рд┐рдЪ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рд▓реЛрдбрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрддреЗ рдХреА рдЬрдЧрд╣, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкреАрдИрдмреА (рдкреНрд░реЛрд╕реЗрд╕ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдмреНрд▓реЙрдХ) рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдкреБрд░рд╛рдиреЗ рдЫрд╡рд┐ рдЖрдзрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред PEB рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЛрдб рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ FS рдЦрдВрдб рдореЗрдВ 0x30 рдСрдлрд╕реЗрдЯ рдкрд░ рд░рд╣рддрд╛ рд╣реИред
PPEB Peb; __asm { push eax mov eax, FS:[0x30]; mov Peb, eax pop eax }
рдкреАрдИрдмреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд LDR_DATA рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреА рд╣реИред рдХреБрд▓ рддреАрди рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВ:
- InLoadOrderModuleList - рдмреВрдЯ рдХреНрд░рдо рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕реВрдЪреА;
- InMemoryOrderModuleList - рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдХреЗ рдХреНрд░рдо рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕реВрдЪреА;
- InInitializationOrderModuleList - рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдСрд░реНрдбрд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕реВрдЪреАред
рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдореЗрдВ рдЕрдкрдиреЗ рдмреВрдЯрд▓реЛрдбрд░ рдХрд╛ рдкрддрд╛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрддреЗ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
рдЕрдм рдЖрдк рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕реЗ рд╕рдмрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рддрд░реАрдХреЗ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
LPVOID entry = (LPVOID)( (DWORD)hModule + AddressOfEntryPoint ); __asm call entry;
AddressOfEntryPoint, рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдХрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ (RVA, рд░рд┐рд▓реЗрдЯрд┐рд╡ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕) рд╣реИ, рдЬреЛ LoadExecutable рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЗрдбрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрдг рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдмрд╕ рдЖрдзрд╛рд░ рдкрддрд╛ (рдпрд╛рдиреА, рдПрдХ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓) рдХреЛ RVA рдореЗрдВ рдЬреЛрдбрд╝рд╛ред
рдбрд╛рдЙрдирд▓реЛрдбрд░ рдХрд╛ рдЖрдХрд╛рд░
рдпрджрд┐ рд╣рдо рд╡реАрдПрд╕ 2010 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд░реНрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рджреЛ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо-рд╡рд╛рд╣рдХ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди 10 Kb рд╕реЗ рдмрдбрд╝рд╛ рдПрдХ рд░рд╛рдХреНрд╖рд╕ рд╣реЛрдЧрд╛ред рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд▓реЛрдбрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдХрд▓рдХ рдЧреБрдгреЛрдВ рдореЗрдВ (C / C ++ рдЯреИрдм) рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
- "рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, "рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ (/ O1)" рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗред
- рдЙрд╕реА рдЬрдЧрд╣ рдореЗрдВ, рд╣рдо рдЧрддрд┐ (рдзреНрд╡рдЬ / рдУрдПрд╕) рдкрд░ рдЖрдХрд╛рд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред
- "рдХреЛрдб рдмрдирд╛рдирд╛" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣рдо C ++ рдЕрдкрд╡рд╛рдж рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
- рд╣рдореЗрдВ рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ (/ GS-) рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмрд╛рдд рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВред
рд▓рд┐рдВрдХрд░ (рд▓рд┐рдВрдХрд░) рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ:
- рдореЗрдирд┐рдлреЗрд╕реНрдЯреЛ рдореЗрдВ рд╕реЗ рдирд░рдХ рдХреЛ рдореЛрдбрд╝рдирд╛ред рдпрд╣ рдмрдбрд╝рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░рдг, .rsrc рдЕрдиреБрднрд╛рдЧ рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЦрдВрдб рдиреНрдпреВрдирддрдо 512 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдЬреЛ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣реИред
- рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрдВрдж рдХрд░реЗрдВред
- рд╣рдо "рдЙрдиреНрдирдд" рдЯреИрдм рдореЗрдВ рдЪрдврд╝рддреЗ рд╣реИрдВред рд╣рдо "рдЖрдзрд╛рд░ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп" (/ DYNAMICBASE: NO) рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд▓рд┐рдВрдХрд░ рдПрдХ рд░рд┐рд▓реЗ рдЦрдВрдб (.reloc) рдмрдирд╛рдПрдЧрд╛ред
- рдЖрдзрд╛рд░ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЪрд▓реЛ рдХреБрдЫ рдЧреИрд░-рдорд╛рдирдХ рдЙрдЪреНрдЪ рдЪреБрдиреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 0x02000000ред рдпрд╣ рдорд╛рди рд╣реИ рдХрд┐ GetModuleHandle (NULL) рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рд╣рд╛рд░реНрдбрдХреЛрдб рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╣рдорд╛рд░реЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рди рдХрд┐ CRT-shnuyu: / ENTRY: WinMainред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдХреЛрдб рд╕реЗ рдкреНрд░рдЬреНрдЮрд╛ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдЧреБрдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рд╣рдо рдпрд╣рд╛рдБ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд┐рдВрдХрд░ рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реАрдзреЗ рдХреЛрдб рд╕реЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИрдВ:
#pragma comment(linker,"/MERGE:.rdata=.text")
рдпрд╣рд╛рдВ рд╣рдордиреЗ .rdata рд╕реЗрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ .text рдХреЛрдб рд╕реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд░реАрдб-рдУрдирд▓реА рдбреЗрдЯрд╛ (рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдЗрдореНрдкреЛрд░реНрдЯ рдЯреЗрдмрд▓ рдЖрджрд┐) рд╣реИрдВред рдпрджрд┐ рд╣рдордиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде .data рдЕрдиреБрднрд╛рдЧ рдХреЛ рднреА рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
#pragma comment(linker,"/MERGE:.data=.text")
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдПрдХ 1.5 Kb рд▓реЛрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд▓рдкреЗрдЯрдиреЗрд╡рд╛рд▓рд╛
рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рдЬреЛ рдЗрд╕реЗ рджреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░реЗрдЧреА рдФрд░ рд▓реЛрдбрд░ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧреАред рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реИред рдЫрд╛рддреНрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп:
HANDLE hFile = CreateFile(argv[1], GENERIC_READ,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD dwImageSize = GetFileSize(hFile, 0); LPBYTE lpImage = new BYTE[dwImageSize], lpCompressedImage = new BYTE[dwImageSize]; DWORD dwReaded; ReadFile(hFile, lpImage, dwImageSize, &dwReaded, 0); CloseHandle(hFile);
рдЕрдЧрд▓рд╛, рд╣рдорд╛рд░реЗ рдкреИрдХрд░ рдХреЛ рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкреАрдИ рдлрд╛рдЗрд▓ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд╣реЗрдбрд░ рд╕рд╣реА рд╣реИрдВ, рдЖрджрд┐, рд╣рдо рд╕рдм рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреБрд░рдВрдд рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо RtlCompressBuffer рдФрд░ RtlGetCompressionWorkSpaceSize рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рдпрд╣ рдмрдлрд░ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрдкреАрдбрд╝рди рдЗрдВрдЬрди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди (рдЬреИрд╕реЗ рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ) рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ:
DWORD format = COMPRESSION_FORMAT_LZNT1|COMPRESSION_ENGINE_STANDARD; DWORD dwCompressedSize, dwBufferWsSize, dwFragmentWsSize; RtlGetCompressionWorkSpaceSize(format, &dwBufferWsSize, &dwFragmentWsSize); LPBYTE workspace = new BYTE [dwBufferWsSize]; RtlCompressBuffer(format ,
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдлрд░ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд▓реЛрдбрд░ рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рдкреИрдХрд░ рдореЗрдВ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ
рдмрд┐рди 2 рдПрдЪ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдпрд╣ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдирд░реА рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЗрдбрд░ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛, рдЗрд╕рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
unsigned int loader_size=1536; unsigned char loader[] = { 0x4d,0x5a,0x00,0x00,0x01,0x00,0x00, ...

Bin2h рдХреЗ рд╕рд╛рде рд╣реИрдбрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╣рдо рдЙрд╕реЗ рд╣рдорд╛рд░реЗ рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╛рдЗрд▓ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдЖрдЧреЗ рдХреА рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдм, рдпрджрд┐ рд╣рдо рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рд╣рдореЗрдВ 90 рдХреЗ рджрд╢рдХ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдЕрддреАрдд рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛;)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдпрд╛ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдПрдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡рд╛рдпрд░рд▓ рд╡рд┐рд╖рдп рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд╛рд▓реЗ рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ рдЬреЛрдбрд╝рдирд╛, рд╕рдВрд░реЗрдЦрдг рдХреЗ рджреМрд░рд╛рди рдиреБрдХрд╕рд╛рди рд╕реЗ рднрд░рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓реЛрдбрд░ рдореЗрдВ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ (рд▓реЛрдбрд░) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдмрд▓реНрдХрд┐, рдПрдХрдорд╛рддреНрд░ рдЦрдВрдб - рд╣рдореЗрдВ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛ред ;)
рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧреА:
- рд╣рдо рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЦрдВрдб (.text) рдкрд╛рддреЗ рд╣реИрдВред
- рд╣рдо рдЗрд╕рдХрд╛ рднреМрддрд┐рдХ рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдбрд┐рд╕реНрдХ рдкрд░ рдЖрдХрд╛рд░ (SizeOfRawData)ред рдпрд╣ рдкреБрд░рд╛рдиреЗ рдЖрдХрд╛рд░ рдФрд░ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░реЗрдЦрдг (FileAlignment) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рд╕рд╛рдЗрдЬ (Misc.VirtualSize) рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдХрдВрдкреНрд░реЗрд╕реНрдб рдЗрдореЗрдЬ рдХрд╛ рд╕рд╛рдЗрдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
- рд╣рдо рдкреВрд░реА рдмреВрдЯрд▓реЛрдбрд░ рдЫрд╡рд┐ (OptionalHeader.SizeOfImage) рдХрд╛ рдкреНрд░рд╛рдЪреАрди рдлреЙрд░реНрдореВрд▓рд╛ [рдЕрдВрддрд┐рдо рдЦрдВрдб рдХрд╛ рдЖрднрд╛рд╕реА рдЖрдХрд╛рд░] + [рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЖрднрд╛рд╕реА рдкрддрд╛] рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╛рдЗрд▓рдПрдЧреНрдирд┐рдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдорд╛рди рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓рдХрд░ рднреА рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВред
- рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЛ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред
рдереЛрдбрд╝реА рддрд░рдХреАрдм рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдЖрдХрд╛рд░ (.text) рдХреЗ рд╕рд╛рде рдЖрднрд╛рд╕реА рдЖрдХрд╛рд░ (Misc.VirtualSize) рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЛрдб рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд┐рдирд╛ рдЖрдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдХрд╛рд░ рднреМрддрд┐рдХ рдПрдХ рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред рддреЛ, 511 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдмрдЪрд╛рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рд╣рдо рд╕рдВрд░реЗрдЦрдг рд╢реВрдиреНрдп рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдФрд░ рдЪрд┐рдк рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдо рдЗрди рд╢реВрдиреНрдп рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреЛрдб рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛:
рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рдУрд╣, рд╣рдо рд▓рдЧрднрдЧ 0xDEADBEEF рдФрд░ 0xBEEFCACE рд▓реЗрдмрд▓ рдХреЛ рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдЫреЛрдбрд╝реЗ рдЧрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдиреЛрдВ рд╕реЗ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдП рд╣реИрдВ! 0xBEEFCACE рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ 0xDEADBEEF рдЕрдкрдиреЗ рдкреВрд░реНрдг рдкрддреЗ рдкрд░ред рдЫрд╡рд┐ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ [рдЫрд╡рд┐ рдкрддрд╛] + [рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЖрднрд╛рд╕реА рдкрддрд╛] + [рдЕрдиреБрднрд╛рдЧ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдСрдлрд╕реЗрдЯ рдЫрд╡рд┐] рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди Misc.VirtualSize рдХреЗ рдорд╛рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред
рд╣рдо рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреИрдЧ рдЦреЛрдЬрддреЗ рдФрд░ рдмрджрд▓рддреЗ рд╣реИрдВ:
for (int i = 0; i < simple_packer_size; i++) if (*(DWORD*)(&pbLoaderCopy[i]) == 0xBEEFCACE) *(DWORD*)(&pbLoaderCopy[i]) = dwCompressedSize; else if (*(DWORD*)(&pbLoaderCopy[i]) == 0xDEADBEEF) *(DWORD*)(&pbLoaderCopy[i]) = nt->OptionalHeader.ImageBase + text->VirtualAddress + text->Misc.VirtualSize;
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред рдЕрдм рдореЗрдореЛрд░реА рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреИрдХреЗрдЬреНрдб рдФрд░ рд╡рд░реНрдХ рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рдмрд╕ рдЗрд╕реЗ CreateFile / WriteFile рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬреЗрдВред

OllyDbg рдореЗрдВ рдПрдХ рдмреЛрд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдкреИрдХрд░ рдХреА рд╕рдВрдкреАрдбрд╝рди рджрдХреНрд╖рддрд╛ рдХреА рддреБрд▓рдирд╛ UPX рдХреЗ рд╕рд╛рде Notepad.exe рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпреВрдкреАрдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ 48 128 рдХреЗ рдореБрдХрд╛рдмрд▓реЗ 1 Kb: 46 592 рдмрд╛рдЗрдЯреНрд╕ рдЬреАрддрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░рд╛ рдкреИрдХрд░ рдПрдХрджрдо рд╕рд╣реА рд╣реИред рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╣реА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдЬреИрд╕реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рд╕рдВрдкреАрдбрд╝рди рдлрд╝рд╛рдЗрд▓ рдЖрдЗрдХрди рдЦреЛ рджреЗрдЧреА! рдЖрдкрдХреЛ рд▓рд╛рдкрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реЛрдЧреАред
рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд
рд╣рдорд╛рд░реЗ рдкреИрдХрд░ рдиреЗ UPX рд╕реЗ рдЕрдзрд┐рдХ notepad.exe рдХреЛ рд╕рдВрдХреБрдЪрд┐рдд рдХрд┐рдпрд╛!
рдХреНрд░рд┐рдкреНрдЯреЛ рдореЗрдВ рдмрджрд▓реЗрдВ
рджрд░рдЕрд╕рд▓, рд╣рдорд╛рд░рд╛ рдкреИрдХреЗрдЬ рдХреНрд░рд┐рдкреНрдЯреЛрд░ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИ: рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдПрдВрдЯреА-рдЗрдореНрдпреВрд▓реЗрд╢рди рддрдХрдиреАрдХреЛрдВ рдХреА рдХрдореАред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд╛рдо рдЬреЛ рдЖрдк рдЕрднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреВрд░реА рдЫрд╡рд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдПрдВрдЯреА-рд╡рд╛рдпрд░рд╕ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рдЪреЛрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреВрдЯрд▓реЛрдбрд░ рдирд┐рдХрд╛рдп рдореЗрдВ xor рдХреБрдВрдЬреА рдкрдВрдЬреАрдХреГрдд рди рдХрд░реЗрдВред рдпрд╣реА рд╣реИ, рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдврд╛рдВрдЪреЗ рдореЗрдВ рдЗрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдЧрд╛ред рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдВрдЬреА рдХреЛ рдХреБрдЫ рдЧреИрд░-рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддрд╛рдХрд┐ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛрдб рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдЬрд▓ рди рдЬрд╛рдП, рдЖрдк рдХреВрдбрд╝реЗ рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдкреИрдХрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдиреНрдирдд рд╡рд╛рдпрд░рд╕ рдЗрдВрдЬрди рдХреЛ рдлрд╛рд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реЗрдм рдореЗрдВ рдмрд▓реНрдХ рд╣реИрдВред
рдмреВрдЯрд▓реЛрдбрд░ рдореЗрдВ LoadExecutable рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╣реИрдХрд░ рдкрддреНрд░рд┐рдХрд╛, рдлрд░рд╡рд░реА (02) 157
рдкреАрдЯрд░ рдФрд░ рднреЗрдбрд╝рд┐рдпрд╛ ред
рд╣реИрдХрд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ
