我有一个Config.h文件,其中包含基于环境的各种预处理器条件。该项目有2个目标。通过预处理程序参数,如果环境是第一个目标,则我们可以拥有BASE_URL = @“ https://firsttarget.com/ ”,而如果环境是第二个目标,则我们可以拥有BASE_URL = @“ https:// secondtarget。 com / ”。
出于法律目的,如果有人要重新编译程序集,然后去寻找字符串等……如果他们正在寻找第二个目标的二进制文件,那么我们将找不到有人找到字符串@“ https://firsttarget.com/ ”应用程序。
所以我的问题是...如果在预处理程序中,条件字符串后面的字符串不相关,它们是否会被删除?
除非定义了ifdef行上给定的符号,否则编译器不会看到#ifdef
和#endif
(或#else
)之间的代码节。您可以通过编写在此部分中不会编译的内容来轻松地显示这一点。而且由于编译器看不到该代码,因此该定义的值无法以二进制形式结束。
要确切了解编译器将使用什么功能,可以在Xcode中选择一个实现文件,然后从菜单中选择“产品>执行操作>预处理”。这将向您确切显示编译器将使用的功能。当然,还将导入所有系统.h文件中的内容,因此您的代码很可能在最后。您的#define
行也将被剥离,因此要真正检查将使用哪些字符串,您需要选择一个实际使用这些宏的文件。
最后,您可以做攻击者可能做的同样事情-strings
在编译的二进制文件上使用该实用工具,然后查看其中的内容。在Xcode中,构建您的应用,然后从产品组中为您的应用捆绑包选择“在Finder中显示”选项。在那里选择“显示软件包内容”以打开您的实际应用程序捆绑包。实际的二进制文件在其中与您的软件包同名,但没有文件扩展名。然后打开一个终端窗口,键入“ strings”(即单词字符串后跟一个空格),然后将二进制文件拖到其顶部。然后确认返回。您将从二进制文件(包括每个选择器)中获得每个可读字符串的长长列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句