Да, вы добавляете данные вне / после конца определенного образа PE.Вы можете сделать простую конкатенацию, если не хотите иметь дело с PE-заголовком.
Например, сработает «echo abcd >> myprogram.exe», в результате чего «abcd» будет добавлен в конец «myprogram.exe.Myprogram.exe будет работать нормально.Тогда вам просто нужно будет написать способ найти добавленные данные (например, переместить заголовок, чтобы найти конец определенного изображения, найдя конец последнего раздела, или сохранить статическое смещение где-нибудь в EXE-файле, который вы позже сможете прочитать).Например, вы можете сохранить смещение, в котором вы сохранили данные, в последних 4 байтах файла.Тогда вы всегда будете знать, что статическое смещение равно EOF-4.
В качестве альтернативы, если вы хотите, чтобы ваши добавленные данные загружались в виртуальную память при загрузке процесса, вы могли бы фактически расширить последний раздел образа PE ипоместите туда свои данные.
Следите за выравниванием файлов в последнем разделе, вы захотите перейти к следующему выравниванию файлов (обычно 0x200 или 0x1000), затем добавьте свои материалы.
Как авториз исполняемого компрессора, который видел некоторые странные PE, позвольте мне сказать, что нет строгого правила, что последний раздел, определенный в таблице разделов, является последним в образе (они могут быть не в порядке).То есть они могут быть не в порядке.Тем не менее, они работают в 99% случаев, если только не сделаны каким-то странным компоновщиком или не модифицированы какой-либо внешней утилитой.
Мой упаковщик ( PECompact ) имеет бета-поддержку для 'overlay / extra-эмуляция данных 'BTW - это означает, что он может на самом деле сжать эти данные в конце вместе с EXE, а затем эмулировать их несжатый вид в памяти, когда вы делаете ввод / вывод в EXE-файл.В качестве альтернативы, он может оставить дополнительные данные / оверлей на внешней стороне файла и сжать остальные, но настроить чтение и запись так, чтобы физическое смещение не изменилось.Это необходимо, потому что установщики SO MANY и SFX-архивы фактически ссылаются на добавленные данные посредством статического смещения, вместо того, чтобы правильно вычислять их местоположение во время выполнения путем обхода PE-заголовка.
Ссылка Дэвида Холла делает немного больше, чем вам нужноделать, если вы не хотите сохранить подпись.Этот метод позволяет сохранять / использовать цифровую подпись, вставляя ваши данные в расширенную область сертификата в конце файла.
Вам вообще не нужно иметь дело с заголовком, если вы этого не хотите, и не заботитесь о сохранении подписи кода!