【问题标题】:Is it possible to edit and recompile a iOS kernel? [closed]是否可以编辑和重新编译 iOS 内核? [关闭]
【发布时间】:2015-08-31 15:45:34
【问题描述】:

我想反编译一个 iOS 3.1.3 内核以更好地理解它,但我不知道从哪里开始,但不要被愚弄,我不是编程新手。

【问题讨论】:

  • 这个问题太宽泛了。
  • 批评很容易,但你可以尝试给予更有建设性的批评。
  • 防御性很诱人,但您可以阅读 Stack Overflow help file。该站点鼓励提出可以产生明确答案的特定技术问题。如果您能找出一些具体的问题或问题,您就更有可能获得帮助。

标签: ios iphone kernel


【解决方案1】:

内核是open source,所以你可以查看和编译它。 iOS 3.1.3 在 repo 中,但您还需要查看 3.0

来自Apple

作为第一家将开源开发作为其持续软件战略的关键部分的大型计算机公司,Apple 仍然致力于开源开发模式。 Mac OS X 的主要组件(包括 UNIX 核心)在 Apple 的开源许可下提供,允许开发人员和学生查看源代码、从中学习并提交建议和修改。

【讨论】:

  • 据我所知iOS内核不是开源的。
  • @JosephFoote 好的,这是什么?您确实检查了链接对吗? Cocoa 和 CocoaTouch 不是开源的。
  • 是的,我检查了链接,引自维基百科“源模型封闭源”。 Apple 不会将内核作为开源的,因为这会损害那里的安全性。
  • 我更新了答案。注意:“允许开发者和学生查看源代码,从中学习并提交建议和修改。”
  • OS X 可能是开源的,但 iOS 内核不是。
【解决方案2】:

iOS 版本中的 XNU 内核不是开源的,尽管其 i386/x86_84 中的 xnu(以及,对于旧版本的 PPC)是开源的。

XNU 在内部由多个层组成,底部的两层 - 平台专家和 ml_* API 充当底层硬件的“粘合剂”。这意味着如果没有上述部分,您可以编译源代码(使用 ARMv7 交叉编译器,如 iPhone SDK 中的那个),但内核实际上不会启动。

另一个困难在于内核扩展(XNU 中的“模块”)。这些是驱动程序,如果没有它们,您将无法做很多事情 - 再次,内核无法启动,因为它无法初始化其任何平台依赖项。

此外,与看起来相反,尽管 iOS 和 OS X 内核非常相似,但存在一些细微的差异(在 1699 年之后,#ifdef CONFIG_EMBEDDED 和 #ifdef ARM 可以看到,当 Apple 意识到它们正在泄漏时越狱者使用的信息,最后使用预处理器在公开之前去除iOS特定的修改。

反编译是另一回事。可以从内核映像(一旦解密或转储)通过相当可读的汇编(尽管不是完整的源代码级别)进行反汇编和工作。 IDA 和其他专用工具(例如 jtool)具有这些功能。

至少有两个项目可以让开源版本为 ARM 编译和启动。一个由 Christina Brooks(?) 编写,另一个由 WinOCM 编写。后者因在其 ARM 实现中完全了解 XNU 而臭名昭著,最终被 Apple 采用,从而降低了任何开源实现出现的机会。

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 2015-05-09
    • 1970-01-01
    • 2010-12-29
    • 2015-07-19
    • 2016-02-24
    • 2010-10-15
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多