рдЕрдкрдиреЗ рдкреАрдИ рдкреИрдХрд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕

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



рдПрдХ рдмрд╛рд░, рдЬрдм рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреА рдЕрднреА рддрдХ рдирд╣реАрдВ рдерд╛, рдкреИрдХрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣рдо рддрддреНрдХрд╛рд▓реАрди рдпреБрд╡рд╛ рдпреВрдкреАрдПрдХреНрд╕ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рдЪрдврд╝ рдЧрдПред рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрд╕рд┐рдЯрд╛рдЗрд▓рдХреЛрд▓рд╛рдЗрди рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдХрдо рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдпреВрдкреАрдПрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЙрдмрд╛рдК рдерд╛ - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдордиреЗ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдХрд╛рд▓рд╛ред рдореИрдЯ рдкрд┐рдЯреНрд░реЗрдХ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдзрд┐рдХ рдорджрдж рдХреАред рдЕрдм рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдмреИрдВрдХрд┐рдВрдЧ рдЯреНрд░реЙрдлреА рдХреЛ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( рдЬрд╝реАрдЙрд╕ 2.0.8.9 )ред рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ, рд╡рд┐рдВрдбреЛрдЬ рдкреНрд░рдХрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ( рд╡рд┐рдВрдбреЛрдЬ 2000 ) рдореЗрдВ рд╣реИрдВред
рдкреИрдХрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрдиреБрд╕рдВрдзрд╛рди, рд╕реАрдзреЗ рдЙрд╕ рдкрдХреНрд╖ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕ рддрд░рдл рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ " рдЧреБрд░реБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреИрдХрд░реНрд╕ рдлреЙрд░ рд▓рд╛рд╕реНрдЯ рдЯрд╛рдЗрдо" рд▓реЗрдЦ рд╣реИ, рдЬреЛ рдХреБрдЦреНрдпрд╛рдд рдЧреБрд░реБ рд╡реЛрд▓реЛрдбрд╛ рдФрд░ NEOx рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо, рдмрджрд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реА рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреАрдИ рдкреИрдХрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рд╕рдмрд╕реЗ рдареЛрд╕ рдФрд░ рд╕реБрд╕рдВрдЧрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, notepad.exeред рдЕрдкрдиреЗ рд╕рд╛рдорд╛рдиреНрдп 32-рдмрд┐рдЯ рдлреЙрд░реНрдо рдореЗрдВ, рдЗрд╕рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 60 Kb рд╣реИред рд╣рдо рдЗрд╕рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХрд░реНрдо рдХреНрдпрд╛ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП? рдЦреИрд░, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдлрд╛рдЗрд▓ рдХреЛ рдкрд╣рд▓реА рд╕реЗ рдЖрдЦрд┐рд░реА рдмрд╛рдЗрдЯ рддрдХ рдПрдХ рдПрд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред рдЕрдм рд╣рдо рдЙрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд┐рдЪреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рд╕рд░рд▓ рдХрдВрдкреНрд░реЗрд╕рд░ рдХреЛ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ 60 Kb рдореЗрдВ рд╕рд░рдгреА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 20 Kb рдореЗрдВред рдпрд╣ рд╢рд╛рдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдиреЛрдЯрдкреИрдб рдХреА рдЫрд╡рд┐ рдЙрдЪреНрдЪ рдПрдиреНрдЯреНрд░реЙрдкреА рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдпрд╣ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдХрд░ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдордзреНрдпрдо (рдмреВрдЯрд▓реЛрдбрд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬреЛ рдЗрд╕реЗ рдЦреЛрд▓ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред рд╣рдо рдорд╛рдзреНрдпрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рд╕рдВрдХреБрдЪрд┐рдд рдиреЛрдЯрдкреИрдб рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ (рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рдереЛрдбрд╝реЗ рд╕рдВрдХреБрдЪрд┐рдд рдиреЛрдЯрдкреИрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╣реИ) рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬреНрдб рдЗрдореЗрдЬ рдХреЛ рдвреВрдВрдв рд▓реЗрдЧрд╛, рдЗрд╕реЗ рдЕрдирдкреИрдХ рдХрд░ рджреЗрдЧрд╛, рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдПрдХ рд▓реЛрдбрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдкреИрдХрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдкреИрдХрд░ рдХрд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:рдмреВрдЯрд▓реЛрдбрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:рд╣рдо рд▓реЛрдбрд░ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдкреИрдХрд░ рджреНрд╡рд╛рд░рд╛ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд▓реЛрдбрд░


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

рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд рдЫрд╡рд┐ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ
//    PE-    HMODULE hModule = GetModuleHandle(NULL); PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule; PIMAGE_NT_HEADERS pNTHeaders = MakePtr(PIMAGE_NT_HEADERS,hModule,pDosHeader->e_lfanew); PIMAGE_SECTION_HEADER pSections = IMAGE_FIRST_SECTION(pNTHeaders); // ,      PIMAGE_SECTION_HEADER pLastSection = &pSections[pNTHeaders->FileHeader.NumberOfSections - 1]; // ,   LPBYTE pbPackedImage = MakePtr(LPBYTE, hModule, pLastSection->VirtualAddress); //   DWORD dwPackedImageSize = pLastSection->SizeOfRawData; 

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

 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛
 //   RtlDecompressBuffer      DWORD (__stdcall *RtlDecompressBuffer)(ULONG,PVOID,ULONG,PVOID,ULONG,PULONG); //    RtlDecompressBuffer  ntdll.dll (FARPROC&)RtlDecompressBuffer = GetProcAddress(LoadLibrary("ntdll.dll"), "RtlDecompressBuffer" ); 

рдЬрдм рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЕрдВрддрддрдГ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдирдкреИрдХ рдХрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ) рдФрд░ рдКрдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

 DWORD dwImageSize = 0; DWORD dwImageTempSize = dwPackedImageSize * 15; //      LPVOID pbImage = VirtualAlloc( NULL, dwImageTempSize, MEM_COMMIT, PAGE_READWRITE ); //  RtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1, pbImage, dwImageTempSize, pbPackedImage, dwPackedImageSize, &dwImageSize); 

