Вопрос
Это своего рода вопрос, состоящий из двух частей.Но оба они относятся к одному и тому же.
Я хочу работать с IL-кодом приложения для применения исправлений.Мне интересно, какой подход будет правильным.Очевидно, я мог бы декомпилировать его, прочитать и отредактировать файл кода il, а затем перекомпилировать.но есть ли способ прочитать его как код msil прямо в файле.и, возможно, редактировать его в реальном времени.
Я пытался отредактировать декомпилированный код исполняемого файла.но каждый раз, когда я его перекомпилировал, у меня возникали проблемы с выполнением.Как будто он больше не мог найти точку входа.Как мне это рассчитать?Я предполагаю, что мне нужно знать длину команд и их параметры или сделать точку входа меткой или чем-то еще.Было бы неплохо, если бы для чего-то подобного существовал шаблон Visual Studio.
Решение
Как человек, уже прочитавший ЭКМА-335 спецификация несколько раз и реализовал загрузчик изображений CLI на двух разных языках (с полным анализом IL на одном), я бы сказал, что это все равно будет для меня сложной задачей.Я говорю это, потому что кажется, что 1) вы этого не сделали и 2) вы ищете простой ответ.Спецификация определенно должна стать вашей отправной точкой.
А минимальный процедура будет:
- Загрузите PE-образ (exe или dll)
- Разобрать байт-код всех методов и разрешить символы.
- Применить преобразования кода (минимальным, конечно, будет одно преобразование, например переименование частных методов).
- Сохраните результат как новый PE-образ.
Редактировать:Это не избавит вас от необходимости изучать подробную структуру сборок .NET, но может сэкономить вам некоторое время при фактической реализации и помочь четко отделить логику обфускатора от загрузчика.
- Моно Сесил это библиотека, написанная Джей Би Эвейн генерировать и проверять программы и библиотеки в формате ECMA CIL.
- Общая инфраструктура компилятора
- Сесил и CCI сообщение в блоге Дж. Б. Эвейна
Другие советы
Чтобы прочитать MSIL, в это обязательно есть нить :
ildasm.exe - средний уровень Дизассемблер языка. С помощью этого инструмента вы можете просмотреть свой скомпилированный код на уровне MSIL.
Это находится в Microsoft SDK.