2

我有一个 Ionic v1 / Cordova 移动应用程序,我需要混淆所有来源。对于 Javascript 的混淆,我使用了https://github.com/javascript-obfuscator/javascript-obfuscator,对于 Android 的 Java,我使用了https://github.com/greybax/cordova-plugin-proguard。由于我找不到任何用于混淆目标 C 的 cordova 插件,因此我决定使用https://github.com/preemptive/PPiOS-Rename

但是,在使用 PPiOS-Rename 进行混淆后,cordova 插件的混淆似乎存在问题,我无法正确运行该应用程序。如果我从混淆过程中删除插件,该应用程序将起作用,但我还需要对插件代码进行混淆。

请问有人有混淆Cordova应用程序的Objective C代码的经验吗?

谢谢!

4

1 回答 1

0

您遇到的问题是 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

如果您希望继续混淆 Cordova 应用程序的 Objective C 层,则必须为 Cordova 从 Javascript 层显式调用的所有类和函数名称添加排除项。这包括项目中的任何 Cordova 插件接口类,以及可能属于 Cordova 框架本身的类(就像cordova-plugin-proguardAndroid 上的 ProGuard一样。

于 2019-01-04T12:56:45.260 回答