COMPRESSION_FORMAT_LZNT1 рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ LZ рд╕рдВрдкреАрдбрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЗрдореЛрд░реА (pbImage) рдореЗрдВ рдкреАрдИ рдлрд╛рдЗрд▓ рдХреА рдХрдЪреНрдЪреА рдЫрд╡рд┐ рд╣реИред рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рджреЗрд╢реА рд╡рд┐рдВрдбреЛрдЬ рдкреАрдИ рд▓реЛрдбрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕реВрдЪреА рдХреЛ рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд▓реЛрдЧреЛрдВ рддрдХ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ:
  1. рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЗрдбрд░ (OPTIONAL_HEADER) рдХреА рдЫрд╡рд┐ рдмреЗрд╕ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдЫрд╡рд┐ (рд╣реЗрдбрд░) рдХреА рд╢реБрд░реБрдЖрдд рд░рдЦреЗрдВред
  2. рдЕрдиреБрднрд╛рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдкрддреЗ рдкрд░ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреБрднрд╛рдЧ рд░рдЦреЗрдВред
  3. рдЖрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рднреА рдкрддреЗ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдорд╛рдирдХ рдкреАрдИ рд▓реЛрдбрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдХреЗ, рд╣рдо рдХреБрдЫ рдкреАрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреИрдХрд░ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкреВрд░реНрдг рдмрд╣реБрдордд рдХреЗ рд▓рд┐рдП, рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреА - рдЖрдк рдЭреБрдВрдбреЛрдВ, рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдФрд░ рдЕрдиреНрдп рджреБрд░реНрд▓рдн рдФрд░ рдЧрдВрджрд╛ рдХрдЪрд░реЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдЖрдк рдЧрдВрднреАрд░ рд╕рдВрдЧрддрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╛ рддреЛ рдЦреБрдж рдПрдХ рд╢рд╛рдВрдд рдкреАрдИ-рд▓реЛрдбрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдпрд╛ рд╡реЗрдм рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╛рддреЗ рд╣реИрдВ - рд╣рдо рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдереЗ, рдФрд░ рд╣рдордиреЗ рдирд░рдХрдВрдХрд╛рд▓реЛрдВ рд╕реЗ рдЬреАрдЖрд░ 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 } // hModule тАФ      PE- Peb->ImageBaseAddress = hModule; 

рдкреАрдИрдмреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд LDR_DATA рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реВрдЪреА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреА рд╣реИред рдХреБрд▓ рддреАрди рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВ:рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдореЗрдВ рдЕрдкрдиреЗ рдмреВрдЯрд▓реЛрдбрд░ рдХрд╛ рдкрддрд╛ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрддреЗ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

 //    ,   //       PLDR_DATA_TABLE_ENTRY pLdrEntry = (PLDR_DATA_TABLE_ENTRY)(Peb->Ldr->ModuleListLoadOrder.Flink); pLdrEntry->DllBase = hModule; ... 

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

 LPVOID entry = (LPVOID)( (DWORD)hModule + AddressOfEntryPoint ); __asm call entry; 

AddressOfEntryPoint, рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдХрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ (RVA, рд░рд┐рд▓реЗрдЯрд┐рд╡ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕) рд╣реИ, рдЬреЛ LoadExecutable рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЗрдбрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрдг рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдмрд╕ рдЖрдзрд╛рд░ рдкрддрд╛ (рдпрд╛рдиреА, рдПрдХ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓) рдХреЛ RVA рдореЗрдВ рдЬреЛрдбрд╝рд╛ред

