Здравствуйте. Возник вопрос. Может ли пользователь сделать привязку запуска исполняемого файла с атрибутами файла из архива? Каким образом это решается?
Ну к примеру мне в моём проекте понадобится выполнить “split” двух файлов, исполняемого и БД. Запускается исполняемый файл по ярлыку, в котором комментарием к наименованию исполняемого файла является наименование добавленного файла.
Executable.exe achive_file.bin
Прошу прощения, возможно неверно выразился. Ждал несколько дней ответ и уже не рассчитывал его получить.
Под архивом я имел в виду скомпилированный файл с защитой.
Меня интересует возможность добавления к примеру двух файлов в архив, исполняемого и файла данных, при том, что после компиляции исполняемый файл должен запускаться с атрибутом имени и расширения файла данных.
К примеру Chess.exe и board.bin.
В результате компиляции необходимо получить исполняемый файл, который помимо содержания защиты, при запуске будет “запускать” файл Chess.exe с атрибутом board.bin.
Т.е. условие компиляции с определённым атрибутом.
Для обычного запуска собранного проекта можно дописать атрибут в окне “Параметры”, но это для проверки. А необходимо, чтобы на выходе (после компиляции) получался самостоятельный файл.
К сведению. Сам файл Chess.exe без атрибутированного файла board.bin не выполняется. Только в связке.
Спасибо.
При наличии исходников “головного” EXE реализуется достаточно просто. Насколько я понимаю EXE анализирует параметры командной строки на старте. Достаточно предусмотреть вариант “параметр по умолчанию”, чтобы менять его в момент обработки VMProtect-ом.
Например:
#include "VMProtectSDK.h"
int main(int argc, char_t *argv[])
{
std::string file_name;
if (argc > 1)
file_name = argv[1];
else
file_name = VMProtectDecryptStringA("%DEFAULT_FILE_NAME%");
printf("File name = %s\n", file_name.c_str());
}
Далее с помощью скрипта в VMProtect меняете “%DEFAULT_FILE_NAME%” на нужное значение:
function OnBeforeCompilation()
local functions = vmprotect.core():outputArchitecture():functions()
local string_function = functions:itemByName("string \"%DEFAULT_FILE_NAME%\"")
if string then
string_function:item(1):setDump("board.bin" .. string.char(0))
else
error("string_function not found")
end
end
Нет, как раз исходников нет, иначе действительно было бы всё намного проще.
Совершенно точно. Без параметров КС никак.
Этот вариант можно предусмотреть при наличии исходников?
Подскажите пожалуйста, есть ли у меня возможность обойтись малой кровью и вставить к примеру в
проект один скрипт перед компиляцией или ещё какой-нибудь вариант?
Вообще запутался с этими двумя полями кода. Можно пожалуйста поподробнее? Большое спасибо за оперативность.
Нет, как раз исходников нет, иначе действительно было бы всё намного проще.
А куда они делись, если не секрет? )
Этот вариант можно предусмотреть при наличии исходников?
Я про них и писал.
Подскажите пожалуйста, есть ли у меня возможность обойтись малой кровью и вставить к примеру в
проект один скрипт перед компиляцией или ещё какой-нибудь вариант?
Прошу обратить особое внимание на то, что лицензия на наше программное обеспечение не предусматривает использование, при котором ущемляются права третьих лиц (например если вы не являетесь автором “головного” EXE и используете его нелегально). Поэтому такие вопросы на форуме по “защите ПО” выглядят несколько странно.
Вообще запутался с этими двумя полями кода. Можно пожалуйста поподробнее?
Первый кусок - это пример реализации “головного” EXE, второй - скрипт для VMProtect, который может менять “шаблон” внутри EXE на нужное значение (в данном случае на “board.bin”).
Так там свободно распространяемое ПО. Я не разработчик исполняемого файла ) Только board.bin
Тогда это не мой вариант
Так это не только лицензия на ваше ПО не предусматривает, а законодательство страны (если это конечно не Китай) [/quote]
Тут всё абсолютно легально, да и обсуждать это публично в данной ветке я думаю не стоит, вне зависимости от способа применения ПО.
Большое спасибо за подробное пояснение. Сейчас более менее понял какая часть кода к чему относится. Я это и предполагал, но уверенности не было.
А что по поводу моего вопроса? Если я могу дописать в параметрах board.bin, то как я могу записать аналогичную функцию в качестве скрипта для компиляции файла с защитой, который будет при запуске также обрабатывать подтяжку бинарника к исполняемому файлу?
Благодарю за ответ.
P.S. Возможно ли это и если да, то как это реализовать? Я просто пытался, пробовал, тыкался, перечитал мануал (но там очень сжато, а про это вообще нет), попробовал Файлы–Действие…но там видимо не те действия, которые мне нужны.
Мне тоже будет интересно узнать, существует ли такая возможность, но шансы на надежду уменьшаются в связи с тем, что уважаемый гуру начал не с самых простых способов, а с перекраивания исходников исполняемого файла. Это уже удручает. Удивительно, почему такая функция не предусмотрена в самом обработчике, ведь это прекрасно умеет делать любой архиватор (запускать то, что ему засунули внутрь с параметрами)
Ну может быть ещё рано расстраиваться. В противном случае для меня ПО просто потеряет смысл в случае, если нельзя заскриптовать или иным способом реализовать запуск “обработанного” исполняемого файла по определённом протоколу запуска.
Поправьте меня если я не прав, но я не думаю что это возможно сделать скриптом.
Господа, скрипт работает только на этапе компиляции в VMProtect, он для это и был сделан.
Мне тоже будет интересно узнать, существует ли такая возможность, но шансы на надежду уменьшаются в связи с тем, что уважаемый гуру начал не с самых простых способов, а с перекраивания исходников исполняемого файла.
Обратите внимание, что наш продукт предназначен для разработчиков программного обеспечения, и, как правило, у разработчиков есть исходники того, что они пытаются защитить с помощью нашего инструмента. К слову сказать “перекраивание исходников” был как раз самым простым способом. Из более сложных способов (если исходников программы нет) - на этапе компиляции в VMProtect можно “пропатчить” код EXE, который работает с командной строкой и подсунуть туда нужные данные, но для этого нужно иметь минимальный опыт в реверсинге. В принципе мы можем помочь с реализацией скрипта под конкретный EXE.
Удивительно, почему такая функция не предусмотрена в самом обработчике, ведь это прекрасно умеет делать любой архиватор (запускать то, что ему засунули внутрь с параметрами)
Дак возьмите “любой архиватор” если он решает все ваши задачи. Наш продукт сделан совершенно для других целей.
Так это никто и не оспаривает. Мы ведём речь только о внесении скрипта (если таковой внести возможно) именно на этапе компиляции
Так я и беру, но я хочу уйти от выполнения двойной работы. Разве вам это не видно? Кроме того конечный пользователь может легко растребушить архив, а скомпилированный VMProtect файл уже будет делом посложнее.
Проще всего будет сказать, возможно ли написать такой скрипт, с которым исполняемый файл будет скомпилирован с вышеуказанными параметрами? Ну вы же для чего-то сделали окно параметров и дали возможность туда писать “хвосты”? Я сейчас полагаю (возможно даже наивно), что внесение такого функционала в скрипт яйца выеденного не стоит. Для работоспособности требуемого функционала не требуется в обязательном порядке иметь исходники или реверсить файл, проверяя и фикся его структуру с кодом.
Скрипт должен выполнять запуск с атрибутами. Всё просто (вроде как).