алгоритм самомодифицирующегося кода

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

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

Мне интересно.

заранее спасибо.


person daehee    schedule 29.01.2013    source источник
comment
Программы на каком-то уровне являются просто данными, поэтому не существует единого общего алгоритма для самомодифицирующегося кода, кроме одного общего алгоритма, работающего с наборами целых чисел.   -  person    schedule 29.01.2013
comment
полиморфный код просто делает разные вещи в разных экземплярах, своего рода абстракция. Самомодифицирующийся код фактически модифицирует самого себя (очевидно), в то время как полиморфный код не обязательно делает это   -  person Hurricane Hamilton    schedule 29.01.2013
comment
Полиморфный код IMO означает код, который переписывает себя для выполнения практически одной и той же задачи с другим набором инструкций. Помимо вируса, пытающегося не иметь фиксированной последовательности кода для сопоставления, можно также использовать концепцию DRM.   -  person Aki Suihkonen    schedule 29.01.2013
comment
Самомодифицирующийся код в основном ассоциируется не с вирусами, а с 8-битными архитектурами, где более сложные инструкции (например, непрямой переход к подпрограмме) легче всего эмулировать путем изменения непосредственного содержимого цели во время выполнения. Циклы с постоянными параметрами можно ускорить, записав параметры непосредственно в инструкции.   -  person Aki Suihkonen    schedule 29.01.2013
comment
Что вы пытаетесь сделать? Любой код, который изменяет себя при выполнении, является частью самомодифицирующегося кода. Полиморфный код и метаморфный код являются частными случаями самомодифицирующегося кода и в основном используются для обфускации кода. В индустрии вредоносных компьютерных вирусов полиморфный и метаморфный код используется для того, чтобы сделать простое обнаружение сопоставления с образцом нецелесообразным вариантом из-за множества различных кодировок кодов операций, используемых для реализации одного и того же алгоритма, возможно, также с некоторой рандомизацией. См. Охота на Metamorphic.   -  person nrz    schedule 29.01.2013
comment
Мне было интересно, существует ли какой-либо формальный метод преобразования двоичного кода в эквивалентную самоизменяющуюся форму. Я думаю, что самомодифицирующийся код будет полезен для защиты программы от реверсирования.   -  person daehee    schedule 01.02.2013


Ответы (1)


Как уже упоминал Делнан, любая программа — это просто данные, пока процессор не попытается ее запустить.

Чтобы попрактиковаться в самомодифицирующемся коде, выполните следующие шаги:

  • скопировать notepad.exe в notepad_orig.exe
  • начать notepad_orig.exe
  • открыть notepad.exe в открывшемся окне блокнота
  • пишите что хотите
  • сохранить и закрыть

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

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

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

person C.Evenhuis    schedule 10.05.2013