рдбрд╛рдЙрдирд▓реЛрдбрд░ рдХрд╛ рдЖрдХрд╛рд░


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

 #pragma comment(linker,"/MERGE:.rdata=.text") 

рдпрд╣рд╛рдВ рд╣рдордиреЗ .rdata рд╕реЗрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ .text рдХреЛрдб рд╕реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд░реАрдб-рдУрдирд▓реА рдбреЗрдЯрд╛ (рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдЗрдореНрдкреЛрд░реНрдЯ рдЯреЗрдмрд▓ рдЖрджрд┐) рд╣реИрдВред рдпрджрд┐ рд╣рдордиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде .data рдЕрдиреБрднрд╛рдЧ рдХреЛ рднреА рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 #pragma comment(linker,"/MERGE:.data=.text") //    .data    , //        #pragma comment(linker,"/SECTION:.text,EWR") 

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдПрдХ 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 , //     lpImage, //    dwImageSize, //   lpCompressedImage, //    dwImageSize, //   4096, //  ,   &dwCompressedSize, //       workspace); //    

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

 unsigned int loader_size=1536; unsigned char loader[] = { 0x4d,0x5a,0x00,0x00,0x01,0x00,0x00, ... 


Bin2h рдХреЗ рд╕рд╛рде рд╣реИрдбрд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рд╣рдо рдЙрд╕реЗ рд╣рдорд╛рд░реЗ рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╛рдЗрд▓ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдЖрдЧреЗ рдХреА рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдм, рдпрджрд┐ рд╣рдо рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рд╣рдореЗрдВ 90 рдХреЗ рджрд╢рдХ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдЕрддреАрдд рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛;)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреАрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдпрд╛ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдПрдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡рд╛рдпрд░рд▓ рд╡рд┐рд╖рдп рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд╛рд▓реЗ рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ рдЬреЛрдбрд╝рдирд╛, рд╕рдВрд░реЗрдЦрдг рдХреЗ рджреМрд░рд╛рди рдиреБрдХрд╕рд╛рди рд╕реЗ рднрд░рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓реЛрдбрд░ рдореЗрдВ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ (рд▓реЛрдбрд░) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдмрд▓реНрдХрд┐, рдПрдХрдорд╛рддреНрд░ рдЦрдВрдб - рд╣рдореЗрдВ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛ред ;)
рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧреА:рдереЛрдбрд╝реА рддрд░рдХреАрдм рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдЖрдХрд╛рд░ (.text) рдХреЗ рд╕рд╛рде рдЖрднрд╛рд╕реА рдЖрдХрд╛рд░ (Misc.VirtualSize) рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреЛрдб рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд┐рдирд╛ рдЖрдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдХрд╛рд░ рднреМрддрд┐рдХ рдПрдХ рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред рддреЛ, 511 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдмрдЪрд╛рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рд╣рдо рд╕рдВрд░реЗрдЦрдг рд╢реВрдиреНрдп рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдФрд░ рдЪрд┐рдк рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдо рдЗрди рд╢реВрдиреНрдп рдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХреЛрдб рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛:

рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
 //          PBYTE pbLoaderCopy = new BYTE[simple_packer_size + dwCompressedSize + 0x1000]; memcpy(pbLoaderCopy, (LPBYTE)&simple_packer, simple_packer_size); //    PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)pbLoaderCopy; PIMAGE_NT_HEADERS nt = MakePtr(PIMAGE_NT_HEADERS, pbLoaderCopy, dos->e_lfanew); //   PIMAGE_SECTION_HEADER text = IMAGE_FIRST_SECTION(nt); //         memcpy(&pbLoaderCopy[text->PointerToRawData + text->Misc.VirtualSize], lpCompressedImage, dwCompressedSize); //   ,    Misc.VirtualSize text->SizeOfRawData = ALIGN(text->Misc.VirtualSize + dwCompressedSize, nt->OptionalHeader.FileAlignment); //   (    )  text->Misc.VirtualSize += dwCompressedSize; //    nt->OptionalHeader.SizeOfImage = ALIGN(test->Misc.VirtualSize + test->VirtualAddress, nt->OptionalHeader.FileAlignment); //     DWORD dwNewFileSize = pSections->SizeOfRawData + test->PointerToRawData; 

рдУрд╣, рд╣рдо рд▓рдЧрднрдЧ 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
рдкреАрдЯрд░ рдФрд░ рднреЗрдбрд╝рд┐рдпрд╛ ред

рд╣реИрдХрд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ


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


All Articles