скажите плз, как правильно надо править в PE-exe, чтобы внедрить в последнюю секцию свой код пралю PE так: Код (Text): AddressOfEntryPoint=sections[LastSection].SizeOfRawData+sections[LastSection].VirtualAddress; sections[LastSection].SizeOfRawData = ALIGN(sections[LastSection].SizeOfRawData, FileAlignment)+ALIGN(SIZE_X_CODE, FileAlignment); sections[LastSection].VirtualSize = ALIGN(VirtualSize, SectionAlignment)+ALIGN(SIZE_X_CODE, SectionAlignment); sections[LastSection].Characteristics=0xA0000020; SizeOfCode+=ALIGN(SIZE_X_CODE, FileAlignment); SizeOfImage+=ALIGN(SIZE_X_CODE, SectionAlignment); В файл X-код пишу в самый конец (надо ли забивать 0x00, если не выравнен файл?) впринципе, у меня работает (большинство стандартных хрюшки, ну и bcb-шные тоже) но какие-то и нет и ещё.. мот кто знает, как спрятать консольное окно, когда прога без gui, а внедрённый x-код создаёт gui-окно (при запуске показывается оба, надо спрятать консольное и показать его, после отработки х-кода перед передачей управления на OEP)
sysexit, да если SUB_SYSTEM = 0x0002, то при создании моего gui окна появляется ещё и консольное.. скажите как тогда правильно выставить AddressOfEntryPoint и по какому адресу писать сам внедряемый код?
l3ha это же палево менять в хидере линк на стартап код. Лучше распарсить немного кода и записать туда ветвление на себя. Не пермутация(интеграция своего кода в чужой), но способ норм. и прост.
IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint? Это RVA, перевести его в смещение в файле довольно тривиально: надо найти подходящую секцию (такую, что VirtualAddress<=AddressOfEntryPoint<VirtualAddress+VirtualSize) и использовать AddressOfEntryPoint-VirtualAddress+PointerToRawData. Это для канонического PE; теоретически (возможно Clerk подскажет исходя из знания загрузчика) точка входа может оказаться в памяти за пределами диапазона [VirtualAddress, VirtualAddress+VirtualSize), но в пределах диапазона [PointerToRawData, PointerToRawData+SizeOfRawData) в файле.
по палевности ничем не отличается от и файл будет модифицирован и на это укажет измененная чексумма, не говоря уже про размер
fsd чексумма в хидере? Так её пересчитать можно. Сертификат безопасности можно удалить, или не трогать этот файл. В хидере размера нет.
смысл поста был в том что разницы между видами внедрения нет, потому что результат будет один: изменится размер зараженного файла в фс и как следствие чексумма
Друже, ты не понял: я имел в виду ситуацию, когда данные из файла вылезают за пределы секции. Не будут ли они занулены, как можно предположить? О том, что точку входа можно и на адрес ExitProcess() назначить, я в курсе.
если ты имеешь ввиду данные после секций, то они вообще не будут загружены в память если ты имеешь ввиду данные между секциями, которые не относятся ни к одной из секций, то такой файл будет невалидным и не будет загружен - все секции должны идти подряд, между ними не должно быть разрывов в памяти
Ядро смещение PE хидера даже не проверяет(RtlImageNtHeader() ), не говоря уже про остальное. Решение описано в #5.