Как декомпилировать dll в Visual Studio

Обновлено: 04.07.2024

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

Чтобы отобразить исходный код библиотеки DLL при отладке, Visual Studio использует файлы PDB (файлы символов), чтобы связать скомпилированный код с исходным кодом. Это означает, что Visual Studio необходимо найти файл PDB и файлы .cs. Visual Studio может загружать эти файлы либо с локального диска, либо с сервера символов. Проблема со сборками с закрытым исходным кодом заключается в том, что у вас нет доступа к исходному коду. В этом случае Visual Studio не сможет получить код с вашего локального диска или удаленного сервера. Таким образом, вы не можете войти в код этой библиотеки DLL.

Начиная с Visual Studio 2019 16.5, вы можете создать PDB и исходные файлы, декомпилировав сборку. Visual Studio использует ILSpy для декомпиляции библиотек DLL. Декомпиляция кода имеет ограничения. Например, вы не можете получить ни исходные комментарии, ни имена переменных. Кроме того, некоторый код может быть сложнее читать, чем в исходном коде, потому что декомпилятор не распознает некоторые шаблоны. Кроме того, библиотеки DLL могут быть запутаны, что затрудняет их декомпиляцию.

Откройте окно модулей из меню Отладка → Windows → Модули


Найдите модуль для декомпиляции, щелкните его правой кнопкой мыши и выберите "Декомпилировать исходный код в файл символов"


Теперь вы сможете перейти к коду

Необязательно: покажите исходные файлы в обозревателе решений


Возможно, вам потребуется включить параметр "Показывать разные файлы в обозревателе решений" в настройках VS.


Примечание. Для отладки внешней библиотеки DLL необходимо отключить параметр "Только мой код" в настройках Visual Studio

Создать исходный код

Символы не загружены

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

Снимок экрана документ без символов

Источник не найден

На следующем рисунке показано сообщение "Источник не найден".

Снимок экрана источник не найден документ

Создать и внедрить исходники для сборки

Снимок экрана контекстное меню сборки в окне модулей с командой декомпилировать исходный код.

Извлечь и просмотреть встроенный исходный код

Вы можете извлечь исходные файлы, встроенные в файл символов, с помощью команды «Извлечь исходный код» в контекстном меню окна «Модули».

Снимок экрана контекстное меню сборки в окне модулей с командой извлечения исходников.

Извлеченные исходные файлы добавляются в решение как разные файлы. Функция разных файлов по умолчанию отключена в Visual Studio. Вы можете включить эту функцию, установив флажок Инструменты > Параметры > Среда > Документы > Показать разные файлы в обозревателе решений. Без включения этой функции вы не сможете открыть извлеченный исходный код.

 Скриншот страницы параметров инструментов с включенным параметром разных файлов.

Извлеченные исходные файлы отображаются среди прочих файлов в обозревателе решений.

Снимок экрана обозревателя решений с разными файлами». /><br /></p>
<h2>Известные ограничения</h2>
<h3>Требуется режим паузы</h3>
<p><img class=

Создание исходного кода с помощью декомпиляции возможно только тогда, когда отладчик находится в режиме приостановки и приложение приостановлено. Например, Visual Studio переходит в режим останова при достижении точки останова или исключения. Вы можете легко инициировать останов Visual Studio при следующем запуске кода с помощью команды Break All ().

Ограничения декомпиляции

Отладка оптимизированных или выпуск сборок

При отладке кода, декомпилированного из сборки, скомпилированной с использованием оптимизации компилятора, вы можете столкнуться со следующими проблемами:

  • Точки останова не всегда могут быть привязаны к соответствующему источнику.
  • Переход не всегда может привести к правильному местоположению.
  • Локальные переменные могут иметь неточные имена.
  • Некоторые переменные могут быть недоступны для оценки.

Надежность декомпиляции

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

Ограничения для асинхронного кода

Результаты декомпиляции модулей с шаблонами асинхронного/ожидающего кода могут быть неполными или привести к полному сбою. Реализация ILSpy машин состояний async/await и yield реализована лишь частично.

Дополнительную информацию можно найти в выпуске GitHub: Статус генератора PDB.

Только мой код

Параметры Just My Code (JMC) позволяют Visual Studio обходиться без системных, фреймворковых, библиотечных и других непользовательских вызовов. Во время сеанса отладки в окне «Модули» показано, какие модули кода обрабатываются отладчиком как «Мой код» (пользовательский код).

