2014-12-27 24 views

回答

1

调整是一个dylib - 它将在一个进程中加载​​。该过程可能具有权利,这些权利将用于调整。而已。调整没有它自己的权利。

至于你的问题。由于我之前说过,你不能仅仅限制一项调整 - 你的限制将被应用到正在被调整的整个过程中。你无法做任何事情。这就是如何调整的 - 它们是动态加载到进程地址空间的dylib。之后,调整成为过程的一部分。因此,任何限制都将应用于包括调整,应用程序代码和任何其他dylib/framework应用程序链接到的整个过程。

所以,如果你想开发一个应用程序,它将帮助用户限制调整,我不认为你可以做这样的事情。你可以做的是分析哪些应用程序正在调整,他们拥有什么权利,调整使用什么框架和dylib(主要是私人应用程序)。并从该用户可以启用或禁用该调整。你甚至可以分析调整的导入部分和字符串文字,以确定它使用哪些API。

更新

如何机进程与 的调整进程空间内被加载之前进行通信,能否请你解释一下?

它没有。在注入调整之前是一个单独的dylib,它没有链接到任何二进制文件。 CydiaSubstrate完成所有注入。 CydiaSubstrate的主要部分是一个特殊的加载器dylib。它与设备启动时的launchd进程动态链接到启动所有其他进程的iOS中第一个进程的进程。当一个新的进程产生时,CydiaSubstrate加载器dylib检查所有的调整过滤器,看看哪些需要注入进程并注入它们。之后,调整加载到进程地址空间(成为进程的一部分)和调整的构造函数被调用的地方通常所有的挂钩正在设置。

你能向我解释这是如何完成的吗?

假设您有一个objc类名称,C/C++函数,框架和dylibs数组作为您希望检测的字符串用法。有简单的解决方案。你可以打开调整的文件,只是搜索它的任何比赛。由于调整通常不是很大,所以不需要太多时间。而且还有更难解决的问题。使用dyld或任何其他API来解析mach-o部分以查找导入的符号和字符串文字,然后在其中搜索任何匹配项。

+0

谢谢,请阅读我的回复下面我达到了字符限制(: – user4397138

0

我不确定这是否会从用户那边回答您的问题,但如果您正在进行调整,则可以将XXX_CODESIGN_FLAGS = -Sentitlements.xml添加到您的Makefile以添加entitlements.xml中描述的权利。

+0

谢谢,是否可以实现更新一组预制权利的脚本;自动(当安装新的调整时)或通过终端手动说出;通过选择软件包并修补Makefile以包含'xx said'规则。 – user4397138

相关问题