Dotnet dll декомпилирует и изменяет код
Мне нужно изменить код .NET DLL. Я могу видеть код, скомпилировав DLL с отражателем .NET, но я не могу изменить код DLL. С .NET Reflector я декомпилирую код и сохраняю его на своем жестком диске, но когда я могу перекомпилировать код, который он дает, ошибки.
Немного кода декомпилируется в двоичном формате, несколько кода декомпилируется с помощью С#. Есть ли инструмент для изменения и перекомпиляции библиотеки DLL?
Вот инструменты, которые я использовал для декомпиляции DLL:
- ILSpy
- DisSharp
- Reflector7.1 С плагином Reflexil
- Spices.Net.Suite.5.8
- Deploy.NET 1.0.0
- devextras.codereflect
- dotPeek-1.0.0.2545
- IntelliLock
- JustDecompile_BETA_2011.1.728.1
К сожалению, ни один из инструментов, дающих идеальный исходный код для перекомпиляции DLL-кода.
Ответы
Ответ 1
Работает следующий код:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe" original.dll /out=code.asm
echo Here changes to code.asm should be done.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe /dll code.asm
Итак, если изменение в коде должно быть небольшим, это можно сделать, внеся изменения в код сборки напрямую. Можно собрать и разобрать простые методы, чтобы увидеть, как должен выглядеть код сборки. Добавление дополнительных методов внутри файла сборки также не должно быть слишком сложным.
Конечно, анализ кода должен выполняться с использованием ilspy-подобных инструментов, отображающих исходный код, а не код сборки.
Используемые здесь инструменты взяты из Windows SDK (ildasm) и из .net framework (ilasm).
Ответ 2
У меня был ограниченный успех при перекомпиляции библиотек DLL. Лучший способ сделать это - использовать Reflector и плагин Reflexil. Вам нужно немного лучше узнать код IL, который составляет сборку .NET, но Reflexil отлично справляется с описанием OP-кодов. Я немного погуляю в своем блоге о том, как я использовал редактор справки PowerShell Cmdlet: http://csharpening.net/?p=348