Разница между чтением IL и обычного асма в том, что в IL намного меньше кода, и отлично сразу видны все абстракции — классы, структуры, названия полей и пр; даже если не прибегать к декомпиляции.
Например, я видал вариант защиты, в котором байты настоящей сборки зашифрованы, и в IL-коде на диске видно только сложный алгоритм расшифровки, вроде с какой-то примитивной виртуальной машиной даже.
Но, если загрузить сборку и чуток подождать в рантайме, то видно, как она всё расшифровывает и эмитит динамическую сборку с реальным кодом. Которую, разумеется, можно задампить как два байта переслать.
Например, я видал вариант защиты, в котором байты настоящей сборки зашифрованы, и в IL-коде на диске видно только сложный алгоритм расшифровки, вроде с какой-то примитивной виртуальной машиной даже.
Но, если загрузить сборку и чуток подождать в рантайме, то видно, как она всё расшифровывает и эмитит динамическую сборку с реальным кодом. Которую, разумеется, можно задампить как два байта переслать.
Подождать полной расшифровки и снять дамп исполняемого кода — это вообще одна из древних методик реверсинга; я не ожидал, что она в современном мире может сработать :)
Подождать полной расшифровки и снять дамп исполняемого кода — это вообще одна из древних методик реверсинга; я не ожидал, что она в современном мире может сработать :)