Ответ 1
Прежде всего вам нужно помнить, что iOS не позволяет компилировать JIT (как раз вовремя). Это означает, что все должно пройти через компилятор AOT (раньше).
Это приводит к тому, что все IL-коды из ваших сборок преобразуются в инструкции с инструкциями и в соответствии с инструкциями на основе ARM (v6, v7 и/или thumb), что IL не требуется больше.
Это означает, что, когда вы создаете для Release|iPhone
, код IL будет удален из ваших сборок. Так как он удаляется, он не будет присутствовать (быть декомпилированным) в опубликованном вами приложении.
ПРИМЕЧАНИЯ
-
сборки все равно будут находиться внутри приложения , потому что метаданные по-прежнему необходимы (например,
System.Reflection
нуждается в нем). Таким образом, имена символов и файлы ресурсов не будут искажены/зашифрованы, как обычно, обфускаторы; -
Вы можете разобрать сборку ARM (это было бы правдой, даже если вы обфускали сборку перед компиляцией AOT), но она намного сложнее понять (и вернуться на С#), чем IL.
-
Извлечение сборок из IPA и их обработка сломают как минимум подпись приложения (вы можете переписать ее). Он также будет вероятным сломать много других вещей (так как код будет ссылаться на имена/структуры, которые могут быть изменены). Я не думаю, что это сработает (но это зависит от параметров, которые вы использовали бы от вашего обфускатора).