然后得到了日志:

根据日志发现:签名来自于AuthKit的-[AKAppleIDServerResourceLoadDelegate signRequest:withCompletionHandler:]的一个block,这个库是放在共享缓存库里的,找到提前准备好的IDA文件,先去找主方法,根据分析IDA,最后找到了实际生成签名的方法:t1Uu,接受五个参数,context(之前讲的获取到的客户端证书),bytes(待加密的body字节),length(字节长度),以及两个接受结果的参数,直接进这个方法看, 
发现又是IDA无法解析,地址解析错误,二话不说,直接使用Xcode+lldb进行debug,一步一步还原字节码(过程相当之痛苦,花了差不多半个月才完整还原)
,使用python进行还原以后,用postman测试一下:(没有body就是默认的L字符串)

成功生成了签名,继续拿着签名找个接口去验证,成功获取到数据
本期分享就到这里,下一期为大家分享获取获取设备的机器ID以及一次性密码OPT
1:仅作为技术交流与探讨
2:苹果对重要的接口都进行了签名,这是一个通用方法
3:签名的字段是X-MMe-Nas-Qualify
1:仅作为技术交流与探讨
2:苹果对重要的接口都进行了签名,这是一个通用方法
3:签名的字段是X-MMe-Nas-Qualify
插入代码
```defineHandler({
onEnter(log, args, state) {
var key = ObjC.Object(args[3])
var value = ObjC.Object(args[2])
if (key == 'X-MMe-Nas-Qualify'){
log('\tBacktrace:\n\t' + Thread.backtrace(this.context,
Backtracer.ACCURATE).map(DebugSymbol.fromAddress)
.join('\n\t'));
}
log(`-[NSMutableURLRequest setValue:${value} forHTTPHeaderField:${key}]`);
},
onLeave(log, retval, state) {
}
});
控制台执行:frida-trace -U "Settings" -m "*[*Request *forHTTPHeaderField*]"```
插入代码
```defineHandler({
onEnter(log, args, state) {
var key = ObjC.Object(args[3])
var value = ObjC.Object(args[2])
if (key == 'X-MMe-Nas-Qualify'){
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!