Обратное проектирование исполняемого кода


-1

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

1) являются идентификаторами (именами процедур, именами переменных, именами объектов и т. Д.), Каким-то образом сохраненным в скомпилированном машинный код? Если нет, будет ли обратный инженерный код иметь идентификаторы, которые выглядят как var001, var002, proc001, proc002 и т. Д.? В качестве примечания я помню, как читал в статье, что некоторые эксперты по безопасности обратили внимание на троянец и выяснили, что он был написан кем-то, чей язык был китайским. Теперь мне интересно, может быть, программист использовал имена переменных/процедур/объектов на китайском языке, и они были сохранены в машинный код? Или как еще могут рассказать исследователи?

2) комментарии полностью игнорируются во время процесса компиляции? Или, опять же, может ли какой-нибудь текст комментария попасть в машинный код?

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

4) какие скомпилированные языки программирования создают наиболее запутанные (т. Е. Трудно перепроектировать) исполняемые файлы? Еще более подробно, как (Object) Pascal сравнивается с C в этом отношении?

  0

Пожалуйста, задайте только один вопрос за сообщение. 09 фев. 162016-02-09 21:19:25

1

Хотя ваши вопросы довольно широкие, я постараюсь изо всех сил ответить.

Являются ли идентификаторы (имена процедур, имена переменных, имена объектов и т. Д.) Каким-то образом сохранены в скомпилированном машинного кода?

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

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

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

Если нет, обратный инженерный код имеет идентификаторы, которые выглядят как var001, var002, proc001, proc002 и т. Д.?

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

Как примечание, я помню, как читал в статье, что некоторые эксперты по безопасности обратили внимание на троянец и выяснили, что он был написан кем-то, чей язык был китайским. Теперь мне интересно, может быть, программист использовал имена переменных/процедур/объектов на китайском языке, и они были сохранены в машинный код? Или как еще могут рассказать исследователи?

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

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

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

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