0

У меня есть код c с символьным массивом, инициализированным «hello world».Самомодификация файла .exe c после выполнения

Я хотел бы знать, есть ли возможность повторной инициализации этого массива символов при каждом выполнении кода, какой-либо другой случайной строке. Если не C, могу ли я знать, возможна ли такая реализация на любом другом языке программирования?

подробно, скажем, мой код выглядит следующим образом:

char c[] = "hello world"; 
. 
. 

После выполнения этого кода один раз, я хочу полукокс массив с для инициализации автоматически в некоторой другой случайной строки (а не «привет мир») и это должно быть постоянным изменением. Это необходимо по соображениям безопасности. Могу ли я узнать, возможно ли такое?

Если нет, могу ли я узнать, можно ли самосортировать код после его выполнения один раз?

+1

Это зависит от операционной системы. Некоторые операционные системы отмечают запрет на запись исполняемого исполняемого файла. –

ответ

0

Вы самостоятельно можете изменить файл EXE, но вы должны знать:

  1. Вы, в основном, изобретая колесо делает это таким образом
  2. самомодифицирующийся код, как правило, (на самом деле, скорее всего) помечено с помощью антивирусного программного обеспечения. Уничтожение EXE после его выполнения еще более теневое.
  3. Как EXE (и ELF-файлы) выполняются
  4. Что ассемблере
2

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

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

У меня есть код с символьным массивом, инициализированный «hello world». Я хотел бы знать, есть ли возможность повторной инициализации этого массива символов при каждом выполнении кода, строка.

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

Вместо статически выделенной строки в th e, просто иметь отдельный файл ресурсов, который содержит строку (строки) и любое другое состояние. Вы можете изменить этот файл ресурсов (файл INI, файл данных, что угодно), чтобы изменить строку как и когда требуется (или даже удалить ее). Чтобы обеспечить безопасность, вы можете в цифровой форме подписать файл, который позволяет проверить, что содержимое является законным. Если подпись не удалась, программное обеспечение может отказаться от работы. Вы также можете зашифровать содержимое, чтобы он не мог быть прочитан любознательным пользователем. (Если они не удобны с отладчиком!)

Если нет C, могу ли я узнать, возможна ли такая реализация на любом другом языке программирования?

Это в основном ограничение по ОС, в том числе и обычный пользователь будучи в состоянии написать установленного приложения в системной папке (как правило, что-то вы не хотите разрешить). И если вы не можете сделать это на C, вы, вероятно, не сможете это сделать на другом языке!

После выполнения этого кода один раз я хочу, чтобы массив char c был автоматически инициализирован какой-либо другой случайной строкой (а не «hello world»), и это должно быть постоянным изменением. ... Могу ли я узнать, возможно ли такое?

Да, но используйте отдельный файл, как описано выше. Не изменяйте сам исполняемый файл.

Эта потребность по соображениям безопасности.

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

Если нет, могу ли я узнать, можно ли самокортировать код после его выполнения один раз?

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

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

Смежные вопросы