Сейчас на форуме: asfa, Rio (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Реверс-инжиниринг приложения .NET (C#)
Посл.ответ Сообщение

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 января 2014 13:05 · Поправил: bairog
· Личное сообщение · #1

Добрый день.
Имеется приложение .NET (C#)


.NET Id показывает, 100% - обфускация Smart Assembly.

Прогоняю через de4dot

Как видите, он ругается, что не поддерживает деобфускацию XAML - но это не беда (разметка врядли обфускируется, да и не в этом проблема..)

Далее попытался с помощью .NET Reflector или dotPeek получить исходный код.
Внутри проекта комментариев от декомпилятора про обфускацию нет, классы тоже называются "правильно" (Class1/ns0/method1/etc).
Однако при этом несколько сотен ошибок компиляции, множество синтаксических (типа "; expected", нет using неймспейса, хотя объекты из него используются и т.п.).

Гуру, подскажите - в вышеописанном что я делаю не так? Я что-то упустил?

Заранее спасибо.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 29 января 2014 13:38
· Личное сообщение · #2

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

-----
старый пень




Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 января 2014 14:17
· Личное сообщение · #3

Меня во всем этом смущает только характер и количество этих ошибок.
Их число близко к тысячи для не шибко большого проекта
Очень много например unsafe кода в котором проблемы с типами внутри stackalloc (использование unsafe мне кажется странным для шарпа)
Боюсь, что следы защиты остались.

Я бы разместил запрос ветку про взлом, но тематика не та (но мне то надо получит исходники, а не сломать защиту)

Может быть кто сможет глянуть хотя бы до этапа получения "нормального" с его точки зрения кода (в том смысле, что ошибки компиляции с его точки зрения не из-за остатков защиты, а из-за несовершенства декомпиляторов)?

Заранее огромное спасибо.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 29 января 2014 15:01
· Личное сообщение · #4

bairog

А с чего вы взяли что это писали на C# вдруг прога была написанна на C++ Managed

-----
have a nice day




Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 января 2014 16:49 · Поправил: bairog
· Личное сообщение · #5

Хм, простите дилетанта.
Но .NET Reflector при выборе MC++ в комбобоксе языка и экспорте в проект выдает 43 ошибки.
При выборе C# экспорт прошел без ошибок.
dotPeek сразу без вопросов сделал экспорт в C#.

К тому же в проекте есть ссылки на библиотеки WPF, есть XAML файлы.

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

Как еще можно это узнать?



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 29 января 2014 18:23
· Личное сообщение · #6

bairog пишет:
Я что-то упустил?
- проблема Ваша общеизвестная, обратное получение исходного кода редко дает жизнеспособный вариант без последующего допиливания кода ручками. Но как совет: погладите, случайно там нигде в референсах не встречается библиотечки Visual basic`a ? И еще попробуйте ILSpy disassembler.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 29 января 2014 18:40
· Личное сообщение · #7

bairog

То что декомпиль идет в C# без ошибок, еще не значит что его писали на C# )). Декомпиль в C++ полюбому на порядок сложнее. В любом случае чистых исходников вы не получите. Когда я декомпилил в свое время 1к ошибок это норма, многие из них можно исправить автоматически написав макросы, или используя возможности студии по поиску и замене.

-----
have a nice day





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 января 2014 18:41 · Поправил: Isaev
· Личное сообщение · #8

bairog
Реверс-инжиниринг, как таковой, предусматривает исследование программ БЕЗ исходного кода.
Если нужно восстановить проект, то анализируется машинный код программы, составляется алгоритм её работы, по которому пишется подобный функционал...
Для этого вы получили исчерпывающую информацию на выходе того же .NET Reflector... Изучайте

Это вовсе не нажатие кнопки "Получить исходный код с оригинальными названиями функций и подробными комментариями от разработчика"!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2014 08:48 · Поправил: bairog
· Личное сообщение · #9

Извиняюсь за долгий ответ - новичку форум не давал часто писать сообщения

Medsft пишет:
ILSpy disassembler

Тоже пробовал - результат примерно тот же
Medsft пишет:
погладите, случайно там нигде в референсах не встречается библиотечки Visual basic`a ?

Не видно их
Nimnul пишет:
То что декомпиль идет в C# без ошибок, еще не значит что его писали на C# ))

Наверно, но как я уже сказал, там точно есть WPF - а MC++ и WPF насколько я понимаю, крайне редкая и неудобная в реализации связка.
Isaev пишет:
Это вовсе не нажатие кнопки "Получить исходный код с оригинальными названиями функций и подробными комментариями от разработчика"!

Ну такого я и не ожидал, мне бы вполне хватило бы кода вида Class1/ns0/method1/etc, но с минимумом ошибок. Из-за большого количества ошибок и задал вопрос, вдруг я чего не понимаю (т.к. новичок в этом деле)
Isaev пишет:
составляется алгоритм её работы, по которому пишется подобный функционал...

Ну процентов 10% полученного исходника в принципе читабельно, остальное попытаюсь осились. Всем спасибо за помощь.

P.S. Подскажите кстати, почему имеет место быть эта часть кода, которая декомпилится не в Class1/ns0/method1/etc, а во вполне нормальные исходные судя по всему имена, а остальная часть кода - слабочитаема и с ошибками?
Спасибо.

P.P.S. Ради интереса загнал свой недавний проект в протектор под названием .NET Reactor и потом по той же цепочке de4dot + .NET Reflector получил исходный код.
Действительно куча ошибок и слабочитабельно
Видимо я изначально от декомпиляторов .NET ожидал гораздо большего ..


 eXeL@B —› Вопросы новичков —› Реверс-инжиниринг приложения .NET (C#)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати