LINUX.ORG.RU

m4 preprocessor


0

1

Всем привет

можно ли на m4 написать такой макрос с именем например m4 задача которого в следующем например есть исходник на .cpp в нем много строковых литералов например

printf(m4("Hello, World!\n"));

printf(m4("Hello, "
	"World!\n"));

для каждой новой строки надо выбрать рандомный ключ от 1 до 255 включительно не совпадающий ни с одним байтом исходной строки и заксорить им все байты в строке а следом добавить вторым параметром ключ для расшифровки и сделать это добро аргументами функции расшифровки например было

printf(m4("Hello, World!\n"));
ключ был выбран 17 (условно) стало (я укоротил и по настоящему не ксорил)
printf(decrypt("\xf4\xb2\x45\x87\x98\xa4", 17))
естественно если в строках встречается управляющие последовательности то их надо корректно обрабатывать (вычислять их код и тоже кодировать) ну и само собой должен уметь обрабатывать многострочные литералы типа
printf(m4("zdnhjknhdrkjhjkehjkhkg"
	"dkljgkldjfklgjdlkfjgkldfjgklfjgklj"
	"krdfjhdjkghjkdfhgjkdfhgkjdfhgjkdfhkgjhjk"));

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

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

да так играюсь надеюсь что можно заюзать m4 лень писать свое но если и придется писать свой парсер то тогда и определение криптованных строк станет намного короче и приятнее глазу например так

printf($"jkhtrfgdhhjegfdhejwgsjegjgdgeh\n");

printf($"gkjrhgfhjdgrjdghfjrgdjhjfgdrjfgr"
	"fjkxvhjkhxcjkhfrvfkjvhkhkrhfvjkhk"
	"fjkxchvjgrxvhjrxvgfrxvhjgfrgxvhjr\n");

тоесть надо только к началу строки добавить метку $ и определить пустой дефайн чтобы компилятор не ругался

#define $ 

а потом когда готов отлаженый релизный проект делаем коммит потом запускаем парсер он находит метки криптует строки следом компилируем релизный зашифрованый бинарик а потом делаем хард резет к коммиту сделаному перед запуском парсера восстанавливаем не обезображенные исходники и разрабатываем проект дальше

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