Как запутать Objective C код гибридного приложения Cordova? - PullRequest
0 голосов
/ 04 января 2019

У меня есть мобильное приложение Ionic v1 / Cordova, и мне нужно скрыть все источники. Для запутывания Javascript я использовал https://github.com/javascript-obfuscator/javascript-obfuscator, а для Java для Android я использовал https://github.com/greybax/cordova-plugin-proguard. Поскольку я не смог найти какой-либо плагин Cordova для запутывания Objective C, и я решил использовать https://github.com/preemptive/PPiOS-Rename.

Однако после запутывания с помощью PPiOS-Rename, похоже, возникла проблема с запутыванием плагинов Cordova, и я не могу правильно запустить приложение. Если я удалю плагины из процесса запутывания, приложение будет работать, но мне нужно сделать запутанный также код плагинов.

У кого-нибудь есть опыт с запутыванием кода Objective C приложения Cordova?

Спасибо!

1 Ответ

0 голосов
/ 04 января 2019

Проблема, с которой вы столкнулись, заключается в том, что для работы Cordova использует мост между кодом вашего приложения, написанным на Javascript, и базовым собственным кодом. Запутывая весь код Objective C, слой Javascript не знает об этом и больше не может найти имена искомых классов, которые он ищет.

Например, предположим, что вы включили cordova-plugin-device в ваше приложение.

Его определение <feature> для iOS отображает имя функции Device в класс CDVDevice.

Предположим, что ваше приложение Cordova вызывает метод плагина device.getInfo(). Это, в свою очередь, вызывает вызов cordova.exec(), который вызывает функцию Device с действием getDeviceInfo.

Под капотом Cordova ищет Device, чтобы найти собственное имя класса, которому он сопоставлен (CDVDevice), а затем на платформе iOS пытается вызвать функцию-член getDeviceInfo() на этот класс.

Однако, запустив инструмент PPiOS-Rename, вы запутали как имя класса (CDVDevice), так и имя функции (getDeviceInfo()), поэтому Cordova не может найти класс или функцию для вызова, поэтому выдается ошибка .

В этом случае вам нужно будет исключить CDVDevice, используя параметр фильтра , предоставляемый PPiOS-Rename , например:

ppios-rename --analyze -F 'CDVDevice' /path/to/program.app/program

Если вы хотите продолжить запутывание слоя Objective C в вашем приложении Cordova, вам придется добавить исключения для всех имен классов и функций, которые Cordova явно вызывает из уровня Javascript. Сюда входят все классы интерфейса подключаемого модуля Cordova в вашем проекте и, возможно, классы, принадлежащие самой платформе Cordova (как cordova-plugin-proguard для ProGuard на Android .

...