2009-09-09 2 views
1

Это вопрос двух частей. Но это относится и к одному и тому же.Я пытаюсь сделать обфускатор

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

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

ответ

6

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

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

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

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

+0

Моно Сесил позаботится о некоторых из этих шагов тривиально? –

1

Чтобы прочитать MSIL, там уверенный в this thread:

ildasm.exe - Intermediate Language Disassembler. Этот инструмент можно просмотреть скомпилированный код на уровне MSIL.

Это находится в Microsoft SDK.

Смежные вопросы