Добавляю секцию в ехе. В некоторых файлах после добавления затирается кусок первой секции. Как правильно это обойти? ..подвигать все секции и править IMAGE_SECTION_TABLE?
maestro-ant либо двигать все секции на диске, либо укоротить за счёт чего-нибудь заголовок(к примеру подвинуть пе заголовок к 40Н, или переместить заголовки секций на таблицу дерикторий), либо не трогать файл.
куда добавляешь? в начало/конец/середину? возможно, здесь ты найдешь ответ на вопрос: http://kpnc.opennet.ru/virii.win32.ex.zip http://kpnc.opennet.ru/virii.win32.ex.2.zip
maestro-ant Секцию куда добавляешь? В конец? Скорее всего, именно так. Выход уже правильно указал asd: или все двигаешь (с пересчетом адресов), либо уменьшаешь заголовок. Если выбираешь последнее решение, то: 1. Иправить лучше положение начала IMAGE_NT_HEADERS32 (подвинуть ближе к заголовку DOS. 2. После этого в заголовке DOS исправь поле e_lfanew. Все. Это в том случае, если есть куда двигать. Если нет - либо забудь и не заражай такой файл, либо двигай все ))) Но последнее- гемор. ( .
Добавляю в конец файла. Так как я пишу криптор, то нужно сделать, чтоб добавить можно было в любой файл. Раньше с этим дела не имел.. так что всётаки проще сдвинуть все или укорачивать заголовок? Если двигать, то как бороться с адресацией?
Проще сдвинуть заголовок, если такая возможность есть. Однако, что-то мне подсказывает (проведи ряд опытов, проверь сам) что такая возможность будет не всегда. Поэтому в данном случае универсальный выход - полностью пересобирать файл. Я так делал, когда писал свой криптор )))) С адресацией бороться не нужно, надо все адреса проставить заново ))) Если надо подсказать как - обращайся.
maestro-ant Ты пишешь криптор,значется так!!! 1. Делай бекап оригенала 2. Открываешь по записи и перемещаешь от того адреса где новая структура секции, на ее размер. зы: если не ошибаюсь, то одна стуктура должна быть пустая, то и это учти Можешь переименовать этот файл,добавив к имени .bak, создать новый с именем оригенала без .bak. и уже там извращаться как хочешь, т.е. копирование нужных, добавление новых, снова копирование(кода, импорта, экспорта и т.д) а уже потом правка заголовков.
maestro-ant какой-то у тебя странный криптор... посмотри как exe-пакеры работают. короче, они восстанавливают образ оригинального PE в памяти.
В догонку: если уж пишешь криптор, размер секций на диске после шифрования 100% изменится. Так что все равно править таблицу секций. Лучше пересобрать. Не вижу аргументов против.
maestro-ant Забыл сказать, ты можешь поправить заголовок УЖЕ существующей секции. Зачем же создавать новую? Секция всего лишь делит файл на части, а логики ни какой не несет!!! Ей глубоко фиолетово, что в секции , импорт, экспорт или там висит код вируса или же шифрованные данне? Ей это по барабану!!!
..так так.. насколько я понимаю подходит только один вариант.. Для этого надо передвинуть секции на 40 байт(размер заголовка секции) и поправить заголовок каждой секции. а непотеряет ли тогда этот файл работоспособность? адресация не изменится? если да то как выйти из этого положения?
maestro-ant Нет, адресация у тебя не изменится!!! Так как в файле физические адреса и при выполнении будут виртуальные !
Заголовок в памяти всеравно выравнивается до 1000h так что можеш увеличивать его размер до 1000h и работоспособность не потеряется.
PaCHER <Заголовок в памяти всеравно выравнивается до 1000h так что можеш увеличивать его размер до 1000h и работоспособность не потеряется.> Как сомнительно сие утверждение. Посмотри w2ksp4 ntoskrnl.exe к примеру. И это стоит учитывать всё-таки.
Ппц тут насоветовали ) 1. Надо проверить, а не лежат какие-нить директории в месте куда ты пишешь заголовок. Обычно туда любят писать Bound Import, который в принципе можно прибить, ну а если делать по уму то перетащить в свою секцию. Если на этом месте нет директорий, то переходим к пункту 2. 2. Смотрим SizeOfHeader. Если наш заголовок ложится в пределах SizeOfHeader, то все можно писать. Если SizeOfHeader меньше, то переходим к п.3. 3. Смотрим RVA первой секции. Если оно больше чем наш новый SizeOfHeader (он будет равен концу заголовка новой секции), то нам повезло и можно вклинить наш заголовок между старым заголовком и первой секцией - для этого нужно физически "раздвинуть" файл в этом месте и вписать туда заголовок новой секции. При этом не забываем учесть это сдвиг в физических смещениях всех секций.