我有一个离子v1 /科尔多瓦移动应用程序,我需要混淆所有来源。对于Javascript的混淆,我使用了https://github.com/javascript-obfuscator/javascript-obfuscator,对于Java For Android,我使用了https://github.com/greybax/cordova-plugin-proguard。因为我找不到任何用于混淆Objective C的cordova插件,所以我决定使用https://github.com/preemptive/PPiOS-Rename。
然而,在使用PPiOS-Rename进行混淆之后,cordova插件的混淆似乎出现了问题,我无法正确运行应用程序。如果我从模糊处理过程中删除插件,应用程序将会工作,但我需要使插件的代码也模糊。
有谁有混淆Cordova应用程序的Objective C代码的经验吗?
谢谢!
发布于 2019-01-04 20:56:45
问题是,Cordova依赖于用Javascript编写的应用程序代码和底层本机代码之间的桥梁才能运行。通过混淆所有的Objective C代码,Javascript层不知道这一点,并且不能再找到它正在寻找的本机类名。
例如,假设您在应用程序中包含了cordova-plugin-device。
它对<feature> definition for iOS定义将Device功能名称映射到 CDVDevice类。
假设您的 Cordova 应用程序调用插件方法 device.getInfo()。这反过来调用了对 invokes a call to cordova.exec(),该调用使用getDeviceInfo 操作调用Device功能。
在后台,Cordova 查找 Device 以查找它映射到的本机类名称 (CDVDevice),然后在 iOS 平台上它尝试调用此类的getDeviceInfo()成员函数。
但是,通过运行 PPiOS-Rename 工具,您已经混淆了类名 (CDVDevice) 和函数名 (getDeviceInfo()),因此 Cordova 找不到要调用的类或函数,因此会抛出错误。
在这种情况下,您需要使用 filter option provided by PPiOS-Rename,排除 CDVDevice,例如:
ppios-rename --analyze -F 'CDVDevice' /path/to/program.app/program如果您希望对Cordova应用程序的Objective C层进行模糊处理,则必须为Cordova从Javascript层显式调用的所有类和函数名称添加排除项。这包括项目中的任何Cordova插件接口类,以及可能属于Cordova框架本身的类(作为cordova-plugin-proguard does for ProGuard on Android。
https://stackoverflow.com/questions/54037629
复制相似问题