ΠΊΠ°ΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ pe ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
4. PE-ΡΠ°ΠΉΠ»Ρ: ΡΠ΅ΠΊΡΠΈΠΈ
4.1. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΠΈΠΉ
Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° PE Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΠ΅ΠΊΡΠΈΠΉ. ΠΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠΎΠ»Π΅ΠΌ NumberOfSections Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΆΠ΄ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 0x28 Π±Π°ΠΉΡ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ:
Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ (hex) | Π Π°Π·ΠΌΠ΅Ρ | Π’ΠΈΠΏ | ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|---|---|
00 | 8 | CHAR[8] | Name | ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ. |
08 | 4 | DWORD | Misc.VirtualSize | Π Π°Π·ΠΌΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ SizeOfRawData, ΡΠΎ ΡΠ΅ΠΊΡΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π±Π°ΠΉΡΠ°ΠΌΠΈ. |
0C | 4 | DWORD | VirtualAddress | RVA ΡΠ΅ΠΊΡΠΈΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ. |
10 | 4 | DWORD | SizeOfRawData | Π Π°Π·ΠΌΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ Π² ΡΠ°ΠΉΠ»Π΅. ΠΡΠ΅Π³Π΄Π° ΠΊΡΠ°ΡΠ΅Π½ FileAlignment ΠΈΠ· Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎ ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. |
14 | 4 | DWORD | PointerToRawData | Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΊΡΠΈΠΉ. ΠΡΠ΅Π³Π΄Π° ΠΊΡΠ°ΡΠ½ΠΎ FileAlignment ΠΈΠ· Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎ ΡΡΠΎ ΠΏΠΎΠ»Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. |
18 | 4 | DWORD | PointerToRelocations | Π ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. |
1Π‘ | 4 | DWORD | PointerToLinenumbers | Π ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. |
20 | 2 | WORD | NumberOfRelocations | Π ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. |
22 | 2 | WORD | NumberOfLinenumbers | Π ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. |
24 | 4 | DWORD | Characteristics | ΠΡΡΠΈΠ±ΡΡΡ ΡΠ΅ΠΊΡΠΈΠΈ. |
ΠΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Ρ.
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΡ 0 Π΄ΠΎ 8 ASCII-ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ 8 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ IMAGE_SIZEOF_SHORT_NAME. ΠΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π° Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅ 8 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π±Π°ΠΉΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ²Π½ΠΎ ΠΈΠ· 8 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π³ΠΎ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° Π½Π΅Ρ. ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ, Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠΎΠΎΡΠ½ΠΎΡΠΈΡΡΡ Ρ Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΠΊΡΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΡΠΈ Π΅Π΅ Π°Π½Π°Π»ΠΈΠ·Π΅ Π½Π΅Π»ΡΠ·Ρ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°Π½Π½Π°Ρ ΡΠ΅ΠΊΡΠΈΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΈΠ· Π΅Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² Π½Π΅ΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π΄Π°Π½Π½ΡΡ .
ΠΡΡΠΈΠ±ΡΡΡ ΡΠ΅ΠΊΡΠΈΠΈ
32-Π±ΠΈΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Characteristics ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°Π±ΠΎΡ ΡΠ»Π°Π³ΠΎΠ², ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. Π‘Π΅ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ:
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
IMAGE_SCN_CNT_CODE | 0x00000020 | Π‘Π΅ΠΊΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄. |
IMAGE_SCN_CNT_INITIALIZED_DATA | 0x00000040 | Π‘Π΅ΠΊΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. |
IMAGE_SCN_CNT_UNINITIALIZED_DATA | 0x00000080 | Π‘Π΅ΠΊΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. |
IMAGE_SCN_MEM_DISCARDABLE | 0x02000000 | Π‘Π΅ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°. |
IMAGE_SCN_MEM_NOT_CACHED | 0x04000000 | Π‘Π΅ΠΊΡΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ. |
IMAGE_SCN_MEM_NOT_PAGED | 0x08000000 | Π‘Π΅ΠΊΡΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³ΡΡΠΆΠ°ΡΡΡΡ Π² ΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ°ΡΠΊΠΈ. |
IMAGE_SCN_MEM_SHARED | 0x10000000 | ΠΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΡΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅ΠΊΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. |
IMAGE_SCN_MEM_EXECUTE | 0x20000000 | Π‘Π΅ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄. |
IMAGE_SCN_MEM_READ | 0x40000000 | Π‘Π΅ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ. |
IMAGE_SCN_MEM_WRITE | 0x80000000 | Π ΡΠ΅ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ. |
4.2. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅ΠΊΡΠΈΠΉ
Π‘Π°ΠΌΠΈ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΠ΅ΠΊΡΠΈΠΉ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΠ΅ΠΊΡΠΈΡ Π²ΡΡΠ°Π²Π½Π΅Π½Π° Π½Π° Π³ΡΠ°Π½ΠΈΡΡ FileAlignment ΠΈΠ· Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.
ΠΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΠΈΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΠΎΡΠΎΠ΄Π½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ΄Π½Π° ΡΠ΅ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄, ΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠΌΠΏΠΎΡΡΠ°.
4.3. ΠΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΊΡΠΈΡΠΌ
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ°ΠΊΡΠΎΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π² WINNT.H:
Π³Π΄Π΅ pHeader β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ PE, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ GetHeader.
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π²ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΠ΅ΠΊΡΠΈΠΉ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΊΠ»:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ RVA Π² ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ΅ΡΠ²Π°Ρ ΠΈΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π΄Π°Π½Π½ΡΠΉ RVA, Π° Π²ΡΠΎΡΠ°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ RVA Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π΅ΠΌΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π΅ΠΏΡΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π΄Π°Π½Π½ΡΡ Π΅Π³ΠΎ RVA, ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅.
Π‘ΡΠ°ΡΡΡ [0x01] ΠΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ Portable Executable (EXE-ΡΠ°ΠΉΠ») [Π€ΠΎΡΠΌΠ°Ρ PE-ΡΠ°ΠΉΠ»Π°]
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄ΡΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ²Π°ΡΡΠΈΡΠΎΠΉ ΠΈ PE-ΡΠ°ΠΉΠ»ΠΎΠΌ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ²Π°ΡΡΠΈΡΡ Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΡΡΠ°ΠΆ, ΡΠ²ΠΎΡ Π΄Π²Π΅ΡΡ, ΠΏΡΠΈΡ ΠΎΠΆΠ°Ρ, Π³ΠΎΡΡΠΈΠ½Π½Π°Ρ, ΠΊΠ»Π°Π΄ΠΎΠ²ΠΊΠ°, ΡΠ²ΠΎΠΈ ΠΊΠΎΠΌΠ½Π°ΡΡ, ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ²Π°ΡΡΠΈΡΡ Π΅ΡΡΡ ΡΠ²ΠΎΡ ΡΡ Π΅ΠΌΠ° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ²Π°ΡΡΠΈΡΠ΅ ΠΈ ΡΠ°ΠΌΠ° ΡΡΠ° ΠΊΠ²Π°ΡΡΠΈΡΠ° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² PE-ΡΠ°ΠΉΠ»Π΅. ΠΠ·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π° ΠΏΠΎΡΠΎΠΌ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ°ΡΡΠΈ.
ΠΠ°ΠΊ Ρ ΠΈ ΡΠΊΠ°Π·Π°Π», Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ ΡΠ°Π½ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ PE-ΡΠ°ΠΉΠ»Π°. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ PE-ΡΠ°ΠΉΠ»Π°, Ρ ΠΎΡΡ ΠΈ Π½Π΅ Π½Π΅ΡΡΡ Π² ΡΠ΅Π±Π΅ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΌΡΡΠ»ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΡΠ½ΠΊΡΠΎΠ² ΡΠ²ΠΎΠΉΡΡΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠ½ΠΊΡ Ρ ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π² ΡΠ°ΠΉΠ»Π΅ Π²ΡΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎ Π² Π±Π°ΠΉΡΠΎΠ²ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ (Π·Π°ΠΏΡΡΠΊΠ°) PE-ΡΠ°ΠΉΠ»Π°. ΠΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡΡ.
ΠΠΎΡ Π΅Π³ΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ C/C++.
Π― Π²ΡΠ΄Π΅Π»ΠΈΠ» ΡΠ°ΠΌΡΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠΌ ΠΎΠ±Π»Π°ΡΡΡ DOS-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π±Π°ΠΉΡΡ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ.
ΠΠ°Π»ΡΡΠ΅ Ρ Π½Π°Ρ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡ ΡΠ°ΡΡΠ΅ΠΉ: ΡΠΈΠ³Π½Π°ΡΡΡΡ, ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.
ΠΠΎΡ Π΅Π³ΠΎ ΡΡΡΡΠΊΡΡΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ C/C++:
ΠΠ° C/C++ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π‘ΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ C/C++ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠΎΡ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π½Π° ΡΠ·ΡΠΊΠ΅ C/C++:
Π Π²ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ (ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ Π² DataDirectory):
ΠΠΎ ΡΡΡΠΈ, Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΉ ΠΏΡΠΎΡΡΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΠΈΡΡ .
ΠΠΎΡ ΠΈ Π²ΡΡ, ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ ΠΈΠ·ΡΡΠ°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΏΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΠΈΠΉ. ΠΠΎ ΡΡΡΠΈ, ΡΠ΅ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ½ΠΈ ΡΠ»Π΅Π΄ΡΡΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΈ Ρ Π½ΠΈΡ Π½Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΉ. Π Π²ΠΎΡ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ , Π² ΡΡΠΈΡ ΡΠ΅ΠΊΡΠΈΡΡ , Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π½ΠΈΡ Ρ ΡΠ°Π½ΠΈΡΡΡ. Π‘Π΅ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΊΠ°Π·Π°Π», ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠ½Π°Ρ. Π’Π°ΠΊΠΆΠ΅, ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΈ ΠΊΠ°ΠΊ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡΠΎΠ±ΠΎΠΊ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ. Π Π°Π·ΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, Π° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ NULL-Π±Π°ΠΉΡΠ°ΠΌΠΈ (00). ΠΠΎΡ ΠΈ Π²ΡΡ, ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΊΡΠΈΠΉ.
ΠΠ° ΡΡΠΎΠΌ Π²ΡΡ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Ρ ΠΠ°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ Π²Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅ Π½Π΅ΡΠΎΡΠ½ΠΎΡΡΠΈ Π² ΡΡΠ°ΡΡΠ΅, ΠΏΡΠΎΡΡ ΠΎΡΠΏΠΈΡΠ°ΡΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ . ΠΡΠ΄Ρ ΡΠ°Π΄ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΡΠ΅ Π²Π°ΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ.
ΠΠΈΠΏΠ΅ΡΠΈΠΎΠ½: ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ°
ΠΠ°Π½Π½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ°Π»ΠΎΠ½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Portable Executables (PE) [1]: ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (DLL), ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±ΡΡΠ½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Windows.
Π ΠΈΡΡΠ½ΠΎΠΊ 1: ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°Π±ΠΎΡ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ°
1 ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π¨ΠΈΡΡΠΎΠ²ΡΠΈΠΊ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (runtime-crypter), ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡ Π² ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ (ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅). ΠΠ°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠ΅Π±Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. ΠΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Π°Ρ : ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°Ρ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ°ΡΠΈΡΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΆΠ΅ ΠΊΠΎΠΏΠΈΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΡ, Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠ΄Π²Π΅ΡΠ³Π½ΡΡΡ ΡΠ²ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π°Π½Π°Π»ΠΈΠ·Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π±Π΅Π· Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π° Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π½Π΅ΡΠ°. ΠΡΡΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° β Π·Π°ΡΠΈΡΠ° Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΡ ΡΠ΅Π²Π΅ΡΡΠΈΠ½Π³Π° ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΏΡΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΆΠ°ΡΠΈΠ΅ΠΌ).
ΠΠ°Π½Π½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠΎΠ² ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ°Π»ΠΎΠ½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Portable Executables (PE) [1]: ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (DLL), ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±ΡΡΠ½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Windows. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Windows ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ²:
ΠΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠΈ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΡΠ΅ ΡΠ΅ΠΌΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 2. ΠΠ°ΡΠ΅ΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 3 ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈ ΠΎΠ±ΡΡΡΠ½ΠΈΠΌ ΡΡΠ°Π»ΠΎΠ½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° ΠΠΈΠΏΠ΅ΡΠΈΠΎΠ½ Π΄Π»Ρ 32-Π±ΠΈΡΠ½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ (ΡΠΌ. ΡΠΈΡΡΠ½ΠΎΠΊ 1): ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π¨ΠΈΡΡΠΎΠ²ΡΠΈΠΊ (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 3.1) ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄Π΅ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΡΠΎΡΠΌΠ°ΡΠ΅ PE, ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΏΠ°ΠΌΡΡΡ, Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ ΠΈ Π΄ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΅Π΅ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΡΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠΌ AES-128 [2]. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ΅ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 3.2) Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ PE: ΠΎΠ½ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°Π½Π΅Π΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡΡ, ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ. ΠΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄Π±ΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΏΡΠΎΠ²Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΊΠ»ΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π΄Π΅ΡΠΈΡΡΠΎΠ²ΠΊΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΠΈΡΠ° ΠΎΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΠ»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° (container.exe) ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π²ΡΡΡΠ½ΡΡ (Π±Π°Π·Ρ ΠΎΠ±ΡΠ°Π·Π°, ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ΅ΠΊΡΠΈΠΉ ΠΈ Ρ. Π΄.). ΠΠ°Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ Π²ΡΠΎΠ΄Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΠΈ Π°Π½ΡΠΈΡΠ²ΡΠΈΡΡΠΈΠΊΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.
2 Π‘ΡΡΡΠΊΡΡΡΠ° PE-ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Windows PE
ΠΠ°Π½Π½ΡΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΡΠΌΠ°Ρ PE-ΡΠ°ΠΉΠ»ΠΎΠ² Windows ΠΈ ΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅, ΠΈ ΠΌΡ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠ°ΠΌΡΡΡ, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ Ρ. Π΄. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄Π°Π΄ΠΈΠΌ Π»ΠΈΡΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π²Π°ΠΆΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ exe-ΡΠ°ΠΉΠ»ΠΎΠ² Windows Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅:
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ PE-ΠΎΠ±ΡΠ°Π·Π°, Π½ΠΎ Π½Π΅ ΡΡΡΡΠΊΡΡΡΡ PE-ΡΠ°ΠΉΠ»Π°, Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» windows Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ MZ-Π·Π°Π³Π»ΡΡΠΊΠΈ. ΠΠ°Π½Π½Π°Ρ Π·Π°Π³Π»ΡΡΠΊΠ° β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° MSDOS, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ «You can not run this program in DOS mode» (ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Π»ΡΠ·Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ DOS) ΠΈΠ»ΠΈ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π² ΡΡΠ΅Π΄Π΅ MSDOS Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ DOS-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ MZ-Π·Π°Π³Π»ΡΡΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ (ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ) ΡΠ»Π΅ΠΌΠ΅Π½Ρ β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Windows PE, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉΡΡ Ρ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ «P, E, 0x0, 0x0», Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΠ°Π·Π° (image file header). ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΠ°Π·Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΈΠΏΠ°Ρ ΠΌΠ°ΡΠΈΠ½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86 [4] ΠΈΠ»ΠΈ ARM [5]), ΡΠ»Π°Π³ΠΈ (ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅ Π½Π° ΡΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ°ΠΉΠ» Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ) ΠΈ Ρ. ΠΏ. ΠΠ°ΠΆΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠΈΠΉ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΠ½ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠΈΠΉ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² data directory Π½Π΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΎ.
ΠΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΠ°Π·Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (ΠΊΠΎΡΠΎΡΡΠΉ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ). ΠΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²ΡΠΎΠ΄Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ°Π·ΠΌΠ΅ΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈ Ρ. Π΄. (ΡΠΌ. [1] Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ). ΠΠ°ΠΆΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ Π² ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π±Π°Π·Π° ΠΎΠ±ΡΠ°Π·Π° ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π°. ΠΡ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ ΠΈ PE-Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ. Π Π°Π· ΡΠ°ΠΊ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΡΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π·Π° (ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅Π»ΠΎΠΊΠ°ΡΠΈΠΉ β relocation table) Π² ΡΠ°Π·ΠΌΠ΅ΡΠ΅, ΡΠ°Π²Π½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ Β«ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π°Β». ΠΠ°Π»Π΅Π΅ ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
Data directory β ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ°Π·Π°. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅Π»ΠΎΠΊΠ°ΡΠΈΠΉ, ΡΠ°Π±Π»ΠΈΡ ΡΠΊΡΠΏΠΎΡΡΠ° ΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ Ρ. Π΄. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ Π΄Π»Ρ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠΌΠΏΠΎΡΡΠ°. Π’Π°Π±Π»ΠΈΡΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ API-ΡΡΠ½ΠΊΡΠΈΠΉ (Application Programming Interface). API-ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² DLL ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΎΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ message box Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ API-ΡΡΠ½ΠΊΡΠΈΡ MessageBox() ΠΈΠ· user32.dll). Π’Π°Π±Π»ΠΈΡΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠΎ ΡΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΠ΅Π½Π° DLL, ΠΈΠΌΠ΅Π½Π° API-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΡΠ°ΡΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ DLL, ΠΏΠΎΠ»ΡΡΠΈΡΡ Π°Π΄ΡΠ΅ΡΠ° Π½ΡΠΆΠ½ΡΡ API-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ°ΡΡΡ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° β ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΠ΅ΠΊΡΠΈΠΉ. Π‘Π΅ΠΊΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΊΠΎΠ΄, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅Π΅ ΠΈΠΌΡ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π°Π³ΠΈ (ΡΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Ρ. Π΄.), Π°Π΄ΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ ΠΈ Π΅Π΅ ΡΠ°Π·ΠΌΠ΅Ρ. Π Π°Π·ΠΌΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π Π°Π·ΠΌΠ΅Ρ ΡΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ Π² PE-ΠΎΠ±ΡΠ°Π·Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΆΠ΅ΡΡΠΊΠΎΠΌ Π΄ΠΈΡΠΊΠ΅), Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ β ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠΎΠ»Π΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ: Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΏΡΡΡ ΠΆΠ΅, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ β ΡΡΠΎ Π°Π΄ΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ PE-ΠΎΠ±ΡΠ°Π·Π°, Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ β ΡΡΠΎ Π°Π΄ΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡ ΡΠ°ΠΌΠΈ ΡΠ΅ΠΊΡΠΈΠΈ.
ΠΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΡΡΡΡΠΊΡΡΡΡ PE-ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠΎΡΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ PE-Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ. ΠΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΡ PE-Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ Π² PE-ΡΠ°ΠΉΠ»Π΅: 32-Π±ΠΈΡΠ½ΡΠ΅ ΠΈ 64-Π±ΠΈΡΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Windows ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ. ΠΡΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅: Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π°) ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ 32 ΠΈΠ»ΠΈ 64 Π±ΠΈΡΠ°. Π¨ΠΈΡΡΠΎΠ²ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ 32-Π±ΠΈΡΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ, ΠΏΠΎΡΠΎΠΌΡ, ΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° 32-Π±ΠΈΡΠ½ΠΎΠΌ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅.
ΠΡΡΠ³ΠΎΠΉ Π²Π°ΠΆΠ½ΡΠΉ Π°ΡΠΏΠ΅ΠΊΡ β Π°Π±ΡΠΎΠ»ΡΡΠ½Π°Ρ ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΠΈ: Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ (RVA). Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΊΠΎΠ΄ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Windows ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ PE-ΡΠ°ΠΉΠ» Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π·Π°. ΠΡΠ»ΠΈ PE-ΡΠ°ΠΉΠ» Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² ΠΈΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅Π»ΠΎΠΊΠ°ΡΠΈΠΉ (ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ exe-ΡΠ°ΠΉΠ»ΠΎΠ²), ΡΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΎΠΏΠΈΡΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ PE-Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° Windows:
ΠΡΠΎ Π»ΠΈΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΈ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ². ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅ΠΌΡ Π² Π½Π΅ΠΌ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠ΅Π½Ρ, ΠΈ ΠΌΡ Π·Π°ΡΡΠΎΠ½Π΅ΠΌ ΠΈΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.
3 ΠΠΈΠΏΠ΅ΡΠΈΠΎΠ½
ΠΠΈΠΏΠ΅ΡΠΈΠΎΠ½ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ: ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 2 ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ .
3.1 Π¨ΠΈΡΡΠΎΠ²ΡΠΈΠΊ
Π¨ΠΈΡΡΠΎΠ²ΡΠΈΠΊ β ΡΡΠΎ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π½Π° C/C++. ΠΠ½ΠΎ ΡΠΈΡΡΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π²Π½Π΅Π΄ΡΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π‘ΠΏΠ΅ΡΠ²Π° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ½Π΅Π΄ΡΠΈΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» Π² Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ.
Π ΠΈΡΡΠ½ΠΎΠΊ 2: ΠΠ΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ°
ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅Π»ΠΎΠΊΠ°ΡΠΈΠΉ ΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π·Π°. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°Π½ Π²Ρ ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΏΠΎΡΠ»Π΅ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»Π΅ Β«Π±Π°Π·Π° ΠΎΠ±ΡΠ°Π·Π°Β» PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ°Π½Π½Π°Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π±Π°Π·Ρ ΠΎΠ±ΡΠ°Π·Π° Π²Π»Π΅ΡΠ΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ (ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ ), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ°, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅: ΠΌΡ Π²Π½Π΅Π΄ΡΡΠ΅ΠΌ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ FASM Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ Π·Π΄Π΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ Ρ. Π΄. ΠΡΠ΅ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π΅Π»Π°Π΅Ρ Fasm. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
ΠΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΠΎΠ±ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π΅ΡΠ°Π»ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ: ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΡΠΈ Π΄ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ:
ΠΠ°ΡΠ΅ΠΌ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΡΡ ΠΏΠΎΠ»Ρ Β«Π±Π°Π·Π° ΠΎΠ±ΡΠ°Π·Π°Β» ΠΈ Β«ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π°Β». Π Π°Π·Π±ΠΈΡΠ°ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΠΈΠΉ), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π²Π°ΠΆΠ½Ρ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°Π±ΠΎΡ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° ΠΈ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΡΡΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π‘Π½Π°ΡΠ°Π»Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 4 Π±Π°ΠΉΡΠ° ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΌΠ΅ΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. AES β ΡΡΠΎ Π±Π»ΠΎΡΠ½ΡΠΉ ΡΠΈΡΡ, ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π±Π»ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ 16 Π±Π°ΠΉΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π·ΠΌΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ 16 (Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½ΡΠ»ΡΠΌΠΈ). ΠΠΎΡΠ»Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π±ΡΡΠ΅ΡΠ° Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΈΠΏΠ΅ΡΠΈΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ AES-128, ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°Π²Π΅Π½ 16 Π±Π°ΠΉΡΠ°ΠΌ. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄Π±ΠΈΡΠ°ΡΡ ΠΊΠ»ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΎΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΎ, ΠΈ ΠΊΠ»ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°:
ΠΠΈΡΡΠΈΠ½Π³ 1: ΠΠ»Π³ΠΎΡΠΈΡΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠ»ΡΡΠ° AES
1 unsigned char key [ AES KEY SIZE ];
2 for ( int i = 0; i
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ°: KEY SIZE ΠΈ KEY RANGE. KEY SIZE ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ° Π² Π±Π°ΠΉΡΠ°Ρ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ 0 Π΄ΠΎ 15 (Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½ΡΠ»ΡΠΌΠΈ). ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠ»ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΎΠΉ KEY RANGE, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ 0 Π΄ΠΎ 255.
ΠΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠ»ΡΡΠ° Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΠΈΡΡΡΠ΅ΡΡΡ. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ AES Π΄Π»Ρ Fasm [6] ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π΅ Π² Π²ΠΈΠ΄Π΅ DLL, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ° Π½Π° C/C++. Π¨ΠΈΡΡΠΎΠ²ΡΠΈΠΊ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΄Π°Π½Π½ΡΡ DLL, API-ΡΡΠ½ΠΊΡΠΈΡ aesEncrypt() ΠΈ ΡΠΈΡΡΡΠ΅Ρ Π±ΡΡΠ΅Ρ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ, ΡΠ°ΠΌ ΡΠ°ΠΉΠ» ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ 16) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. ΠΠ°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ASCII-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅:
ΠΠΈΡΡΠΈΠ½Π³ 2: ΠΠ°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ», ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΠΌΠ°ΡΡΠΈΠ² Fasm
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π»ΠΈΡΡΠΈΠ½Π³Π° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎ Ρ Fasm, Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ input.asm ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ°ΡΠ΅ΠΌ Π±Π°Π·Π° ΠΎΠ±ΡΠ°Π·Π°, ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π°, KEY SIZE ΠΈ KEY RANGE ΡΠ°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π² ΡΠΎΡΠΌΠ°Ρ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ Ρ Fasm (ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Fasm-ΠΊΠΎΠ΄Π° ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 3.2) ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 3.2).
ΠΠ°Π·Π° ΠΎΠ±ΡΠ°Π·Π° Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Fasm-ΡΠΎΡΠΌΠ°Ρ (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π° ΡΠ°Π²Π΅Π½ 0x1000000), ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ imagebase.asm, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΏΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°:
ΠΠΈΡΡΠΈΠ½Π³ 3: ΠΠ°Π·Π° ΠΎΠ±ΡΠ°Π·Π° Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Fasm
1 format PE GUI 4.0 at 0x1000000
Π Π°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΡΡΠΎΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 0x8000) ΠΈ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ sizeofimage.asm:
ΠΠΈΡΡΠΈΠ½Π³ 4: Π Π°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π·Π° Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Fasm
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, KEY SIZE ΠΈ KEY RANGE ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΡΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Fasm:
ΠΠΈΡΡΠΈΠ½Π³ 5: ΠΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Fasm
1 REAL KEY SIZE equ 6
2 REAL KEY RANGE equ 4
ΠΠ°Π»Π΅Π΅ ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Fasm, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
3.2 ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎ ΡΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊ ΠΈ PE-Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Fasm. ΠΠΈΡΡΠΈΠ½Π³ 6 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ°ΠΉΠ»Π° main.asm ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. Main.asm Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° include, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΡΠ·ΡΠΊΠ° C ΠΈ Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ Π² ΠΊΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π»ΠΈΡΡΠΈΠ½Π³Π° 3. ΠΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Fasm Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ PE-ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π²ΡΠ΅Π³Π΄Π° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ ΠΎΠ±ΡΠ°Π·Π° Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
Π‘ΡΡΠΎΠΊΠ° 4 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ entry, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² fasm Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π°. ΠΠ° Π½Π΅ΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ C/C++ Π΄Π»Ρ Π²Π°ΠΆΠ½ΡΡ API-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π‘ΡΡΠΎΠΊΠ° 7 ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» aes.inc, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ AES Π² Fasm [6]. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ, Π° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π΄Π»Ρ Π΄Π΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΠΈΡΡΠ½ΠΎΠΊ 3: ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΎΠΉ
Π ΠΈΡΡΠ½ΠΎΠΊ 4: ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΠΈΡΡΠΎΠ²ΠΊΠΈ
4 ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ
ΠΠ°Π½Π½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΠΈΠΏΠ΅ΡΠΈΠΎΠ½Π° β PE-ΡΠΈΡΡΠΎΠ²ΡΠΈΠΊΠ°, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π½Π° Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Nullsecurity ΠΏΠΎΠ΄ ΠΎΡΠΊΡΡΡΠΎΠΉ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ.
5 ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΠΈ
Π― Ρ ΠΎΡΠ΅Π» Π±Ρ Π²ΡΡΠ°Π·ΠΈΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΡ Π²ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Nullsecurity Π·Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΡΠΎΠ±ΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ ΠΠ΅Π»ΡΠΈ Π·Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²ΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π²Π΄ΠΎΡ Π½ΠΎΠ²Π»ΡΡΡΠΈΠ΅ Π±Π΅ΡΠ΅Π΄Ρ.
Π‘ΡΠ°ΡΡΡ [0x02] ΠΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ Portable Executable [ΠΠ°Π³ΡΡΠ·ΠΊΠ° PE-ΡΠ°ΠΉΠ»Π°]
Π ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅) Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (ΠΠΠ£), ΠΊ Π°Π΄ΡΠ΅ΡΠ°ΠΌ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΡΠ½ Π½ΠΈΠΆΠ΅.
Π’Π°ΠΊ Π·Π°ΡΠ΅ΠΌ ΠΆΠ΅ ImageBase ΠΏΡΠΎΡΠ΅ΡΡΡ? ΠΠΎΡΠ΅ΠΌΡ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ°Π²Π΅Π½ 0? ΠΠΎΡΠ΅ΠΌΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ ΡΠ°Π²Π΅Π½ 0x400000? Π’Π°ΠΊ ΠΆΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅!
Π’Π°ΠΊΠΆΠ΅ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ Dynamic Linked Libraries (DLLs) ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, PEBs (Process Environment Blocks) ΠΈ TEBs (Thread Environment Blocks). ΠΡΠΈ ΡΡΡΡΠΊΡΡΡΡ Ρ ΡΠ°Π½ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈ ΠΏΠΎΡΠΎΠΊΠ°Ρ .
1.2. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ e_lfanew ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π·Π±ΠΎΡΡ PE-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΈΠ· PE-ΡΠ°ΠΉΠ»Π° ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π±Π»ΠΎΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ SizeOfRawData (ΡΠ΅ΠΊΡΠΈΡ) ΠΏΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ PointerToRawData, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΡ Π±Π»ΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ImageBase + VirtualAddress Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌΠΈ.
Π‘Π½Π°ΡΠ°Π»Π°, ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ (ImageBase) ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² PE-ΡΠ°ΠΉΠ»Π°.
ΠΠΎΡΠ»Π΅ ΡΠ°Π·Π±ΠΎΡΠ° Π²ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΡΠ°Π·Π±ΠΎΡΠ° ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅ΠΊΡΠΈΠΉ, ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡΡ ΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ImageBase + AddressOfEntryPoint. ΠΠ±ΡΡΠ½ΠΎ, AddressOfEntryPoint ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π° (.text), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½ΠΎ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΎ.
ΠΡ, Π½Π° ΡΡΠΎΠΌ Π²ΡΡ. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ, Π±ΡΠ΄Ρ ΡΠ°Π΄ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ «Π²ΡΡΡΠ½ΡΡ» ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ²ΠΎΠΉ EXE-ΡΠ°ΠΉΠ» Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Hex-ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°. ΠΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ PE ΠΌΡ Π½Π°ΡΠ½ΡΠΌ ΠΈΠ·ΡΡΠ°ΡΡ Π΅Π³ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.