Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ida_kcpp — 一个 IDAPython 模块,用于在 ida_kernelcache 之上增强 C++ 支持 | Kitploit
工具/GitHubGitHub/cellebrite-labs/ida_kcpp
静态分析iOS安全逆向工程移动安全二进制分析
GitHubcellebrite-labs/ida_kcpp

ida_kcpp

一个 IDAPython 模块,用于在 ida_kernelcache 之上增强 C++ 支持

查看仓库
14215352个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ida_kcpp

一个 IDAPython 模块,为逆向工程 iOS kernelcache 提供更加便捷的方式。

iOS kernelcache 的很大一部分由 C++ 编写,编译后形成复杂的二进制代码,使用大量虚表解引用而非显式的直接调用。ida_kcpp 利用了 ida_kernelcache 的类层次结构重建功能。它映射 IDB 并同步二进制函数与原始虚方法。它支持通过双击 C++ 虚方法调用来在 iOS kernelcache 中导航、查找其交叉引用,并在实时研究过程中保持所有内容同步。

ida_kcpp 受 ida_medigate 启发,但得益于 iOS kernelcache 的独特结构,提供了更强大、更便捷的研究环境。

general_view

安装

  • 安装 ida_kernelcache(Cellebrite 的分支)
  • 可选,但强烈推荐:安装 ida-referee(Cellebrite 的分支),用于从反编译器访问中跟踪结构体字段的交叉引用

两者都不在 PyPI 上,因此请按照各自仓库中的安装说明进行操作。

使用 ida-setup:

ida-setup plugin install -e /path/to/ida-kcpp

或手动操作:

  1. 安装 ida-netnode
  2. 确保 ida_kernelcache 和 ida_kcpp 位于 IDA python 路径中。

也可以通过将其添加到 ~/.idapro/idapythonrc.py 来实现:

import sys
sys.path.append(IDA_KCPP_PATH)
sys.path.append(IDA_KERNELCACHE_PATH)
  1. 将 ~/.idapro/plugins/ida_kcpp_plugin.py 符号链接到 ida_kcpp_plugin.py

用法

初步分析

  1. 打开待分析的 kernelcache。如果 ida_kernelcache 尚未运行,请先运行它:edit >> Plugins >> Kernel Cache CPP >> ida_kernelcache process kernel
  2. 运行 Edit >> Plugins >> Kernel Cache CPP >> Perform Initial sync...(可能会出现一些警告消息框,目前可以忽略它们)。此步骤通过将虚函数名称的前缀设置为其所属的类来重命名虚函数。此步骤还会反编译所有虚函数,设置它们的 this 参数,并将相关的 ::vmethods 成员更改为指向反编译类型的函数指针。此步骤可能需要一段时间……
  3. 现在有了一个“已同步的 IDB”,但请注意——插件尚未激活。

为已同步的 IDB 激活插件

ida_kcpp 会自动传播名称和原型,还会改变 IDA 中导航的某些方面,因此不会自动激活,但可以在任何时候激活或停用。

通过点击 edit >> Plugins >> Kernel Cache CPP >> Activate Plugin 来激活 ida_kcpp(这将安装 Hexrays 钩子,并运行 ida_kernelcache.collect_class_info())

停用插件

点击 Edit >> Plugins >> Kernel Cache CPP >> Deactivate Plugin

功能概览

虚函数同步器

虚函数重命名

重命名虚函数时,可以编辑其经过名称修饰(mangled)的名称(例如 __ZNK10AppleA7IOP9method_86Ev_99),或将其改为人类可读的名称(AppleA7IOP::method_86),后者会被自动进行名称修饰。相关的 ANCESTOR::vmethods 成员也会被重命名,同时所有实现同一虚方法的虚函数也会被重命名。

虚函数原型更新

更改虚函数原型也是如此。在这种情况下,相关的 ANCESTOR::vmethods 成员的原型将被更改为指向刚刚设置的类型的函数指针,并将 this 设置为 ANCESTOR *。此外,ANCESTOR 的所有后代(DESCENDANTS)中所有相关虚方法实现的原型也会被更改,并将其 this 设置为 DESCENTANT *。

改进的交叉引用(XREFS)

  • 我们为每个虚函数添加了指向其抽象 ::vmethods 成员的交叉引用。
  • 使用 ida_referee,我们可以在反编译器中跟踪每个字段的使用情况,尤其是 ::vmethods 成员(虚调用)。
    • 我们还添加了从虚函数出发的 CTRL+SHIFT+Y 热键,可直接打开指向其相关 ::vmethod 成员的交叉引用窗口。IDA 存在一个 bug,此功能仅在反汇编窗口中有效,在反编译器中无效。

改进的导航

  • 反编译器:双击虚函数调用会弹出一个窗口,允许用户选择该虚方法的实现。

    image-20220707161129479

  • 本地类型视图(Shift+F1):

    • 双击虚方法会导航到其实现(注意:IDA 9 还会显示一个重命名对话框,可以将其关闭)
    • 在虚方法上按 Cmd+Enter 也会导航到其实现(比双击更简洁的替代方式)
    • 修复了 IDA 的一个 bug:双击包含 :: 的结构体名称时不会跳转。

未来改进

  1. 添加对 IDA7.2 C++ 类兼容性的支持。需要更改 ida_kernelcache 的结构体布局,出于历史遗留原因我们尚未这样做
  2. 添加用于解决冲突的名称/原型解析接口。

元信息

由 Cellebrite Labs 的 Uriel Malin、Ievgen Solodovnykov 和 Omer Porzecanski 编写。 针对 macOS 上的 IDA 9.2 与 Python 3.13 开发和测试

下载工具