Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Внедрение в секцию PE - файла.(функция на С++) |
Посл.ответ | Сообщение |
|
Создано: 12 января 2007 10:26 · Личное сообщение · #1 Переписываю простенькую функцию с ассемблера на С++(МОЖЕТ У КОГО-НИБУДЬ ЕСТЬ ГОТОВАЯ?), понятное дело, что мог её включить и в __asm , но С++ люблю как-то больше, смысл такой функция получает в единственном параметре путь до exe-файла, затем путём расширения последней секции файла записывает свой exe-файл. При выполнении исполняется программа-носитель и наша программа, которую внедрила наша функция. С вызовами API на ассемблере я знаком и в принципе часть кода связанного с API - функциями я перенёс, но вот когда идёт чистый ассемблерный текст вида: mov edi,hMappingTo assume edi:ptr IMAGE_DOS_HEADER add edi,[edi].e_lfanew add edi,4 assume edi:ptr IMAGE_FILE_HEADER push [edi].NumberOfSections pop NumberOfSections add edi,sizeof IMAGE_FILE_HEADER assume edi:ptr IMAGE_OPTIONAL_HEADER пока в него ещё не вкурю. (Но это только пока ![]() --> www.sxd-vzlom.narod.ru/asm.asm <-- --> www.sxd-vzlom.narod.ru/asm.asm <-- - это файл ассемблерного кода, --> www.sxd-vzlom.narod.ru/asm.с <-- --> www.sxd-vzlom.narod.ru/asm.с <-- - это файл недопереписанной функции внедрения на С++. ![]() |
|
Создано: 12 января 2007 19:58 · Личное сообщение · #2 Ну это же элементарный разбор заголовка РЕ файла. IMAGE_DOS_HEADER* _edi = (IMAGE_DOS_HEADER*)(hMappingTo); // полагаю, что это укзатель на начало зачитанного в память файла IMAGE_FILE_HEADER* _edi2 = (IMAGE_FILE_HEADER*)((char*)_edi + _edi->e_lfanew + 4); // получили смещение РЕ заголовка и проскипали sizeof(IMAGE_NT_HEADERS::Signature) UINT NumberOfSections = _edi2->NumberOfSections; // скопировали в локальную переменную количество секций в файле IMAGE_OPTIONAL_HEADER* _edi3 = (IMAGE_OPTIONAL_HEADER*)((char*)_edi2 + sizeof(IMAGE_FILE_HEADER)); теперь edi (а в нашем случае _edi3) указавает на структуру IMAGE_OPTIONAL_HEADER32 из заголовка PE файла За такой стиль написания нужно расстереливать. Для себя я сделал вывод что автор этого когда знает синтаксис masm ассеммблера, но не умеет на нем описывать вложенные структуры (см. IMAGE_NT_HEADERS в platform sdk). ![]() |
|
Создано: 12 января 2007 21:49 · Личное сообщение · #3 |
|
Создано: 13 января 2007 10:24 · Личное сообщение · #4 DrGolova пишет: Ну это же элементарный разбор заголовка РЕ файла. IMAGE_DOS_HEADER* _edi = (IMAGE_DOS_HEADER*)(hMappingTo); // полагаю, что это укзатель на начало зачитанного в память файла IMAGE_FILE_HEADER* _edi2 = (IMAGE_FILE_HEADER*)((char*)_edi + _edi->e_lfanew + 4); // получили смещение РЕ заголовка и проскипали sizeof(IMAGE_NT_HEADERS::Signature) UINT NumberOfSections = _edi2->NumberOfSections; // скопировали в локальную переменную количество секций в файле IMAGE_OPTIONAL_HEADER* _edi3 = (IMAGE_OPTIONAL_HEADER*)((char*)_edi2 + sizeof(IMAGE_FILE_HEADER)); теперь edi (а в нашем случае _edi3) указавает на структуру IMAGE_OPTIONAL_HEADER32 из заголовка PE файла За такой стиль написания нужно расстереливать. Для себя я сделал вывод что автор этого когда знает синтаксис masm ассеммблера, но не умеет на нем описывать вложенные структуры (см. IMAGE_NT_HEADERS в platform sdk). Ну хорошо, а исходник Вы смотрели, не знаете где взять похожий исходник на С++? ![]() |
|
Создано: 13 января 2007 10:26 · Личное сообщение · #5 |
|
Создано: 13 января 2007 10:41 · Поправил: HoBleen · Личное сообщение · #6 |
|
Создано: 13 января 2007 13:31 · Личное сообщение · #7 sxd пишет: смысл такой функция получает в единственном параметре путь до exe-файла, затем путём расширения последней секции файла записывает свой exe-файл. При выполнении исполняется программа-носитель и наша программа, которую внедрила наша функция. на самом деле если тупо компилить приведённый код (asm.asm) - полученная программа клеит файлы, но после результирующий фаел не запускается(1.0), так что при переводе есть вариант разобратся с PE форматом и подумать написать свой джойнер. Так как идея инжекта из сурца старая и будит палится всем и вся. ![]() |
|
Создано: 13 января 2007 14:16 · Личное сообщение · #8 HoBleen пишет: Ничего не стоит переписать ее на си если знаешь асм. Проблема для тебя в том (если не знаешь асма) что такая работа обычно пишется на ассемблере. Привет HoBleen! Не меня вообще не напрягает работа с файлами, но при работе с PE-файлом надо знать всякие там смещения, я имею ввиду размеры... Поэтому и глючу... ![]() sER пишет: на самом деле если тупо компилить приведённый код (asm.asm) - полученная программа клеит файлы, но после результирующий фаел не запускается(1.0), так что при переводе есть вариант разобратся с PE форматом и подумать написать свой джойнер. Так как идея инжекта из сурца старая и будит палится всем и вся. Может ты использовал (производил внедрение) запакованный файл, не пробовал, что-нибудь простое виндовое... И хочешь сказать, что файл будет палиться антивирю? Может есть смысл использовать EntryObscurePoint, может это не будет палиться? ![]() |
|
Создано: 13 января 2007 14:37 · Личное сообщение · #9 sxd пишет: Может ты использовал (производил внедрение) запакованный файл, не пробовал, что-нибудь простое виндовое... calc & чистый fasm, ничего не пакованое sxd пишет: И хочешь сказать, что файл будет палиться антивирю? да sxd пишет: Может есть смысл использовать EntryObscurePoint, может это не будет палиться? пробуй ![]() |
|
Создано: 13 января 2007 14:41 · Личное сообщение · #10 |
|
Создано: 13 января 2007 15:04 · Поправил: sER · Личное сообщение · #11 если без извратов то не суй весь фаел в секции, попробуц пересобрать результирующий фаел: подцепляй последовательно добавляя их в конец и запуская стандартно через ShellExecute из shell32.dll и сам этот вызов тоже обязательно спрятать(так как антивири его пасут) параллельно пошифровать (чем сложнее тем лучше) вызовы exec'a. ![]() |
![]() |
eXeL@B —› Программирование —› Внедрение в секцию PE - файла.(функция на С++) |