Обратный инжиниринг — компилировать с отладочной информацией

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

gcc -g ....

Помогает ли это как-то обратному процессу? я даю дополнительную информацию, если я это сделаю? Информации по теме не нашел.

отладочная информация не предоставляет такую ​​информацию. Возможно, чтение о дизассемблеры поможет.

ryyker 26.06.2019 17:56

Что вы подразумеваете под реверс-инжинирингом, что вы ожидаете от него? (например, у некоторых разработчиков моделей UML есть обратное заполнение модели UML из источники). Отладочная информация, создаваемая опцией -g, обычно используется отладчиком для связывания адреса со строкой в ​​функции/операции, чтобы узнать, где находятся переменные в памяти/стеке и т. д., но это не обратный инжиниринг.

bruno 26.06.2019 17:58

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

WhozCraig 26.06.2019 18:04

@WhozCraig Да, это именно то, о чем я спрашиваю..

sagi 26.06.2019 18:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
341
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вот пример определения макроса, включенного в результирующий файл:

username@localhost /path/to/source/code $ gcc test.c -Wall -Wextra -gdwarf-4 -g3
username@localhost /path/to/source/code $ grep __STDC_VERSION__ a.out 
Binary file a.out matches

Отладочная информация более полезна для декомпиляции при компиляции с помощью -g3, как показано в приведенном выше примере.

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

Если вы хотите предотвратить декомпиляцию своего кода, просто запустите strip вот так после сборки и отладки вашей программы:

strip program-file

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

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

определение/использование макросов исчезает до при компиляции во время предварительной обработки и не может быть частью отладочной информации

bruno 26.06.2019 18:01

Информация включена в двоичный файл. Просто grep что-то скомпилированное с -g3 для __STDC_VERSION__ и вы увидите.

S.S. Anne 26.06.2019 18:02

сделайте #define AZE 1 int main() { return AZE; } (минимум 2 строки, конечно) и скомпилируйте с -g, и вы не увидите АЗЕ в бинарном/исполняемом файле, вы также можете скомпилировать с опцией -E и проверить, что АЗЕ не появляется в результате препроцессинга

bruno 26.06.2019 18:06

@bruno Извините, эта конкретная отладочная информация появляется только при компиляции с помощью -g3.

S.S. Anne 26.06.2019 18:07

хорошо с -g3 у вас есть определение АЗЕ (я этого не знал, спасибо, что научили меня этому), но не то, где оно используется в источнике, поэтому интерес очень ограничен (на самом деле я не вижу, что он может быть ^^)

bruno 26.06.2019 18:10

@bruno Номер строки включается не как строка, а как целое число с исходным порядком байтов. Отладчик будет более полезен при тестировании для этого.

S.S. Anne 26.06.2019 18:11

Может быть, я не ясно выразился. Я имел в виду, если я скомпилирую свою программу с параметрами -g, -g3 или w/e , поможет ли это как-то другому выполнить обратный инжиниринг моей программы?

sagi 26.06.2019 18:48

@саги Немного. Если возможно, просто дайте им исходный код.

S.S. Anne 26.06.2019 18:49

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

sagi 26.06.2019 18:51

@sagi Вы хотите предотвратить декомпиляцию своего кода? Если это так, просто запустите strip после сборки.

S.S. Anne 26.06.2019 18:52

Вы упускаете мою мысль. Я не спрашиваю, как это сделать, я спрашиваю, скомпрометирует ли это каким-то образом компиляция таким образом.

sagi 26.06.2019 18:53

Нет. Ни в коем случае никто и никогда не получит работающую программу от декомпиляции софта. Просто напишите лицензию, запрещающую декомпиляцию и дизассемблирование.

S.S. Anne 26.06.2019 18:55

Другие вопросы по теме