В результате декомпиляции оптимизированных или выпущенных модулей создается непользовательский код. Например, если отладчик сломает ваш декомпилированный непользовательский код, появится окно No Source. Чтобы отключить функцию «Только мой код», выберите «Инструменты» > «Параметры» (или «Отладка» > «Параметры») > «Отладка» > «Общие», а затем снимите флажок «Включить только мой код».

Извлеченные источники

Исходный код, извлеченный из сборки, имеет следующие ограничения:

  • Имя и расположение созданных файлов нельзя изменить.
  • Эти файлы являются временными и будут удалены Visual Studio.
  • Файлы помещаются в одну папку, и любая иерархия папок, которая была в исходных источниках, не используется.
  • Имя файла для каждого файла содержит хэш контрольной суммы файла.

Итак, это совершенно не в моей стихии (и моего босса тоже).

Я скачал JustDecompile и понятия не имею, что мне делать.

У меня есть .dll, в котором я наконец-то вижу код, но мне нужна возможность редактировать код.

Например, в convertDataReaderToDataSet(SqlDataReader): DataSet. есть определения, которые мне нужно изменить, потому что они вызывают ошибки в математике. Например:

Вместо того, чтобы (now.Days

Этот человек является проверенным специалистом

Бобби Арчер

Защитите свои конечные точки от киберпреступников

2022-03-24 14:00:00 UTC Веб-семинар Веб-семинар: Cisco — защитите свои конечные точки от кибер-преступников Подробности о событии Просмотреть все события

Timb0slice

Этот человек является проверенным специалистом

Timb0slice

Бобби Арчер написал:

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

Если бы это был скрипт, это было бы так, но с скомпилированным кодом вы должны сначала декомпилировать его (если это позволяет вам), а затем перекомпилировать его в новую .dll или .exe или что-то еще. В этом случае вам нужно будет создать новый проект после копирования кода из JustDecompile. Я думаю, что в VS это так же просто, как «Меню сборки»> «Создать решение», когда у вас есть проект и код.

15 ответов

Timb0slice

Этот человек является проверенным специалистом

Timb0slice

Этот человек является проверенным специалистом

М. Бойл

Вам придется декомпилировать dll, скопировать исходный код в новый проект в Visual Studio и скомпилировать там новую dll.

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

Этот человек является проверенным специалистом

OP Бобби Арчер

Вот в чем проблема. Я вижу это сейчас, просто нет доступа, чтобы изменить это. Итак, мне следует скопировать и вставить его в новый проект внутри Visual Web Developer?

Этот человек является проверенным специалистом

OP Бобби Арчер

Этот человек является проверенным специалистом

М. Бойл

Я всегда предполагал, что декомпиляция — это односторонний процесс. Но некоторые декомпиляторы могут позволить вам внести изменения и обратить процесс вспять. Совсем не уверен.

Вы можете попробовать использовать Visual Web Developer. Я никогда не использовал его и только что достиг предела своих советов.

Этот человек является проверенным специалистом

OP Бобби Арчер

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


< /p>

Timb0slice

Этот человек является проверенным специалистом

Timb0slice

Бобби Арчер написал:

Вот в чем проблема. Я вижу это сейчас, просто нет доступа, чтобы изменить это. Итак, я должен скопировать и вставить его в новый проект внутри Visual Web Developer? Я бы проверил выпуск сообщества Visual Studio. Это позволяет вам делать больше, чем просто веб-проекты.

Timb0slice

Этот человек является проверенным специалистом

Timb0slice

Бобби Арчер написал:

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

Если бы это был скрипт, это было бы так, но с скомпилированным кодом вы должны сначала декомпилировать его (если это позволяет вам), а затем перекомпилировать его в новую .dll или .exe или что-то еще. В этом случае вам нужно будет создать новый проект после копирования кода из JustDecompile. Я думаю, что в VS это так же просто, как «Меню сборки»> «Создать решение», когда у вас есть проект и код.

Этот человек является проверенным специалистом

OP Бобби Арчер

Бобби Арчер написал:

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

Если бы это был скрипт, это было бы так, но с скомпилированным кодом вы должны сначала декомпилировать его (если это позволяет вам), а затем перекомпилировать его в новую .dll или .exe или что-то еще. В этом случае вам нужно будет создать новый проект после копирования кода из JustDecompile. Я думаю, что в VS это так же просто, как «Меню сборки»> «Создать решение», когда у вас есть проект и код. Спасибо. Надеюсь, если я просто пойду по этому пути, я не буду чувствовать себя таким подавленным :)

