Насколько успешно ведется работа над ASP.NET декомпилированным с помощью Reflector?

StackOverflow https://stackoverflow.com/questions/86030

  •  01-07-2019
  •  | 
  •  

Вопрос

Я только что закончил небольшой проект, в котором потребовались изменения в предварительно скомпилированном, но больше не поддерживаемом веб-сайте ASP.NET.Код был уродливым, но он был уродливым еще до того, как был скомпилирован, и я весьма впечатлен тем, что, кажется, все по-прежнему работает нормально.

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

Теперь мне просто любопытно, сколько других добились такого успеха, делая это.На самом деле я хотел бы написать статью CodeProject об определении, если не автоматизации, процесса обратного проектирования.

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

Решение 2

Будет:Из-за всего этого компиляторного сахара, который существует в платформе .NET

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

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

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

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

Если бы это было написано на .NET 1.1 или .NET 2.0, у вас было бы намного больше успеха, чем у всего, что было скомпилировано с помощью компиляторов VS 2008, в основном из-за синтаксического улучшения, которое внесли новые версии языка (лямбда, анонимные классы и т.д.).

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

Будьте внимательны к переменным / методу, начинающимся с <>, я часто это вижу (особенно при отражении .NET 3.5).

Худшее, что вы можете сделать, это экспортировать все это в VS, нажать compile и определить, сколько там ошибок, и выполнить вызов из этого.

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

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