Я пытаюсь сделать обфускатор - PullRequest
1 голос
/ 09 сентября 2009

Это вопрос из двух частей. Но это относится к одному и тому же.

Я хочу работать с IL-кодом приложения для применения исправлений. Мне интересно, что было бы правильным подходом. Очевидно, что я мог декомпилировать его, читать и редактировать файл кода il, а затем перекомпилировать. но есть ли способ прочитать его как код MSIL прямо в файле. и, возможно, отредактируйте его в реальном времени.

Я пытался редактировать декомпилированный код исполняемого файла. но каждый раз, когда я перекомпилировал его, у меня возникала проблема с выполнением. Как будто он больше не может найти свою точку входа. Как рассчитать это? Полагаю, мне нужно знать длину команд и их параметров, или сделать точку входа меткой или чем-то еще. Я был бы неплох, если бы существовал шаблон Visual Studio для чего-то подобного.

Ответы [ 2 ]

6 голосов
/ 09 сентября 2009

Как человек, который уже несколько раз прочитал спецификацию ECMA-335 и , реализовал загрузчик изображений CLI на двух разных языках (с полным анализом IL на одном), я бы сказать, что это все еще будет сложной задачей для меня. Я говорю это, потому что кажется, что и 1) вы этого не сделали, и 2) вы ищете простой ответ. Спецификация определенно должна быть вашей отправной точкой.

Процедура минимальная будет:

  • Загрузить изображение PE (exe или dll)
  • Разобрать байт-код всех методов и разрешить символы
  • Применение преобразований кода (минимальным, конечно, будет одно преобразование, такое как переименование частных методов)
  • Сохранить результат как новый образ PE

Редактировать: Это не избавит вас от необходимости изучать подробную структуру сборок .NET, но может сэкономить вам некоторое время в реальной реализации и поможет сохранить вашу логику обфускатора чисто отделенной от загрузчика.

1 голос
/ 09 сентября 2009

Чтобы прочитать MSIL, в есть такая ветка :

ildasm.exe - дизассемблер промежуточного языка. С помощью этого инструмента вы можете просмотреть свой скомпилированный код на уровне MSIL.

Это можно найти в Microsoft SDK.

...