Вопрос

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

Реверс-инжиниринг включен Википедия:

Обратный инжиниринг - это процесс обнаружения технологические принципы устройства, объекта или системы путем анализа его структура, функции и функционирование.

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

Это было полезно?

Решение

Граница между ними кажется размытой. Этично я бы подвел черту в мотивации программиста.

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

Например, я недавно писал общий базовый класс для слоев данных Linq2SQL. Базовый класс использует отражение, чтобы получить представление о макете базы данных и правильно обрабатывать обновления вложенных бизнес-объектов. Если кто-то еще использует мой базовый класс для своего веб-приложения, я не получу никаких знаний о его исходном коде. Такое использование отражения, конечно, не является реверс-инжинирингом

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

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

Надо ставить под сомнение определение обратного инжиниринга , когда способность легко декомпилировать язык является частью языка ala Reflection.

С помощью такого инструмента, как .NET Reflector , я чувствую, что линии действительно начинают размытие!

Используя пример из самой SO, они недавно де-запутали исходный код Для их редактора ОМУ. Я бы сказал, что это определяет реверс-инжиниринг в большей степени, чем рефлексия.

Reflection - это всего лишь инструмент для чтения информации из сборки, так что сам по себе это не реверс-инжиниринг.

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

Я бы сказал, что Reflection - это всего лишь инструмент. Использование отражения не обязательно означает реверс-инжиниринг.

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

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

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

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

На самом деле, это прямая противоположность реверс-инжинирингу.

Собственно, «обратное проектирование» означает просмотр результатов процесса и работу в обратном направлении, чтобы определить, как они туда попали.Как правило, это делается без знания исходного кода и обычно приводит к совершенно другому процессу.

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

«Дисассемблирование» (также известное как «Отражение») — это просто действие по чтению байтов на жестком диске и присвоению им значения.Именно это делает ЦП, когда запускает код.Здесь мы просто делаем его удобочитаемым для человека.Опять же, несмотря на пугающие угрозы со стороны правообладателей, это совершенно законно.

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

Я думаю, вы здесь говорите о двух разных вещах:

  • Отражение — это метод, который можно использовать для обратного проектирования (помимо прочего).
  • Обратный инжиниринг — это действие, которое может, но не обязательно должно использовать размышление для достижения своих целей.

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

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

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

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

Юридические вопросы нужно задавать юристам. Адвокаты берут деньги. Если вы нанимаете адвокатов, это может стоить еще больше денег, если вам предъявят иск за то, что вы не спросили адвоката.

Лучшая ставка: не нужно спрашивать. Microsoft уже выпустила исходный код для многих .NET. См. http://www.microsoft.com/resources/sharedsource/default.mspx.

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

Отражение можно использовать для вызова методов или просмотра атрибутов, как сказал Дон, но его также можно использовать для анализа структуры сборки и даже просмотра внутреннего кода MSIL. Поэтому одно использование отражения может быть невинным, а другое - обратным инжинирингом.

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

Отражение во многих языках, таких как .NET и Java, - это исправления для плохих синтаксисов, которые не позволяют свободно взаимодействовать с объектами.

В действительно объектно-ориентированных языках, таких как Smalltak или Self, вам вряд ли когда-нибудь понадобится рефлексия, и, при необходимости, она намного более мощная, чем те, что предлагаются в .NET и Java.

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

В настоящее время я много работаю с Drupal (на основе PHP), который использует такие уродливые вещи, как объединение имен модулей в предопределенные имена ловушек, чтобы найти, существует ли эта функция, поэтому ее можно вызвать позже (например, module_hook_name).

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top