Этот человек является проверенным специалистом

OP Бобби Арчер

Итак, я смог декомпилировать и внести необходимые изменения. Кнопка сборки не активна. Итак, теперь я разобрался, как перекомпилировать без ошибок. лол

О, радость кода!

Timb0slice

Этот человек является проверенным специалистом

Timb0slice

Удалось ли вам протестировать код с помощью кнопки запуска или клавиши F5? Все в стадии сборки отключено?

Ваша dll находится в папке проекта после тестирования?
C:\Users\\Documents\Visual Studio 2015\Projects\

Этот человек является проверенным специалистом

OP Бобби Арчер

Кнопки сборки не активны.

У меня две ошибки.


< /p>

Этот человек является проверенным специалистом

OP Бобби Арчер

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

Этот человек является проверенным специалистом

OP Бобби Арчер

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

Скрестите пальцы! :)

Этот человек является проверенным специалистом

OP Бобби Арчер

Ага. Сейчас все взвинчено. :\

По крайней мере, я научился декомпилировать.

Эта тема заблокирована администратором и больше не открыта для комментариев.

Чтобы продолжить это обсуждение, задайте новый вопрос.

Эргономичное оборудование

Кто в США должен нести ответственность за предоставление эргономичного оборудования по запросу сотрудника? Это ИТ, поскольку ИТ предоставляет клавиатуры и мыши? Должен ли это быть HR, поскольку он эргономичен и несет потенциальную ответственность, если НЕ предоставляется? Должен ли это быть тот отдел.

Приветствие Xfinity (личный домашний Интернет)

Во-первых, мне больно. Я мог бы произнести речь «Он ставит передо мной задачу», как Хан в «Звездном пути 2: Гнев Хана». Просто замените «Они» на «Он». Но они сделали то, чего я хотел годами (десятилетиями?), так что, думаю, это должно быть признано. Ю.

Щелкни! SATCOM Threat, IE End of Life, Mac с кирпичами, Planet 9, Lego Delorean

Ваша ежедневная доза технических новостей. Вы должны это услышать. ФБР и CISA предупреждают об угрозах для сетей спутниковой связи Согласно новому предупреждению ФБР и CISA спутниковые сети находятся в зоне высокого риска. Согласно ZDNet.

Какими сверхспособностями вы хотели бы обладать?

Что может сделать ИТ-специалист со сверхспособностями? В каких ИТ-задачах вы бы их использовали и как?

Можно ли подключить интерфейс управления коммутатора к одному из его собственных портов коммутатора?

Недавно я понял, что у меня есть конфигурация коммутатора с непреднамеренным потенциальным побочным эффектом. У меня есть Aruba 6300F с несколькими виртуальными локальными сетями. Он работает в режиме уровня 3. Это работает следующим образом: я просто «включаю» функции маршрутизатора, а затем.

В джунгли декомпиляторов .NET

Теперь давайте перечислим инструменты.

  • Исходный код открыт на github.
  • Он был запущен в 2011 году и в настоящее время полностью разработан.
  • В нем есть все функции, которые могут вам понадобиться при декомпиляции одной или нескольких сборок: поиск символа, открытие предварительно сохраненного списка сборок, навигация по гиперссылкам между символами, проводник метаданных сборки...
  • Консольная версия ilspycmd может автоматизировать декомпиляцию.
  • Он может создать PDB из сборки. Файл PDB, часто называемый файлом символов, представляет собой мост между IL-кодом сборки и исходным кодом соответствующего проекта. PDB в основном используется отладчиками для определения позиции в исходном коде, соответствующей выполняемой в данный момент инструкции IL. Это означает, что с генерацией ILSpy PDB можно отлаживать декомпилированный исходный код, как описано в этом ответе stackoverflow.
  • Благодаря AvaloniaILSpy он без проблем работает на Mac и Linux. Это не относится к другим декомпиляторам, перечисленным ниже.
  • Он интегрируется в Visual Studio и в VSCode (хотя, судя по комментариям, версия кода VS имеет проблемы).

ILSpy-Dotnet-Decompiler

  • Декомпиляция всей сборки
  • Декомпиляция двух версий сборки и сравнение результатов
  • Создайте график зависимостей непосредственно из контекстного меню элемента ILSpy.

