Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何防止外部应用程序(如iExplorer)修改我的设置(文件、NSUserDefault)_Ios_Objective C_Nsuserdefaults - Fatal编程技术网

Ios 如何防止外部应用程序(如iExplorer)修改我的设置(文件、NSUserDefault)

Ios 如何防止外部应用程序(如iExplorer)修改我的设置(文件、NSUserDefault),ios,objective-c,nsuserdefaults,Ios,Objective C,Nsuserdefaults,我想在应用程序首次发布时做一些操作。我已经按照此处的建议编写了代码:。它运行良好 我可以使用iExplorer删除和修改UserDefault plist中的内容。因此我的应用程序无法按预期运行。有没有办法限制外部appsiExplorer修改应用程序文件?如果使用iExplorer修改系统文件,可能会使任何应用程序无法正常运行。使其具有某种防篡改性的一种方法是管理服务器上的信息,而不是本地文件,尽管效率不高。例如,您的应用程序可能会调用web服务来检索和存储设置。这并不是说他们不能篡改您的应用

我想在应用程序首次发布时做一些操作。我已经按照此处的建议编写了代码:。它运行良好


我可以使用iExplorer删除和修改UserDefault plist中的内容。因此我的应用程序无法按预期运行。有没有办法限制外部appsiExplorer修改应用程序文件?

如果使用iExplorer修改系统文件,可能会使任何应用程序无法正常运行。使其具有某种防篡改性的一种方法是管理服务器上的信息,而不是本地文件,尽管效率不高。例如,您的应用程序可能会调用web服务来检索和存储设置。这并不是说他们不能篡改您的应用程序包,使其变得无用

简而言之,你不能让你的应用程序完全防篡改

编辑


正如扎夫所建议的,你可以使用钥匙链。只需将[[NSBundle mainBundle]bundlePath]作为密钥存储在密钥链中即可。bundlePath对于每个安装都是唯一的。因此,当您的应用程序加载时,请检查钥匙链中的bundlePath,如果不存在,则为新安装/首次加载。加载应用程序后,将bundlePath保存到钥匙链。

如果使用iExplorer更改系统文件,可能会使任何应用程序无法正常运行。使其具有某种防篡改性的一种方法是管理服务器上的信息,而不是本地文件,尽管效率不高。例如,您的应用程序可能会调用web服务来检索和存储设置。这并不是说他们不能篡改您的应用程序包,使其变得无用

简而言之,你不能让你的应用程序完全防篡改

编辑


正如扎夫所建议的,你可以使用钥匙链。只需将[[NSBundle mainBundle]bundlePath]作为密钥存储在密钥链中即可。bundlePath对于每个安装都是唯一的。因此,当您的应用程序加载时,请检查钥匙链中的bundlePath,如果不存在,则为新安装/首次加载。加载应用程序后,将bundlePath保存到密钥链。

创建要保护的项目值的散列,加密该散列并将其保存在NSUserDefaults中。读取NSUserDefaults并解密散列后,重新计算字段的散列并检查散列是否匹配


如果是少量数据(例如单个值),请将其保存在密钥链中。

创建要保护的项的值的散列,加密该散列并将其保存在NSUserDefaults中。读取NSUserDefaults并解密散列后,重新计算字段的散列并检查散列是否匹配


如果是少量数据,比如单个值,请将其保存在密钥链中。

如果哈希不匹配,应用程序将无法正常工作-回到我们开始的地方。加密可能是个好主意,但仍然可以修改,使应用程序无法正常工作。我也尝试过。如果我从plist中删除该字段,则其行为类似于全新安装。如果是少量数据,例如单个值,则将其保存在keychain中。keychain引用:即使卸载应用程序,keychain也会保留该值。如果我删除并重新安装应用程序,则无法检查全新安装。如果哈希不匹配,应用程序无法正常工作-回到我们开始的地方。加密可能是个好主意,但仍然可以修改,使应用程序无法正常工作。我也尝试过。如果我从plist中删除该字段,则其行为类似于全新安装。如果是少量数据,例如单个值,则将其保存在keychain中。keychain参考:即使卸载应用程序,keychain也会保留该值。如果我删除并重新安装应用程序,则无法检查全新安装。