Изменения в запутывании кода и поведении во время выполнения - PullRequest
1 голос
/ 07 сентября 2011

Можно ли как-нибудь создать головоломку из трех частей с помощью своего кода, который позволяет вам иметь зашифрованную строку, функцию, созданную специально для этой строки и только для этой (строка, которая в расшифрованном виде имеет видсобственно код / ​​инструкции по выполнению).И третье, и самое важное, последний кусок - это контекст, который делает возможным выполнение функции, и это состояние среды должно быть не поддающимся обработке.Таким образом, функция должна быть выполнена для совпадающей строки только один раз, только одно состояние среды, а после этого истечь.Это должен быть идеальный часовой механизм, в котором отсутствует только один фрагмент, чтобы сделать его «недоступным для галочки» (не может быть отмечено, как в «функционировать», конечно, потому что каждая часть жизненно важна).

Я говорю о языках сценариев здесь, где существует что-то вроде eval, но его можно применять в качестве общего метода.

Использование какого-то эффекта «домино», основанного на всех видах памятисостояния и переменные, случайные или нет, вы могли бы создать нечто похожее на «эффект утечки», позволяющий кусочкам вашего кода размещаться в структурированном (но скрытом) месте, чтобы в конце использовать странный инструмент в качестве «последовательности кода»все устроить в потоке исполнения.

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

Мой вопрос именно об этом ... это возможно?Есть ли какая-нибудь помощь, которую я могу получить?Как какие-нибудь идеи где-то?Потому что сейчас я не могу найти ничего, что могло бы удержать такой эффект.

И, конечно, вы не могли бы найти причину для меня попросить такую ​​вещь, как вы могли бы сказать, что никто не заинтересован в моем коде,или я страдаю от паранойи.Но все же подумайте, что это может быть причиной.Нет, это, безусловно, причина, по которой я хотел бы знать это.

И, пожалуйста, не молчите и не делайте поспешных выводов типа «было четко указано, что это не дискуссионный форум», так как это проблемаЯ столкнулся с какой-то насущной необходимостью найти решение.И поскольку у меня мало опыта во многих вещах, включая серьезную математику и твердое алгоритмическое мышление, я взываю о помощи.Поэтому я благодарю тех, кто уделит какое-либо внимание этому вопросу.

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Это принципиально невозможно, на очень фундаментальном уровне.

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

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

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

Но теперь вы вернулись к исходному состоянию.Проблема: У вас есть некоторая информация (ключ дешифрования), которую вы хотите предоставить пользователю для одного конкретного использования (дешифрование и запуск кода только при указанных вами обстоятельствах), а не для каких-либо других.

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

Кроме того, я понятия не имею, что вы могли бы проверить, что на самом деле гарантирует правильную среду.Если программа должна проверить, что она работает правильно (без изменений, чтобы шпионить за вашим кодом), прежде чем расшифровывать секретную часть себя и запускать ее, то шпион может легко извлечь зашифрованные данные, полученные из (незашифрованный) проверка кода, какие вычисления выполняются для проверки среды, а затем выполнять свои собственные вычисления на основе «правильной» среды, а не той, которая действительно существует.

В конце концов, все, что вы можете сделать, этосделать процесс восстановления вашего сверхсекретного кода более раздражающим, чтобы он не мешал.Большинство людей никогда не будут смотреть на ваш код;им просто все равно.Большинство из оставшихся сдаются при малейшем сопротивлении (хотя это может оттолкнуть их с помощью вашего программного обеспечения).Те, кто все еще пытаются после этого ... всегда есть шанс (если ваш секретный код действительно настолько ценен / интересен), что найдутся достаточно мотивированные люди, которые обойдут все, что вы делаете (если вы просто никогда никому не дадите свой кодна первом месте).Так что я склонен просто приложить небольшие легкие усилия, чтобы скрыть ваш секретный код и не беспокоиться о достижении идеальной безопасности, потому что это невозможно.

0 голосов
/ 09 сентября 2011

@ Бен, интересная презентация, я думаю, что думал об этом с того самого момента, как понял, что можно сделать, а что нельзя. Я думал о каждой возможной ситуации, о которой ты упоминаешь, и даже больше, действительно, кажется, что нет пути. Может быть, я должен ограничить себя в том, чтобы сделать так, чтобы головная боль была настолько сильной, насколько я могу. Мало того, что это суперсекретный код, как вы его назвали, но у меня есть еще одно намерение скрыть его, это то, что, простите за отсутствие скромности, это действительно интересный код, и я действительно хочу отфильтровать его, чтобы увидеть его , если требуется гений, чтобы сделать это от А до С, не проходя через В, и он должен взять другого, чтобы выяснить, как. Я думал, что нехватка опыта помешала мне решить эту проблему. Но, тем не менее, я всегда сталкиваюсь с такими кажущимися невозможными ситуациями, и я обычно поднимаю ад, чтобы найти решение, я справляюсь с этим просто отлично. Но сейчас я просто не могу сдаться.

Я мог бы просто знать ответ с самого начала, что независимо от того, сколько вы пытаетесь, это невозможно, и, конечно, легко понять, почему, потому что это не нормально или неправильно, он должен зависит от ваших знаний и опыта предел того, что вы создаете. И с учетом этого, очевидно, почему должен быть кто-то лучше, и наверняка найдется кто-то лучше, чем ты, чтобы одолеть тебя. Даже если это, по крайней мере для меня, субъективно говоря, очень хлопотно. Ну, тогда, я думаю, я сделаю все возможное, чтобы уменьшить число тех, кто знает мой суперсекретный код. В конце концов, даже бог - великий создатель загадок.

В любом случае, я высоко ценю ваш ответ.

P.S. Извините за поздний ответ, но так как я не мог ответить на свой вопрос в течение 8 часов, мне пришлось ждать, и после этого я не мог найти доступное время, чтобы сделать это.

0 голосов
/ 07 сентября 2011

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

...