我想在App第一次启动时做一些操作。我已经按照此处的建议编写了代码:如何检测首次应用启动,iphone。它运作良好。
我可以使用 iExplorer 删除和修改 UserDefault plist 中的内容。所以我的应用程序没有按预期运行。有没有办法限制外部应用程序(iExplorer)修改的应用程序文件?
我想在App第一次启动时做一些操作。我已经按照此处的建议编写了代码:如何检测首次应用启动,iphone。它运作良好。
我可以使用 iExplorer 删除和修改 UserDefault plist 中的内容。所以我的应用程序没有按预期运行。有没有办法限制外部应用程序(iExplorer)修改的应用程序文件?
如果您使用 iExplorer 更改系统文件,您可能会使任何应用程序无法正常运行。使其具有一定程度的防篡改功能(尽管效率不高)的一种方法是在服务器上而不是本地文件上管理信息。例如,您的应用可能会调用 Web 服务来检索和存储设置。这并不是说他们不能篡改您的应用程序包,使其无用。
简而言之,你不能让你的应用完全防篡改
编辑
正如 Zaph 所建议的,您可以使用钥匙串。只需将其[[NSBundle mainBundle] bundlePath]
作为钥匙存储在钥匙串中。 bundlePath
每个安装都是唯一的。因此,当您的应用程序加载时,请检查bundlePath
钥匙串,如果不存在,则它是全新安装/首次加载。应用程序加载后,将 保存bundlePath
到钥匙串。
创建要保护的项目的值的哈希,加密该哈希并将其保存在NSUserDefaults
. 当NSUserDefaults
读取解密散列时,重新计算字段的散列并检查散列是否匹配。
如果是少量数据,比如单个值,则将其保存在钥匙串中。