2009-08-08 4 views
2

Мне интересно, можно ли конвертировать пакетные файлы в исполняемые файлы с помощью C++? Здесь у меня много пакетных файлов, и я хотел бы преобразовать их в исполняемые файлы (в основном для обфускации кода). Я понимаю, что есть сторонние инструменты, которые могут это сделать, но я думал, что это будет хорошей возможностью для проекта программирования.конвертировать пакетные файлы в exes

Я не уверен, с чего начать. Нужно ли мне кодировать какой-то парсер или что-то еще?

ответ

4

Вам не нужен только синтаксический анализатор, вам нужно написать компилятор, который принимает файлы .BAT или .CMD, поскольку он вводит и выводит C++ как «машинный код». Я бы рассматривал это как «трудно-тяжелый» проект (главным образом из-за синтаксиса и семантики языка ввода), но если вы хотите пойти на это, окончательный вопрос SO о написании компилятора - here.

0

Как насчет this? Я не уверен, что это будет сильно запутывать, но по крайней мере вам не нужно писать собственный парсер, который может занять некоторое время :)

3

Создайте исполняемый файл, который хранит командный файл в качестве ресурса. Затем по исполнению возьмите пакетный файл из ресурса, запишите его на диск и выполните его. Затем удалите его.

Таким образом, вы можете даже иметь несколько командных файлов в одном исполняемом файле и запускать правый ключ через коммутатор командной строки.

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

+0

Это не совсем безопасно с точки зрения обфускации. Пакетный файл будет доступен на диске, даже если он на мгновение. – TFM

+0

obfuscation никогда не «полностью защищен» в любом случае - разборки и c победят. это быстрое и грязное решение имеет хороший ROI - небольшой R (eturn), но даже меньший I (nvestment)!-) –

+0

Вы можете запутать источник, зашифровав его; который не победит действительно определенного хакера (который выберет источник из памяти после того, как вы его расшифровали), но это не позволит кому-либо извлечь источник с помощью таких инструментов, как программа 'strings'. –

1

Вы могли бы открыть командные файлы с помощью блокнота и копирования построчно затем вставьте его в C++ файл .cpp, как это и использовать системную функцию:

.cpp

int main() 
{ 
    system("Your command here"); 
} 

Не конечно, если это то, что вы хотите, но в конечном итоге создаст исполняемый файл, но может занять некоторое время в зависимости от размера командного файла.

0

Как сказал Алекс, самый простой способ: компилировать пакетный файл хранит его в некоторой локальной области хранения в исполняемом файле и во время выполнения извлекает, выполняет и удаляет его. Использование файла ресурсов - хорошая идея, потому что тогда вы можете просто скомпилировать заглушку и просто скопировать ее и заменить содержимое ресурса всякий раз, когда вам нужен новый exe. Хотя решение anon определенно правдоподобно, похоже, что это будет слишком много работы, чем это действительно необходимо в этой ситуации.

В любом случае, мне действительно стало скучно несколько месяцев назад и что-то написал об этом, который можно найти here. Это ничего особенного, но должен показать вам, что вам нужно делать.

0

Хорошо, есть программа под названием Advanced BAT to EXE Converter (посмотрите на Google), что упрощает ее (если бы я был на моем ноутбуке, тогда я бы точно знал имя).

+2

Он прямо заявляет, что хочет использовать C++ и знает о «сторонних инструментах». – bummi

+0

Ну а вопрос коротко говорит, что он хочет изменить .bat на .exe ... Я не знаю, почему это было неправильно на вопрос =/ – user3093687

+0

Я ошибся ... Извините за этот глупый ответ от меня = ( – user3093687

Смежные вопросы