![]() |
eXeL@B —› Вопросы новичков —› Реверс-инжиниринг LINQ-выражения |
Посл.ответ | Сообщение |
|
Создано: 02 января 2012 16:54 · Поправил: Soloton_ · Личное сообщение · #1 Есть продукт (написан на .NET), который на днях был закрыт автором. Исходники автор вряд-ли даст, потому было решено разобрать по косточкам. DNiD показал, что исполняемый файл защищен DotNet Reactor v4.X, часть dll -- SmartAssembly v 5.X. Со снятием защиты успешно справилась de4dot. Великолепная программа! После снятия защиты исходные коды были получены при помощи .NET Reflector и, там где он не справился помогла ILSpy. Смотрю на один из классов (Имя Class1 было присвоено de4dot после деобфускации). Вот что выдал ILSpy: Code:
Пример использования Class1: Code:
Гугление даёт намёк на то, что так компилятор преобразует LINQ. Но я не настолько силён в .NET, чтобы разобраться, потому прошу помощи здесь. ![]() |
|
Создано: 02 января 2012 20:49 · Личное сообщение · #2 |
|
Создано: 02 января 2012 21:16 · Личное сообщение · #3 sendersu Нужен код, который потом можно будет скомпилировать. Уж не Вы ли автор? ![]() Проблема в том, что сконструированный компилятором класс не пропускает VS2010. А мне подобные выверты (см. выше) тоже не понять. И вообще там таких классов ещё штуки 3. Прошу помочь перевести в корректный C# или направить на мысль. ![]() |
|
Создано: 02 января 2012 21:30 · Личное сообщение · #4 |
|
Создано: 02 января 2012 21:52 · Поправил: Soloton_ · Личное сообщение · #5 Везде .NET 4.0 Компилятору не нравится строка 9 в первом листинге: Code:
Ругается так: Недопустимая лексема "<<" в объявлении класса, структуры или интерфейса C:\Users\...\Documents\Reflector\Disassembler\WowManager\ns1\Class1.cs Ну и дальше куча ошибок, которые тянет за собой эта. ![]() |
|
Создано: 03 января 2012 02:20 · Личное сообщение · #6 |
|
Создано: 03 января 2012 10:36 · Личное сообщение · #7 |
|
Создано: 03 января 2012 11:04 · Личное сообщение · #8 |
|
Создано: 03 января 2012 23:27 · Личное сообщение · #9 Строку поменял. Стало так Code:
Теперь такая ошибка. Недопустимая лексема "<" в объявлении класса, структуры или интерфейса C:\Users\...\Documents\Reflector\Disassembler\WowManager\ns1\Class1.cs Про грабли. Склоняюсь к мысли, что причиной проблемы, с которой столкнулся, является именно обфускация и после -- деобфускация, когда имя класса поменялось на Class1. А до обфускации имя было такое, что декомпилятор парсил IL корректно определяя анонимные классы и/или треклятый TransparentIdentifier. ![]() |
|
Создано: 04 января 2012 14:12 · Поправил: sendersu · Личное сообщение · #10 Soloton_ взял код по вашей линке var anonymousType = new { Name = "chibacity", Age = 21 }; сделал екзе, глянул на ето через рефлектор (7.5) -а у вас какой рефлектор кстати? вот что он показал - var anonymousType = new { Name = "chibacity", Age = 0x15 }; тоесть 1 в 1 без всех етих дженериков как по линке вопрос - а как смотрится ваш код до деобфускации? если правильно -значит виноват именно деобфускатор, если нет - декомпилятор P.S. похоже в рефлекторе еще есть пару блох при работе с дженериками. может закинете свое файло? а то както неудобно в воздухе руками махать P.S. в идеале етого класса сгенеренного компилеров вообще не надо, надо лишь понять что было изначально. ![]() |
|
Создано: 04 января 2012 15:28 · Личное сообщение · #11 Еще можно поиграться с языками, для которых код строится. Например для Delphi рефлектор генерит полный бред, для VB генерит нормальный код, но местами тоже бред, это даже хуже, не сразу видно ошибки, в C# я не шарю, но по аналогии возможно, что тоже есть косяки. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 04 января 2012 17:49 · Личное сообщение · #12 sendersu Последняя ссылка -- просто пример. Причем прошлогодний. Повторю, что этот пример сейчас Reflector (как 7.3, так и 7.5) декомпилирует в корректный код, т.е. 1:1. Файло по ссылке из первого поста, не деобфусцированное, т.е. как есть. Первый листинг из WowManager.dll. На всякий случай приведу всё-же недеобфусцированый код этого класса: Code:
> P.S. в идеале етого класса сгенеренного компилеров вообще не надо, надо лишь понять что было изначально. Да. Вот и не получается понять. PE_Kill Пробую всем, что есть в арсенале Reflector, не помогает, ибо приблизительно всё то же самое. ![]() |
|
Создано: 05 января 2012 00:37 · Личное сообщение · #13 |
|
Создано: 05 января 2012 00:47 · Личное сообщение · #14 |
|
Создано: 06 января 2012 17:17 · Личное сообщение · #15 Soloton_ внутри WowManager.dll обнаружено SmartAssembly 5.5 после деобфускации того класса в САЕ оказалось следующее: [CompilerGenerated] internal sealed class c0000ed<T0, T1> { // Fields [NonSerialized] internal static delegate02 f000020; private readonly T0 f000179; private readonly T1 f00017a; ........ все норм. компилируется (етот отдельный класс) вывод напрашивается такой - дедот и сае деобфуцируют дженерики по разному ![]() |
|
Создано: 06 января 2012 22:01 · Личное сообщение · #16 |
![]() |
eXeL@B —› Вопросы новичков —› Реверс-инжиниринг LINQ-выражения |
Эта тема закрыта. Ответы больше не принимаются. |