LINUX.ORG.RU

Функции препроцессора.

 


0

2

Hello!
Пишу программу на СИ и столкнулся вот с такой проблемой.
Конфигурация моей программы, происходит на этапе компиляции. Т.е. я вношу конфигурационные данные в исходник, потом собираю, получаю программу. Получается следующее, к примеру я в исходнике задаю пароль == 123456789 Получается простая строка, которая остаётся в бинарном файле. Простой cat ./program выводит с ходу мою строку. Мне хочется этого избежать.
Мне нужно как-то указать препроцессору, чтоб он изменил веденный мной пароль в исходниках, на этапе компиляции. Т.е. скажем я определяю функцию препроцессора , которая будет видоизменять данные по какому-то алгоритму. Далее в конфиг файле указываю пароль == 123456789 , начинаю компилировать программу, а gcc автоматически в бинарный файл не 123456789 вставляет, а результат моего алгоритма преобразования данной строки.
Как это сделать? и можно ли сделать вообще?

Deleted

Ответ на: комментарий от ziemin

SORRY за глупый вопрос) . можете пояснить, как команда работает?

Deleted
()
Ответ на: комментарий от unC0Rr

Конечно: по крайней мере пароли в безопасности будут.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от unC0Rr

Если программа может использовать с пользой хэш,

Хэш используют, чтобы проверить правильность введенного пароля.

можно выдрать хэш, нафига тебе оригинальный пароль, если достаточно хэша?

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

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Думается, пароль тут не на запуск программы, а пароль для доступа к базе данных или чему-то такому.

unC0Rr ★★★★★
()
Ответ на: комментарий от beastie

Препроцессор C не Тюринг полный

почему-то первая ассоциация - «не хрен собачий»

lazyklimm ★★★★★
()
Ответ на: комментарий от Deleted

Выдает первые 10 байт из /dev/random в виде, пригодном для вставки в C-строку. Кстати лучше

head -c 10 /dev/random | hexdump -v -e '/1 " 0x%0X"'| tr ' ' '\\';echo

ziemin ★★
()
Ответ на: комментарий от Deleted

Ты тесты там пишешь и боишься, что учащиеся вскроют вопросы и ответы? Тебе же сказали - выносишь все строки в отдельное место, шифруешь всё и в процессе выполнения расшифровываешь, если так надо.

agentgoblin
()
Ответ на: комментарий от ziemin

Спасибо! думаю подобный способ мне подойдет!
И добавляю ещё вопрос. как в этот скрипт правильно вставить некое преобразование, допустим , каждый прочитанный символ xor с неким числом?

Deleted
()
Ответ на: комментарий от Deleted

Но зачем? Они и так случайные - в двоичном файле не видно! Хотя вот:

head -c 10 /dev/random | hexdump -v -e '/1 " 0x%0X"'| (read line; echo " $line" | tr ' ' '\\'; for a in $line; do echo -n \\0x$((10^$a)); done) ; echo

Вверху исходная строчка. 10 - твоё число.

ziemin ★★
()
Ответ на: комментарий от ziemin

Народ, я в баш скриптах ноль) так что уточнений прошу
echo «Моя строка!» 11 | hexdump -v -e '/1 " 0x%0X"'| (read line; echo " $line" | tr ' ' '\\'; for a in $line; do echo -n \\0x$((99^$a)); done) ; echo
Таким образом производим модификацию Моя строка! по xor с значением 99? всё верно?

Теперь далее:
head -n1 /dev/random | file2c 'const char data[] = {' '};'
Тут мы читаем одну строку из рандома, а далее? эт что значит file2c 'const char data[] = {' '};'

Deleted
()

echo «123456» >> | md5sum | base64 | md5sum | base 64

Херакни конвейером раз 50 в разных последовательностях, раскодировать в обратной последовательности.

anonymous
()
Ответ на: комментарий от Deleted

Таким образом производим модификацию Моя строка! по xor с значением 99? всё верно?

Да

Тут мы читаем одну строку из рандома

Да. Кстати символ новой строки может встретиться и через 100500 байт, так что лучше -c.

эт что значит file2c 'const char data[] = {' '};'

Делает C-шный массив символов. Утилита bsdшная, может и не быть.

ziemin ★★
()
Ответ на: file2c! от beastie

xxd

xxd же, что за file2c.

anonymous
()

http://pastebin.com/B5Ph8FF8 Вот такую мегаконструкцию я соорудил из разных макросов, которые смог нагуглить.

Если это пропустить через препроцессор, получится

a = { 20 +'p', 20 +'a', 20 +'s', 20 +'s', 20 +'w', 20 +'o', 20 +'r', 20 +'d' };

SZT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.