Вот пример того, что я имею в виду...
Я видел несколько приложений как это, и я никогда не видел примера или объяснения того, как это работает.
Кто-либо знает?
Другому примеру встраивали зашифрованный EXE в другой. Это извлечено и дешифровало в памяти, никогда не будучи сохраненным на диск, прежде чем это будет выполнено.
Я видел, что один использовал в некоторых приложениях предотвращать пиратство.
Править: Как заметка на полях, программам нравится работа UPX как это? Я посмотрел на код, но трудно дешифровать для меня, и я спрашиваю главным образом из любопытства, у меня нет потребности в нем.
Многие программы, которые делают это, просто распаковывают файл в %TEMP% (я знаю, что делаю), но большие мальчики, по сути, повторно реализуют загрузчик исполняемых файлов ОС, который должен:
Подводя итог: это большая работа. Если вам интересно, посмотрите спецификацию формата PE, которая описывает файлы .exe и .dll, и функцию VirtualAlloc()
.
Ну, если вы знаете, где находится смещение точки входа исполняемого файла, и знаете, какие параметры он принимает, то все, что вам нужно сделать, это вызвать функцию по адресу "exeBase + entryPointOffset", используя указатель функции.
Стоит отметить, что операционные системы, по крайней мере, системы x86, обычно не позволяют исполнять память, помеченную как данные. В windows, например, это можно изменить с помощью функции "Virtual ProtectEx", чтобы пометить память как исполняемую.
На самом деле, в старые добрые времена это была обычная система для экономии памяти. У вас были "оверлеи", которые позволяли экономить память, меняя местами код по мере необходимости.