вот короче проблема: Код (Text): mov eax,dword [ebp-0x28] ; указатель на .reloc допустим mov ebx,[eax+IMAGE_SECTION_HEADER.PointerToRawData] mov edx,[eax+IMAGE_SECTION_HEADER.SizeOfRawData add eax,dword [ebp-2C] ; [ebp-0x2C]=MZ add eax,edx собственно что я получил ? я спустился в конец секции далее я записываю в конец секции свой код, потом я иду в .CODE и нахожу 5 byte, перезаписываю первый байт на E8, а вот далее начинается... 1)когда я высчитываю адресс следующим путем: адресс куда нужно прыгнуть минус (адресс 5 байт+5), то при просмотре инфицированного файла получается следующее: я не допрыгиваю т.е мой код в расширенной секции лежит много вперед, нежели я прыгаю. вотъ вопрос: как правильно прыгнуть в другую секцию из .CODE к примеру ?
La_plaza Непонятно. Наверно EntryPoint ? Видимо это смещение в инструкции Call near ? Куда переход исполняется ? Если между секциями то необходимо пересчитать размер секций в памяти. В файле выравнивание секций на FileAlignment, а в памяти на SectionAlignment.
как думаешь, это из-за этого у меня не получается ? т.е сначала я должен записать код в секцию, потом я должен все повыравнивать ,а уж только потом я уже начинаю высчитывать смещение прыжка. Так получается ?
ха, ну для того, чтобы выровнять секцию в нее нужно вначале записать, а потом просчитывать прыжок. Верно ли я считаю ?
Выравнит страницу в памяти загрузчик. Например, если запись по ModuleEntryPoint, то смещение можно посчитать так: (RVA_Handler - RVA_EntryPoint - 5)