然后得到了日志:

根据日志发现:签名来自于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'
){
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课