Ресурсы .NET EXE'шника, замена ресурсов используя С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Maxidrom, 12 Sep 2009.

  1. Maxidrom

    Maxidrom New Member

    Joined:
    4 Feb 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Привет ребят, возникла необходимость в подмене ресурсов .NET exe'шника... я не знаю как точно это все организовать, хотел посоветоваться. Заменять нужно конкретно *.rar или *.zip архивы, встроенные в exe как ресурс. Я вот как думал это сделать - открыть файл(exe) как массив байт, я так думаю *.rar/*.zip имеют какие-то определенные заголовки, по этим заголовкам распознать где архив, узнать где конец я пока не знаю как, и вобщем заменить эти байты на нужные, как быть с тем что заменяемый архив может быть больше или меньше того что в exe я тоже не знаю...

    В правильном ли направлении я смотрю? И может быть есть консольные утилиты способные ресурс заменить? Или идейки какиенить подкиньте.

    Заранее спасибо всем за советы.
     
  2. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    ну я так понимаю, что стоит загружать методами .net reflection, и уже что-нибудь менять там.
     
  3. Maxidrom

    Maxidrom New Member

    Joined:
    4 Feb 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Я наверное не так выразился, я использую не .NET C++, а C++ обычный, допустим у меня сервак с UNIX, и вот один C\C++ имея надо .NET сборку распотрошить там...
     
  4. Hiro Protagonist

    Joined:
    26 Aug 2009
    Messages:
    132
    Likes Received:
    24
    Reputations:
    -2
    Эээ. У .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 для убирания проверок.

    Или я чтото не так понял в вопросе?
     
  5. Maxidrom

    Maxidrom New Member

    Joined:
    4 Feb 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Спасибо за советы ребят, пойду кодить, если что спрошу...