Задать вопрос

Передача переменной в exe файл при его скачивании?

Здравствуйте.
Есть ссылка site.ru/download/?name=Laptinius
Переходя на данную страницу должен скачиваться .exe файл(C#/C++) с имеющийся внутри переменной string name = "Laptinius".

Как это можно реализовать? Генерировать exe'шник при запросе или каким либо способом в свойствах прописывать данную переменную?

Прошу помочь.
  • Вопрос задан
  • 3676 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 3
@Hint

Дописывайте строку в конец бинарника, а потом читайте её при запуске. Менять CRC или разбираться в структуре PE файла не требуется.

Грубый пример PHP-скрипта:

header('Content-Type: application/octet-stream');
readfile('file.exe');
echo chr(0) . $_GET['name'];

Не забудьте добавить другие важные заголовки (Content-Length и пр.).

В программе же надо открыть свой файл на чтение, перейти в конец, найти первый ноль и прочитать строку.

Ответ написан
TDz
@TDz

Выше товарищ Hint корректно ответил - самый простой способ это дописывать строку в конец файла. Я могу добавить что для этой задачи есть чудесныe модули для nginx, к примеру HttpAdditionModule или HttpEchoModule

Также популярен способ выдачи .msi файла вместо exe. MSI тоже исполняемый под виндой, но в нём зашиты текстовые блоки которые проще изменять "на лету". Но это в любом случае сложней чем первый способ.

Если в вашем экзешнике зашита проверка целостности тогда нужно писать скрипт который будет склеивать некий служебный экзешник (чья задача только в распаковке целевого файла и передаче переменной) с переменной и собственно полезным экзешником. Но это уже и проблемы с некоторыми антивирусами, и посложней в реализации.

Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com

Есть еще вариант: задать текстовый строковый буфер (константу) с уникальным содержимым, затем выполнять поиск и заменять это содержимое "на лету" на нужное. Лишние символы - 0-ые байты.

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
afiskon
@afiskon

Если я правильно понял, нужно заменить Laptinius на что-то другое? Тогда делается очень просто. Откройте exe-шник каким-нибудь hex-редактором и найдите смещение этой строки. Перед скачиванием создавайте копию этого файла и по этому смещению пишите другую строку.

Или, чтобы не было проблем с случае обновления exe-шника, используйте не смещение, а сканируйте файл в поисках этой строки. Будет совсем хорошо, если строка будет длинной и уникальной, типа Wai3AhKukaiQuai1.

Ответ написан
Комментировать
bogolt
@bogolt
В тело программы добавьте буфер, который будет хранить внедряемое при скачивании значение, например так:
volatile char external_buffer[MAX_LEN] = {0};

При скачивании в тело exe вставляйте нужные данные ( тут два варианта, либо узнать смещение выделенного буфера, либо искать по уникальному его значению ).
Сама же программа сможет просто пользоваться значением переменной.
Ответ написан
Комментировать
NorthDakota
@NorthDakota
PHP програмист

Это невозможно без "перекомпилирования" файла. Разве-что собирать файл на лету + .manifest

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы