Возможно ли объединить несколько родных dll в exe?
Да, я знаю, что это легко возможно с .NET/Mono/Managed dll, но могу ли я сделать то же самое с нативными? Я нашел UPX, но, похоже, он может только упаковать файлы, но не объединить их.
Предполагая, что у вас есть исполняемый файл, который статически импортируется из DLL, вы можете использовать инструмент pefrmdllembed , используя параметр командной строки "-impinj". Он может объединять собственные файлы DLL в собственные файлы EXE (той же архитектуры) при разрешении импорта.
Пример: pefrmdllembed.exe -impinj myapp.exe ogg.dll myapp_injected.exe
Это будет работать с большинством DLL. Будьте осторожны со специальными функциями загрузчика NT, такими как статический TLS; не поддерживается в 64-разрядной версии и может не дать хороших результатов в 32-разрядной версии.
Динамические библиотеки ссылок предназначены для внешнего использования. Хотя теоретически должно быть возможно переупаковать содержащиеся в них функции, в действительности, лучшее, что вы можете надежно сделать, - это упаковать все в самораспаковывающийся архив, который извлечет исполняемый файл и его библиотеки DLL во временную папку, а затем запустить исполняемый файл.
Если вы можете заполучить исходный код, вы, вероятно, сможете скомпилировать его с минимальными изменениями в статической библиотеке (.lib), которая может быть связана с программой, которая требует DLL, а не с внешними DLL.