2016-05-17 22 views
2

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

using #j;//this line shows up as an error in VS2013 
using System; 

Ошибка:

препроцессора директивы должны быть первым непробельный символ на линии

я получаю подобную ошибку на следующую строку также.

string path = #db.#ab(HttpUtility.UrlDecode(text)); 

Вопрос: В чем смысл использования # и как я могу исправить эти ошибки?

Я также заметил, что некоторые декомпилированные классы имеют имена, начинающиеся с #, а также некоторые пространства имен и имена методов. Я никогда не использовал такое соглашение об именах, поэтому очень сложно понять, как «ILSpy» придумал такой код.

+1

Похоже, что ссылочная dll запутана. – vendettamit

+0

Хорошо. Так вот как обфускационный код декомпилируется декомпиляторами. Что-то новое для меня. Благодарю. – Sunil

ответ

8

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

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

Может ли преобразовать это в действительный C#? Конечно - просто возьмите каждый # -prefixed идентификатор и сопоставьте его (последовательно) с чем-то другим, например.

using hashj; 
... 

string path = hashdb.hashab(HttpUtility.UrlDecode(text)); 

... и в конце концов вы будете натыкаться класса под названием #db который вы потом переименовывать в hashdb и т.д. Но точки запутывания сделать это болезненный процесс.

+0

Хорошо. Я понял. Спасибо за отличный ответ. – Sunil