Давненько я не занимался реверсингом, нужен совет специалиста по новой (для меня) технологии .NET Framework 4.0-4.5. Расшифровал тут одну понравившуюся мне прогу с dll-ками, Reflector-ом сохранил исходники, всё видно, С#. Загружаю их в Visual Studio 2013 и при запуске тестов получаю кучу ошибок - 1736 штук. Типа: Code: Ошибка 14 Пространство имен не может непосредственно содержать такие члены, как поля или методы D:\Test\dummy\{ffe53d4c-2a9e-4d38-a994-adaf92889f28}.cs 6 5 Ошибка 10 Недопустимая лексема "-" в объявлении класса, структуры или интерфейса D:\Test\dummy\{ffe53d4c-2a9e-4d38-a994-adaf92889f28}.cs 5 29 Ошибка 2 Недопустимая лексема "02077513" в объявлении класса, структуры или интерфейса D:\Test\dummy\{02077513-8bce-4a86-b2b9-3605e2025eae}.cs 5 21 Code: namespace dummy { using System; internal class {02077513-8bce-4a86-b2b9-3605e2025eae} { } } Code: namespace dummy_ptr { using System; internal abstract class {7f27317a-bf0d-41a5-a124-2fd56e9737b9} { public static byte f000001; public static byte f000002; } } Это нормально? Ведь, в принципе, через ILDASM всё, что было нужно, подправилось и собралось ILASM-ом в рабочий файл. Или я сильно губу раскатал, намереваясь всё переписАть по-своему? Что посоветуете?
А вот за эту умную мысль - спасибо! Поищу. А то уже 6 часов правлю 6 строк кода в IL... Начал уставать...
Это не код сложный, это я тупой! Говорю же, что первый раз в MSIL-е колупаюсь. Понимаю, что править в MSIL-е - лучший вариант, но пока он мне недоступен. Повторю вопрос: это нормально, когда исходник, сохранённый из Reflector-а не компилится в VS? Реально как-то поправить?
Разбираюсь с MSIL. Код подправил, осталась одна, последняя проблема - как распределить адресацию? P.S. Отвечу сам: полной заменой кода метода, кодом этого же метода, полученного после компиляции. Это проще, чем вручную 500 строк с опкодами адреса пересчитывать-выравнивать. Комп железный - пусть сам работает.
Result := true; Всё получилось, всем спасибо! Если интересно: теперь проект открывается в VS 2013, все ошибки компиляции устранены. Собирается рабочий(!) exe-шник. Остались только косяки с ресурсами - иконки там, картинки... это я потом поправлю. Зато в самой проге нашел пару багов от разработчиков, надо самому теперь исправлять. Может кому пригодится алгоритм распаковки (для .NET Confuser v1.9): NoFuser v1.1 de4dot v.3.1.41592 (UniversalFixer v1.0.4257.32113 - мне не понадобился) ILSpy v2.2.0.1706 - в режиме C# - Save Code исходники получены! Дальше можно поизвращаться интереснее (для гурманов): IL DASM v4.0.30319.33440 - экспорт exe-шника, полученного после 3-го пункта, в .IL (в Израиль ) - или через ILSpy - в режиме IL - Save Code (этот файл нам пригодится в дальнейшем как file1.il ) правка ошибок компиляции в Visual Studio. Правка чего угодно в коде. компиляция в exe IL DASM v4.0.30319.33440 - экспорт в .IL -> file2.il открываем Akelpad-ом (что было под руками) или ILSpy в режиме IL, оба файла. Копируем полностью (от начала - до конца!) методы, в которых мы что-то меняли в коде(file2.il), вставляем их на СВОЁ место в file1.il, полученный в пункте 6, затем сохраняем этот file1.il ILASM.exe /RESOURCE=file1.res file1.il /OPTIMIZE В итоге файл file.exe стал меньше, оптимизирован (убраны nop-ы куда попало понатыканные(!) для выравнивания M$ VS - must die!), и даже все ресурсы как и были, расставлены по местам! Ляпота! P.S. Все операции c IL-файлами производим в отдельном от C#-файлов каталоге (папке), чтобы не было наложений и непоняток. Моск включать обязательно! Что любопытно, новый .NET Reflector v8.3.3.115 с исходниками (в том числе в IL) косячит больше, чем ILSpy. Вот так-то...