Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Внедрение. Обобщенный алгоритм внедрения выглядит так:
n считываем PE-заголовок и приступаем к его анализу;
n если DATA DIRECTORY содержит ссылку на структуру, привязывающуюся к физическим смещениям, либо готовимся скорректировать ее надлежащим образом, либо отказываемся от внедрения;
n если LS.r_off + LS.r_sz > SizeOfFile, файл скорее всего содержит оверлей, и лучше отказаться от внедрения;
n если физический размер какой-либо секции превышает виртуальный на величину большую или равную File Alignment, файл скорее всего содержит серединный оверлей, и настоятельно рекомендуется отказаться от внедрения;
n выбираем секцию, подходящую для внедрения (IMAGE_SCN_MEM_SHARED, IMAGE_SCN_MEM_DIS CARDABLE cброшены, IMAGE_SCN_MEM_READ или IMAGE_SCN_MEM_EXECUTE установлены, IMAGE_SCN_CNT_CODE или IMAGE_SCN_CNT_INITIALIZED_DATA установлены); которой, как правило, является первая секция файла;
n физическое смещение начала секции в файле равно ее raw offset (это надежное поле, и ему можно верить);
n физическое смещение конца секции в файле вычисляется более сложным образом: min(CS.raw offset + ALIGN_DOWN(CS.r_sz, FA), NS.raw_off);
n находим часть секции, не содержащую подструктур служебных таблиц PE-файла, таких, например, как таблицы импорта/экспорта;
n в выбранной части (частях) секции находим один или несколько регионов, свободных от перемещаемых элементов, а если это невозможно, выбираем эти элементы из fixup table для последующей обработки X-кодом вручную;
n при желании находим первый пролог и последний эпилог внутри выбранных частей секции, чтобы линия «отреза» не разорвала функцию напополам (это не нарушит работоспособности файла, но сделает факт внедрения более заметным);
n если мы хотим создать оверлей внутри файла, то:
n увеличиваем raw offset всех последующих секций на величину ALIGN_UP(sizeof(X-code), FA);