![]() |
Ресурсы .NET EXE'шника, замена ресурсов используя С++
Привет ребят, возникла необходимость в подмене ресурсов .NET exe'шника... я не знаю как точно это все организовать, хотел посоветоваться. Заменять нужно конкретно *.rar или *.zip архивы, встроенные в exe как ресурс. Я вот как думал это сделать - открыть файл(exe) как массив байт, я так думаю *.rar/*.zip имеют какие-то определенные заголовки, по этим заголовкам распознать где архив, узнать где конец я пока не знаю как, и вобщем заменить эти байты на нужные, как быть с тем что заменяемый архив может быть больше или меньше того что в exe я тоже не знаю...
В правильном ли направлении я смотрю? И может быть есть консольные утилиты способные ресурс заменить? Или идейки какиенить подкиньте. Заранее спасибо всем за советы. |
ну я так понимаю, что стоит загружать методами .net reflection, и уже что-нибудь менять там.
|
Я наверное не так выразился, я использую не .NET C++, а C++ обычный, допустим у меня сервак с UNIX, и вот один C\C++ имея надо .NET сборку распотрошить там...
|
Эээ. У .NET приложений другой формат исполняемых файлов чтоле? PE уже устарел? >____<
Если точно знаешь в какой секции расположен архив, то открываешь файл, в IMAGE_SECTION_HEADER смотришь файловое смещение этой секции, переходишь туда, ишеш сигнатуру архива (её посмотришь открыв hex-редактором любой архив, для rar - RAR, для zip - PK[непомню какието байтеки]). Ещё посмотришь описание формата rar/zip чтобы найти байтеки в которых прописан размер архива. Теперь ты его можешь читать. Теперь наступают сложности. В самом примитивном случае, когда имеем архив в конце последней секции и в коде нету проверок на его размер, то тупо расширяем секцию (правим IMAGE_SECTION_HEADER.SizeOfRawData, IMAGE_SECTION_HEADER.VirtualSize, IMAGE_OPTIONAL_HEADER.ImageSize). В остальных случаев все не так тривиально, тк придется пересчитывать релоки и ревесить NET для убирания проверок. Или я чтото не так понял в вопросе? |
Спасибо за советы ребят, пойду кодить, если что спрошу...
|
| Время: 23:21 |