joker是一个iOS kernelcache处理工具。Apple尽可能的使kernel的逆向变得困难:每一个新版本发布时,都会有更多的符号被移除。预链接的kernelcache需要少量的符号来开始,而且kernelcache是被加密的。在@xerub和其他人的努力下,32位的kernelcache可以被解密,但是64位的kernelcache由于没有公开的key,唯一的方式就是dump kernelcache。
这些困难并没有阻止越狱者,而且以后也不会。Joker是我向社区和逆向者提供的另一个贡献,它使用与jtool相同的machlib,实际上他们可以很好的一起使用。
joker主要是为iOS开发的,但由于iOS与OS X的XNU数据结果几乎相同,它也可以通过一些参数(-m,-s)对OS X kernel进行处理。
译者注: iOS10以后kernelcache不再被加密
#用法示例
joker会显示一些帮助信息
-m: 导出Mach陷阱与MIG表
-a: 导出所有信息
-k: 导出kext信息
-K: 导出特定或全部kext bundle
-S: 导出sysctl
-s: 导出UNIX系统调用
-j: 与jtool协作使用
不使用参数,joker可以通过LC_SOURCE_VERSION为你提供文件的简要标示和sysent表地址
由于在LINKEDIT和PRELINK_INFO被移除之前,可以完全获取32位kernelcache,joker可以同时列出和提取kexts bundle:
只需要指定kext名称就可以提取对应的kext bundle。
使用-S选项可以获取到完整的__sysctl_set的dump。这个很有用,因为sysctl描述符包含很多有用的内核地址、变量、处理程序:
译者注: 导出sysctl应使用-S选项,而原文使用的是-s,译文已更正
-S 同时适用于OS X。
最有效的符号化的参数是"-m",它会符号化Mach陷阱和UN*X系统调用。joker会自动压缩enosys和旧的系统调用,但仍然会提供对应的地址。
译者注: enosys 为UNIX的一种系统错误名称
joker最新和最强大的特性是对JTool的支持。使用joker -j 来生成一个简单的规则文本文件(0xaddress:symbol:comment),在JTool中可以直接调用这个文件。
Mach使用消息、MIG来序列化消息。 Mach Interface Generator生成解析消息所需要的样本代码,这就会留下容易识别的特征。joker现在可以识别dispatch表,定位符号化的函数。
注意这些符号化的函数是一种代理,真正执行的函数是通过他们来进行调用的。但是我们可以很容易的找出真正执行的函数,因为基本上代理都会去调用消息检查函数。
这对iOS很有用,但是所有的符号都是被去掉了。在OS X xnu中可以更容易的看到被调用的真实函数,因为在OS X xnu函数都是被导出的,
译者注: 样本代码 = boilerplate code
再次注意,我在这里使用x86_64就是为了说明这点,你可以看到内部被调用的真实函数是_thread_swap_mach_voucher,这表示joker得到了当前的MIG调度内容。在iOS上,你可以通过交叉编译ARM64和x86_64来达到这个目的。
随着iOS10和OS X 12的发布,内核段布局被修改,是时候更新joker了。v3.0得到大幅度修改,通过与我的machlib集成,可以使用joker进行反汇编来找到函数。目前我已经实现了简单的功能(functions taking in strings),但可以被扩展到复杂情况和智能匹配模式。
由于Apple提供了不加密的kernelcache,你可能想知道joker没有被放弃的原因。
反编译并不是你想要的最有用的功能,而且它有点慢,因此尝试使用-j,然后你会看到:
在有些情况下,joker比实际的符号表更准确,因为其导出的符号是真实实现的一个包装,能够经常被使用到。
joker3.0也做了一些只适用于sandbox.kext的MACF策略,AMFI现在已经从代码中加载了。这可以在sandbox 570中得到新的hooks。如下:
V3.0的其他增强是JTOOLDIR=...和几个令人兴奋的功能(如IOUserClients的自动检测),但是直到最终版本才会出现,第二个Beta版本会增加安全监视器(SMC)检测和ARM异常向量
正如你所看到的,machlib可以跟踪寄存器,找出地址。因此,只要是X16导出的符号,你都可以快速的找到它。
你为什么还要自己做这些呢??joker现在可以自动完成这些
一些次要的但有用的改动:如果你提供给joker一个未压缩(未加密)的kernelcache,joker依然会抱怨,但是会在最后把KPP Mach-O 提取到/tmp中。
Joker gets in the zone - Mach zones, that is:
不是4.0。因为USerClients还不能工作。同时更新对iOS 11 β的支持,sandbox decomp出现了问题(待修复)。
joker
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课