2009-10-05 7 views
9

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

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

Что такое самый простой способ сделать это?

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

Update: решаемые его, делая это:

Программа представляет собой единый исполняемый файл

  1. Найти ошибку в рефлектор с C# -view. Затем переключитесь на IL-view, чтобы увидеть, что вы должны искать на шаге 5.
  2. Открыть программу, которую вы хотите изменить, с помощью ildasm
  3. Нажмите дамп и выберите пустую папку, настройки по умолчанию работали для меня.
  4. Найдите файл .il в этой папке и открыт с любым текстовым редактором
  5. Найти код с шага 1.
  6. заменить его новым код, в моем случае я просто должен был заменить все содержимое функции с простой возврат (IL_0000: ret). Я не думаю, что все исправления будут такими легкими.
  7. Откройте командную строку в папке с шага 3
  8. Запустите ilasm, мне также пришлось включить некоторые ресурсы из оригинального exe. Они автоматически выводятся с помощью ildasm. Я использовал этот ILASM как этот "C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ ilasm.exe" test.il /resource=test.res /output=FixedProgram.exe

Done ! Я использовал фиксированную программу только несколько минут, но, похоже, работает так же, как и раньше, за исключением ошибки :)

У меня также возникли проблемы с настройками приложения. В % appdata% \ ProgramName была папка с именем ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs, где хранятся все настройки. Мой новый исполняемый файл создал новую папку, подобную этой, с разными случайными буквами в конце и с настройками по умолчанию. Чтобы скопировать настройки, которые вы использовали, просто скопируйте все содержимое старой папки в новую.

ответ

1

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

Альтернативно вы можете попробовать инструмент, например ILDasm, что должно позволить вам извлечь IL, внести изменения (в MSIL) и повторно собрать (используя ILAsm). Очевидно, чтобы сделать это, вам придется выяснить, как написать свое изменение в IL, поэтому вам, вероятно, придется немного поэкспериментировать, чтобы увидеть, как скомпилировать утверждения.

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

Удачи.

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

+0

Спасибо, что приняли это как ответ Эрик, похоже, это то, что сработало для вас, но для других людей, читающих это, обязательно проверьте Reflexil (http://sebastien.lebreton.free.fr/reflexil/) (как упоминалось в Jb Evain's ответ), так как это позволит вам непосредственно внести изменения в сборку с кодом C#, не беспокоясь об ИЛ, и сохраните исправленную версию сборки, все из рефлектора очень легко. Я настоятельно рекомендую проверить это, это отличный инструмент. –

2

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

Если есть более простой способ, я бы тоже хотел его знать.

+0

+1 - вы были быстрее;) – Lucero

2

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

1

Попробуйте использовать это. NET Reflector addin.

Это сработало для меня. Иногда он создает теги «Complier Generated», которые невозможно выполнить. Но вы можете легко исправить это вручную.

8

Предлагаю вам использовать плагин Reflexil для Reflector. Это позволяет вам легко изменять сборки и даже заменять тело метода вашим собственным кодом C#.

+0

Теперь, если это работает так, как говорится, это делается на веб-сайте, который является фантастическим. +1. Сесил выглядит потрясающе. «Модифицировать сборки на лету». Вау! Что я могу еще сказать. Следите за большой работой Jb. –

+0

Спасибо, Саймон. Все кредиты для Reflexil идут к моему другу Себастьяну Лебретону, который отлично поработал над преодолением Сесила и Рефлектора. –

+0

Для примера приведено ниже. На самом деле мне было довольно сложно найти варианты перезагрузки сборки. http://www.cumps.be/reverse-engineering-with-reflector-and-reflexil/ – Ian

0

Telerik Просто Decompile (бесплатно) Затем РЕФЛЕКСИЛ плагин в

2 мин работы с выше (я перепробовал все другие методы !!)

+2

Вы можете добавить более подробную информацию о том, как использовать оба? – dove

+0

Пожалуйста, добавьте больше деталей – Sid