Странная тема? Возможно, но зато весело) Сегодня заставим случайность написать рабочий код. Приятного прочтения!
Итак, план максимально прост: генерируем случайную последовательность из символов, пока не получится код, который не будет выдавать ошибку. Для генерации строки делаем так:
lets — символы, из которых будет собираться строка. Это маленькие английские буквы, некоторые знаки препинания, цифры и перенос строки. Изначально были ещё кавычки, но я их убрал, потому что если поставить кавычки в начале и конце, то можно внутри писать что угодно — именно такие результаты я в основном и получал
Дальше с помощью eval() и try будем перехватывать ошибки
Пустые словари передаю в качестве globals и locals на всякий случай, чтобы никакие переменные из основного кода точно не попали в сгенерированный. Теперь собираем цикл на большое количество итераций и, если ошибки нет выводим строку — это и будет то, что нам нужно
В этом посте в тг я прислал больше сотни таких кодов. В принципе, тут бы можно было уже закончить, но хочу поделиться анализом частых паттернов
Про кавычки уже говорил. Дальше хак, который позволяет пролететь ошибку — or. Если написать что-то адекватное (чаще всего число, отличное от нуля которое в бинарном представлении True), дальше можно писать всякую дичь — интерпретатор даже не посмотрит, условие же уже сработало, поэтому получается много подобных строк:
- 7or erkqxa
- 9or ojf5+8
- 4or+gp-dbu
- 7.or+-vtw4
- 3or+r1-f/j
Также отлично прокатывают математические примеры и просто числа, типа
- -31/5.9,14
- .325095935
- 1/-774.422
- 7/+.54+69j
- 2.//4e-9+8
В общем как-то так, небольшой фан-проект, чтобы поразвлекаться. Буду рад лайкам, комментариям и всему вот этому)