dotPeek — это бесплатный декомпилятор от Jetbrains. Он работает как автономный, а также естественным образом интегрируется в Resharper и, следовательно, в Visual Studio. Он имеет функции ILSpy, перечисленные выше, а также:

dotPeek-Dotnet-Decompiler

dnSpy-Dotnet-Decompiler

Как будто этого было недостаточно, dnSpy также является редактором сборки. Таким образом, dnSpy заменяет инструмент Reflexil, разработанный моим другом Себастьяном Лебретоном для редактирования IL.

dnSpy-assembly-edition

JustDecompile-Dotnet-Decompiler

IldAsm для ностальгии [бесплатный IL]

ildasm-Dotnet-Decompiler

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

.NET-Reflector-Dotnet -Декомпилятор

NЗависит от декомпиляции

ndepend-dotnet-decompiler

Начиная с версии 2022.1.0 NDepend предлагает подключаемый модуль ILSpy. Таким образом, инструменты взаимодействуют в обоих направлениях:

От NDepend до ILSpy. Просто щелкните правой кнопкой мыши любую сборку, пространство имен, класс, метод или поле в NDepend или Visual Studio (с установленным расширением NDepend). Есть 3 новых меню для:

ILSpy-Decompile- И-Сравнить

Давайте уточним, что для сравнения двух наборов сборок — старых и новых битов — для использования меню Декомпилировать и сравнить просто щелкните ссылку Сравнить 2 версии базового кода в NDepend. Стартовая страница. Диалоговое окно позволит вам указать оба набора сборок для сравнения.

Compare- 2-Версии-Кодовой базы

ILSpy-NDepend-Decompile- ProgressBar

От ILSpy к NDepend можно:

  • Показать любой элемент кода на графике или матрице зависимостей NDepend
  • Анализ с помощью NDepend одной или нескольких выбранных сборок

ILSpy-to-NDepend

Заключение

Но, подождите…

Разрешена ли декомпиляция?

Короткий ответ: да, если это явно не запрещено.Например, в лицензионном соглашении dotPeek говорится следующее: «Прежде чем использовать dotpeek для целей декомпиляции, вы должны убедиться, что декомпиляция двоичного кода не запрещена применимым лицензионным соглашением (за исключением случаев, когда вам может быть прямо разрешено закона) или что вы получили разрешение на декомпиляцию двоичного кода от владельца авторских прав».

Этот ответ stackoverflow предлагает более либеральный дискурс:

«Декомпиляция абсолютно ЗАКОННА, независимо от того, что говорят зазывалы. В лучшем случае вы можете быть привлечены к ответственности за несанкционированную деятельность, связанную с программным обеспечением, если только вы не распространяете его. Суды в США всегда защищали право пользователей точно знать, какой код устанавливается в их системах законно полученными программами.

Люди ДЕЙСТВИТЕЛЬНО должны перестать говорить «НЕЗАКОННО», если они не знают, что они говоришь о. В США абсолютно НЕТ закона, который гласит, что вы не можете копировать в личных целях или декомпилировать программное обеспечение. Компании пытались подать в суд, чтобы остановить это, но; а) это только гражданское, а не уголовное и, следовательно, НЕЗАКОННОЕ; и б) они выиграли только тогда, когда контент был передан сторонней стороне, от которой компании не получали оплаты. Т.е. было доказано, что человек нарушает закон».

Тем не менее, в комментарии к тому же вопросу говорится: «Это, однако, незаконно, если вы его расшифруете, возьмете весь исходный код, может быть, измените графику, упаковку и некоторые другие вещи и попытаетесь выдать это за ваше собственное приложение. Это незаконное распространение произведения, защищенного авторским правом».

Патрик Смаккиа

Мой отец был одним из первых программистов в 70-х, и мне посчастливилось переключиться с игр с Lego на программирование собственных микроигр, когда я был еще ребенком. С тех пор я не перестаю программировать.

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

Сегодня, имея более 12 000 компаний-клиентов, в том числе многие из компаний из списка Fortune 500, NDepend предлагает более глубокое понимание и полный контроль над своим приложением широкому кругу профессиональных пользователей по всему миру.

Я живу со своей женой и нашими детьми-близнецами Леной и Полом на прекрасном острове Маврикий в Индийском океане.

Читайте также: