吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4296|回复: 23
上一主题 下一主题
收起左侧

[iOS 原创] iOS DeviceCheck:苹果设备身份链与黑灰产对抗的攻防博弈

  [复制链接]
跳转到指定楼层
楼主
我是小三 发表于 2026-6-24 17:00 回帖奖励
本帖最后由 我是小三 于 2026-6-24 16:55 编辑

一、背景 & 场景

1.1 环境

设备型号:iphone 14、iOS 版本:16.4.1、越狱方案:Dopamine

工具链:Frida16.1.4、IDA pro 9.2

1.2 引言

对于大多数互联网风控攻防业务来说,真正棘手的往往不是单个请求本身,而是背后那一整套“批量造设备、批量刷行为”的自动化体系。正是在这样的背景下,从最初的简单模拟请求,到如今的设备指纹伪造、群控刷量,攻防对抗从未停止。在这一背景下,Apple 推出的 DeviceCheck(以及后续的 App Attest)成为了 iOS 平台上反作弊与反爬虫的重要防线。

DeviceCheck 的核心目标是在保护用户隐私的前提下,为开发者提供一种持久化的设备标记能力。即使 App 被卸载重装,甚至设备被恢复出厂设置(在某些条件下),DeviceCheck 存储的 2-bit 状态依然可以被保留。这使得它成为了对抗“新用户薅羊毛”、“设备封禁”等场景的利器。

然而,对于安全研究人员和黑灰产从业者而言,DeviceCheck 也是一个必须攻克的堡垒。本文将基于逆向工程视角,简单剖析 DeviceCheck 的底层实现,揭示其加密流程,并探讨在越狱环境下进行攻防对抗的可行性。

1.3、研究动机与目标

  • 验证通过改机(UniqueChipID / ECID/SerialNumber等)为什么不能激活设备?

  • 想搞清楚:苹果到底在检验什么?哪些字段是“硬绑定”的?

  • 从攻击与防护视角学习如何应用好DeviceCheck?

1.4、整体流程与框架

  • 激活流程
  • Device Token生成流程

    二、mobileactivationd 激活流程分析

2.1、什么时候会激活?

这里说的激活,就是由 mobileactivationd + Apple 服务器 参与的那种“和苹果聊一聊,我是谁、能不能用”的流程,而不是普通 App 级别的登录。

首次开箱 / 刷机之后第一次开机

  • 全新 iPhone、刚刷完原版 IPSW、DFU 恢复之后第一次进开机向导。

  • 这时候本地没任何“激活凭据”,系统必须:

  • 收集硬件指纹(ECID、ChipID、BoardId、SerialNumber…)

  • 跟 Apple 服务器谈一轮,生成 / 刷新 uik.pem / ucrt.pem、设备证书等。

  • 你能看到的表现就是:

  • 屏幕上显示  “正在激活 iPhone,需要几分钟”

恢复出厂设置 / 抹掉所有内容之后

  • 设置 → 通用 → 传输或还原 iPhone → 抹掉所有内容和设置,或者用 Finder/iTunes 恢复。

  • 抹掉后再次启动,和第一次开箱本质一样,也要重新激活。

  • 这时 mobileactivationd 会:

  • 检查旧的激活票据是否还有效

  • 一般还是会重新向服务器请求新的激活证书(你抓到的 RKCertification 就是这类东西)。

硬件变化比较大时(换本板 / 基带 / 改机)

  • 主板更换、严重“硬改机”、某些基带相关硬件变化,会导致:

  • UniqueChipID(ECID)、ChipID、BoardId、SecurityDomain 组合发生改变。

  • Apple 服务器视角:这是“另一台设备”,必须重新审查:

  • 有没有被报失

  • 有没有被运营商锁 / 黑名单

  • 所以一旦检测到这种变化,系统会强制重新走激活流程。

  • 你的 hook 里如果把 UniqueChipID 换成别的机器的 ECID,就会看到服务器直接回:

  • ECC signature verification failed

  • 说明硬件指纹和之前那套证书对不上,激活不通过。

某些大版本升级 / 本地激活证书过期异常

  • iOS 大版本升级、系统内部结构变动,有时会触发:

  • 重签发部分证书

  • 重新校验激活状态

  • 如果本地激活缓存损坏(文件坏了、权限错了,或者你乱动 system volume),系统也可能判定无效,要求重新激活。

和运营商 / 区域相关的情况

  • 有运营商锁(有锁机)、合约机、某些地区政策机型(比如中国/欧盟特定版本),激活时会把:

  • 运营商信息

  • 区域/国家代码

  • 一起发给 Apple,

  • 服务器会根据政策决定:

  • 是否允许在当前运营商/区域激活

  • 是否切换锁状态(从未激活变成“锁到某运营商”)

小结一句:

只要 Apple 觉得“我有理由重新确认你这台机器的身份/状态”,就会触发 mobileactivationd 跑激活。

2.2、为什么要激活?

从苹果的角度,这一整套“激活”设计,主要是为了解决三大问题:防伪造、防偷盗、统一发证。DeviceCheck / AppAttest 其实都是站在这套基础设施上实现的。

确认“这是一台真机,而不是山寨/模拟设备”

  • 激活时上传的 RKCertification 里,包含:

  • 从 Secure Enclave 拿到的真·硬件密钥的 attestation

  • ECID / ChipID / BoardId / SerialNumber / SecurityDomain 等指纹

  • 苹果在服务器上用自己的 CA 体系校验证书链:

  • 证书是不是 Apple 自己签出来的

  • 硬件签名是不是由安全芯片里那把私钥算出来的

  • 结论:

    • 你光在软件层面“改 MGCopyAnswer 值”是骗不过的;

    • 没有 SE + 正规证书链,服务器不会把你当成一台合法 iPhone。

防丢失、防盗机、控制设备生命周期

激活是苹果“设备生命周期管理”的关键环节:

  • 防盗 / 查找我的 iPhone

  • 被“查找”绑定过的机器,如果被抹掉再激活,Apple 会要求输入原 Apple ID 才能继续。

  • 黑名单 / 封禁

  • 被判定为重大违规(盗刷、欺诈)的 ECID/序列号,可以在服务器侧直接标记,下一次激活就直接拒绝。

  • 区域控制

  • 比如某些功能/频段只在特定地区开放,也可以通过激活阶段写入策略。

为上层安全服务“铺路”(你现在在玩的部分)

激活完成后,mobileactivationd 会产出一套“设备根身份”:

  • 系统组文件:uik.pem / ucrt.pem

  • Keychain 里的:

    • 2bit-identity-rk

    • 2bit-identity-leaf / intermediate / combined

    • 2bit-identity-monotonic-clock / rtc-reset-count / server-timestamp 等

  • 这些东西后面会被谁用?

    • devicecheckd 生成 DeviceCheck Token

    • AppAttest 做应用级 attestation

    • 各种安全相关 daemon(FairPlay、Apple Pay、Find My…)

2.3、激活流程逆向分析

  • 采集设备信息

主要通过copyAnswer:方法采集设备唯一性相关信息

UniqueChipID:    "6871544955xxxxxx", 
ChipID:          "33040",
BoardId:         "24",
SecurityDomain:  "1",
SerialNumber:    "F6X439xxxxxx",
BuildVersion:    "20E252",
UniqueDeviceID:  "00008110-303C30C91A0xxxxxx"
  • 代码逻辑
// 获取设备信息
void __fastcall create_baa_info_sub_1000EEDCC(__SecKey *a1, id a2, _QWORD *a3)
{
  id v4; // x25
  id v5; // x20
  void *v6; // x21
  id v7; // x20
  int v8; // w5
  int v9; // w6
  int v10; // w7
  id v11; // x19
  NSArray *v12; // x21
  void *v13; // x27
  NSNumber *v14; // x0
  int v15; // w5
  int v16; // w6
  int v17; // w7
  NSNumber *v18; // x24
  void *v19; // x22
  id v20; // x23
  void *v21; // x27
  void *v22; // x22
  char *v23; // x0
  char *v24; // x23
  __int64 v25; // x25
  char *i; // x28
  __SecKey *v27; // x24
  int v28; // w5
  int v29; // w6
  int v30; // w7
  const void *v31; // x9
  void *v32; // x27
  void *v33; // x26
  void *v34; // x23
  void *v35; // x19
  _BOOL4 v36; // w9
  __SecKey *v37; // x20
  void *v38; // x23
  _BOOL4 v39; // w24
  _BOOL4 v40; // w19
  NSNumber *v41; // x26
  id v42; // x22
  int v43; // w1
  __SecKey *v44; // x21
  int v45; // w5
  int v46; // w6
  int v47; // w7
  id v48; // x20
  __SecKey *v49; // x0
  int v50; // w5
  int v51; // w6
  int v52; // w7
  CFDataRef v53; // x21
  int v54; // w5
  int v55; // w6
  int v56; // w7
  __int64 v57; // x0
  int v58; // w5
  int v59; // w6
  int v60; // w7
  char v61; // w22
  int v62; // w24
  int v63; // w5
  int v64; // w6
  int v65; // w7
  __SecKey *v66; // x19
  int v67; // w5
  int v68; // w6
  int v69; // w7
  unsigned int v70; // w28
  void *v71; // x21
  __SecKey *v72; // x22
  int v73; // w5
  int v74; // w6
  int v75; // w7
  int v76; // w5
  int v77; // w6
  int v78; // w7
  id v79; // x19
  int v80; // w5
  int v81; // w6
  int v82; // w7
  void *v83; // x21
  id v84; // x22
  NSNumber *v85; // x25
  NSNumber *v86; // x19
  NSNumber *v87; // x21
  unsigned __int8 v88; // w22
  int v89; // w5
  int v90; // w6
  int v91; // w7
  NSNumber *v92; // x19
  unsigned int v93; // w20
  int v94; // w5
  int v95; // w6
  int v96; // w7
  const __CFString *v97; // x4
  int v98; // w1
  int v99; // w2
  id v100; // x20
  int v101; // w5
  int v102; // w6
  int v103; // w7
  __SecKey *v104; // x0
  int v105; // w5
  int v106; // w6
  int v107; // w7
  NSFileManager *v108; // x20
  NSFileManager *v109; // x21
  void *v110; // x22
  unsigned __int8 v111; // w23
  int v112; // w5
  int v113; // w6
  int v114; // w7
  id v115; // x20
  id v116; // x20
  int v117; // w5
  int v118; // w6
  int v119; // w7
  id v120; // x20
  void *v121; // x21
  id v122; // x20
  int v123; // w5
  int v124; // w6
  int v125; // w7
  id v126; // x20
  void *v127; // x21
  id v128; // x20
  int v129; // w5
  int v130; // w6
  int v131; // w7
  id v132; // x20
  __SecKey *v133; // x21
  id v134; // x20
  int v135; // w5
  int v136; // w6
  int v137; // w7
  id v138; // x20
  __SecKey *v139; // x21
  id v140; // x20
  int v141; // w5
  int v142; // w6
  int v143; // w7
  id v144; // x21
  void *v145; // x26
  int v146; // w5
  int v147; // w6
  int v148; // w7
  __SecKey *v149; // x0
  int v150; // w5
  int v151; // w6
  int v152; // w7
  CFDataRef v153; // x0
  int v154; // w5
  int v155; // w6
  int v156; // w7
  CFDataRef v157; // x24
  int v158; // w1
  id v159; // x26
  id v160; // x21
  int v161; // w5
  int v162; // w6
  int v163; // w7
  __SecKey *v164; // x19
  __CFString **v165; // x8
  CFDataRef v166; // x26
  CFDataRef v167; // x2
  void *v168; // x20
  id v169; // x21
  void *v170; // x20
  void *v171; // x21
  void *v172; // x0
  void *v173; // x23
  int v174; // w5
  int v175; // w6
  int v176; // w7
  void *v177; // x20
  int v178; // w5
  int v179; // w6
  int v180; // w7
  void *v181; // x20
  void *v182; // x21
  void *v183; // x0
  void *v184; // x20
  int v185; // w5
  int v186; // w6
  int v187; // w7
  void *v188; // x20
  int v189; // w5
  int v190; // w6
  int v191; // w7
  void *v192; // x20
  void *v193; // x21
  void *v194; // x0
  void *v195; // x20
  int v196; // w5
  int v197; // w6
  int v198; // w7
  int v199; // w5
  int v200; // w6
  int v201; // w7
  int v202; // w5
  int v203; // w6
  int v204; // w7
  __SecKey *v205; // x0
  void *v206; // x20
  id v207; // x21
  void *v208; // x20
  void *v209; // x21
  id v210; // x22
  void *v211; // x21
  unsigned int v212; // w19
  void *v213; // x22
  id v214; // x23
  void *v215; // x21
  void *v216; // x22
  id v217; // x23
  void *v218; // x21
  void *v219; // x22
  id v220; // x23
  void *v221; // x21
  void *v222; // x22
  id v223; // x23
  void *v224; // x23
  int v225; // w5
  int v226; // w6
  int v227; // w7
  void *v228; // x22
  id v229; // x23
  __SecKey *v230; // x21
  __SecKey *v231; // x24
  void *v232; // x28
  id v233; // x27
  void *v234; // x25
  void *v235; // x26
  __SecKey *v236; // x23
  void *v237; // x22
  id v238; // x19
  const void *v239; // x20
  __SecKey *v240; // x21
  __SecKey *v241; // x0
  id v242; // x19
  NSDictionary *v243; // x22
  void *v244; // x24
  __CFString **v245; // x8
  void *v246; // x0
  id v247; // x0
  void *v248; // x22
  char v249; // w23
  id v250; // x19
  id v251; // x23
  int v252; // w5
  int v253; // w6
  int v254; // w7
  id v255; // x19
  id v256; // x24
  int v257; // w5
  int v258; // w6
  int v259; // w7
  char is_darwinos; // w0
  id v261; // x19
  id v262; // x21
  int v263; // w5
  int v264; // w6
  int v265; // w7
  id v266; // x24
  NSData *v267; // x24
  int v268; // w5
  int v269; // w6
  int v270; // w7
  CFDataRef v271; // x2
  int v272; // w5
  int v273; // w6
  int v274; // w7
  char v275; // [xsp+0h] [xbp-3B0h]
  char v276; // [xsp+0h] [xbp-3B0h]
  void *v277; // [xsp+8h] [xbp-3A8h]
  __SecKey *v278; // [xsp+18h] [xbp-398h]
  __SecKey *v279; // [xsp+20h] [xbp-390h]
  void *v280; // [xsp+28h] [xbp-388h]
  void *v281; // [xsp+30h] [xbp-380h]
  void *v282; // [xsp+38h] [xbp-378h]
  __SecKey *v283; // [xsp+40h] [xbp-370h]
  __SecKey *v284; // [xsp+48h] [xbp-368h]
  __SecKey *cf; // [xsp+50h] [xbp-360h]
  id v286; // [xsp+58h] [xbp-358h]
  id v287; // [xsp+58h] [xbp-358h]
  char v288[8]; // [xsp+60h] [xbp-350h]
  __SecKey *v289; // [xsp+68h] [xbp-348h]
  __SecKey *v290; // [xsp+70h] [xbp-340h]
  const void *v291; // [xsp+78h] [xbp-338h]
  id v292; // [xsp+80h] [xbp-330h]
  id v293; // [xsp+80h] [xbp-330h]
  __SecKey *v294; // [xsp+88h] [xbp-328h]
  __SecKey *v295; // [xsp+88h] [xbp-328h]
  CFDataRef v296; // [xsp+90h] [xbp-320h]
  unsigned int v297; // [xsp+98h] [xbp-318h]
  NSData *v298; // [xsp+98h] [xbp-318h]
  CFDataRef v299; // [xsp+A0h] [xbp-310h]
  id v300; // [xsp+A8h] [xbp-308h]
  id v301; // [xsp+B0h] [xbp-300h]
  id v302; // [xsp+B8h] [xbp-2F8h]
  _BOOL4 v303; // [xsp+C0h] [xbp-2F0h]
  _BOOL4 v304; // [xsp+C0h] [xbp-2F0h]
  id v305; // [xsp+C0h] [xbp-2F0h]
  id v306; // [xsp+C8h] [xbp-2E8h]
  id v307; // [xsp+D0h] [xbp-2E0h]
  NSNumber *v308; // [xsp+D8h] [xbp-2D8h]
  NSNumber *v309; // [xsp+E0h] [xbp-2D0h]
  id v310; // [xsp+E8h] [xbp-2C8h]
  id v311; // [xsp+F0h] [xbp-2C0h]
  id v312; // [xsp+F8h] [xbp-2B8h]
  NSNumber *v313; // [xsp+100h] [xbp-2B0h]
  id v314; // [xsp+108h] [xbp-2A8h]
  id v315; // [xsp+110h] [xbp-2A0h]
  __SecKey *v316; // [xsp+118h] [xbp-298h]
  unsigned int v317; // [xsp+118h] [xbp-298h]
  id v318; // [xsp+120h] [xbp-290h]
  id v319; // [xsp+128h] [xbp-288h]
  CFDataRef v320; // [xsp+130h] [xbp-280h]
  id v321; // [xsp+138h] [xbp-278h]
  NSNumber *v322; // [xsp+140h] [xbp-270h]
  __SecKey *v323; // [xsp+148h] [xbp-268h]
  id v324; // [xsp+148h] [xbp-268h]
  id v325; // [xsp+148h] [xbp-268h]
  id v327; // [xsp+158h] [xbp-258h] BYREF
  id v328; // [xsp+160h] [xbp-250h] BYREF
  id v329; // [xsp+168h] [xbp-248h] BYREF
  id v330[2]; // [xsp+170h] [xbp-240h] BYREF
  id v331; // [xsp+180h] [xbp-230h] BYREF
  id v332; // [xsp+188h] [xbp-228h] BYREF
  id v333; // [xsp+190h] [xbp-220h] BYREF
  id v334[3]; // [xsp+198h] [xbp-218h] BYREF
  id v335[2]; // [xsp+1B0h] [xbp-200h] BYREF
  id v336[2]; // [xsp+1C0h] [xbp-1F0h]
  id v337[2]; // [xsp+1D0h] [xbp-1E0h]
  id v338[2]; // [xsp+1E0h] [xbp-1D0h]
  CFErrorRef error; // [xsp+1F0h] [xbp-1C0h] BYREF
  id v340[12]; // [xsp+1F8h] [xbp-1B8h] BYREF
  _QWORD v341[12]; // [xsp+258h] [xbp-158h] BYREF
  char v342[8]; // [xsp+2B8h] [xbp-F8h] BYREF
  _QWORD v343[3]; // [xsp+338h] [xbp-78h] BYREF
  __int64 vars8; // [xsp+3B8h] [xbp+8h]

  v4 = objc_retain(a2);
  error = 0;
  v5 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
  v6 = objc_msgSend(v5, "copyAnswer:", CFSTR("s7nuHoZIYNoOHCqT9iyZkQ"));
  objc_release(v5);
  v319 = v6;
  v7 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v6));
  objc_release(v7);
  if ( !v7 )
  {
    v322 = 0;
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    244,
                                                    -1,
                                                    0,
                                                    (int)CFSTR("Failed to retrieve %@."),
                                                    v8,
                                                    v9,
                                                    v10,
                                                    (char)CFSTR("s7nuHoZIYNoOHCqT9iyZkQ")));
    v302 = 0;
    v31 = 0;
    v306 = 0;
    v307 = 0;
    v315 = 0;
    v299 = 0;
    v300 = 0;
    v310 = 0;
    v311 = 0;
    v313 = 0;
    v308 = 0;
    v309 = 0;
    v318 = 0;
    v321 = 0;
    v27 = 0;
    a1 = 0;
    v32 = 0;
    v33 = 0;
    v34 = 0;
    v35 = 0;
LABEL_18:
    v320 = 0;
    v316 = 0;
LABEL_46:
    v296 = 0;
    v298 = 0;
    v312 = 0;
    v314 = 0;
    v44 = 0;
LABEL_47:
    v72 = 0;
    v301 = 0;
    v305 = 0;
    goto LABEL_180;
  }
  v11 = objc_alloc((Class)&OBJC_CLASS___NSMutableArray);
  v343[0] = CFSTR("1.2.840.113635.100.8.4");
  v343[1] = CFSTR("1.2.840.113635.100.8.5");
  v343[2] = CFSTR("1.2.840.113635.100.8.7");
  v12 = objc_retainAutoreleasedReturnValue(+[NSArray arrayWithObjects:count:](&OBJC_CLASS___NSArray, "arrayWithObjects:count:", v343, 3));
  v13 = objc_msgSend(v11, "initWithArray:", v12);
  objc_release(v12);
  v14 = objc_retainAutoreleasedReturnValue(+[NSNumber numberWithUnsignedInt:](&OBJC_CLASS___NSNumber, "numberWithUnsignedInt:", 0));
  v322 = v14;
  if ( !v4 )
  {
    v36 = 0;
    v297 = 0;
    v37 = 0;
    v320 = 0;
    v38 = 0;
    v310 = 0;
    v311 = 0;
    v300 = 0;
    v315 = 0;
    v306 = 0;
    v39 = 0;
    v40 = 1;
    v41 = (NSNumber *)&off_100E66CB8;
    v308 = (NSNumber *)&off_100E66CB8;
    v309 = (NSNumber *)&off_100E66CA0;
    goto LABEL_20;
  }
  v18 = v14;
  v323 = a1;
  v19 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("OIDSToInclude")));
  v20 = objc_retainAutoreleasedReturnValue((id)isKindOfClass());
  objc_release(v20);
  objc_release(v19);
  if ( v20 )
  {
    v321 = v13;
    *(_OWORD *)v337 = 0u;
    *(_OWORD *)v338 = 0u;
    *(_OWORD *)v335 = 0u;
    *(_OWORD *)v336 = 0u;
    v21 = v4;
    v22 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("OIDSToInclude")));
    v23 = (char *)objc_msgSend(v22, "countByEnumeratingWithState:objects:count:", v335, v342, 16);
    if ( v23 )
    {
      v24 = v23;
      v25 = *(_QWORD *)v336[0];
      while ( 2 )
      {
        for ( i = 0; i != v24; ++i )
        {
          if ( *(_QWORD *)v336[0] != v25 )
            objc_enumerationMutation(v22);
          v27 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)isKindOfClass_1(*((_QWORD *)v335[1] + (_QWORD)i)));
          objc_release(v27);
          if ( !v27 )
          {
            v4 = v21;
            v277 = objc_retainAutoreleasedReturnValue(objc_msgSend(v21, "objectForKeyedSubscript:", CFSTR("OIDSToInclude")));
            v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                            (int)"create_baa_info",
                                                            263,
                                                            -2,
                                                            0,
                                                            (int)CFSTR("Invalid options (%@): %@"),
                                                            v76,
                                                            v77,
                                                            v78,
                                                            (char)CFSTR("OIDSToInclude")));
            objc_release(v277);
            objc_release(v22);
            v302 = 0;
            v31 = 0;
            v306 = 0;
            v307 = 0;
            v315 = 0;
            v300 = 0;
            v310 = 0;
            v311 = 0;
            v318 = 0;
            goto LABEL_93;
          }
        }
        v24 = (char *)objc_msgSend(v22, "countByEnumeratingWithState:objects:count:", v335, v342, 16);
        if ( v24 )
          continue;
        break;
      }
    }
    objc_release(v22);
    v4 = v21;
    v13 = objc_retainAutoreleasedReturnValue(objc_msgSend(v21, "objectForKeyedSubscript:", CFSTR("OIDSToInclude")));
    objc_release(v321);
    v18 = v322;
  }
  v321 = v13;
  if ( (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.1"))
    && ((sub_100C87320() & 1) != 0 || (unsigned int)sub_100C87330()) )
  {
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    276,
                                                    -2,
                                                    0,
                                                    (int)CFSTR("Boot manifest not available in rOS or diagnosticsOS."),
                                                    v28,
                                                    v29,
                                                    v30,
                                                    v275));
    v302 = 0;
    v31 = 0;
    v306 = 0;
    v315 = 0;
    v300 = 0;
    v310 = 0;
    v311 = 0;
    v318 = 0;
    goto LABEL_92;
  }
  v304 = ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.1")) & 1) != 0
      || ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.7")) & 1) != 0
      || ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.10.1")) & 1) != 0
      || ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.10.2")) & 1) != 0
      || (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.10.3"));
  v70 = (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.7"));
  if ( ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.2")) & 1) != 0
    || (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.8.11.1")) )
  {
    v71 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("nonce")));
    v72 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)isKindOfClass_2());
    objc_release(v72);
    objc_release(v71);
    if ( !v72 )
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      295,
                                                      -2,
                                                      0,
                                                      (int)CFSTR("Missing required option: %@"),
                                                      v73,
                                                      v74,
                                                      v75,
                                                      (char)CFSTR("nonce")));
      v302 = 0;
      v31 = 0;
      v306 = 0;
      v307 = 0;
      v315 = 0;
      v316 = 0;
      v299 = 0;
      v300 = 0;
      v310 = 0;
      v311 = 0;
      v318 = 0;
      v27 = 0;
      a1 = 0;
      v32 = 0;
      v33 = 0;
      v34 = 0;
      v35 = 0;
      v7 = 0;
      v320 = 0;
      v296 = 0;
      v298 = 0;
      v312 = 0;
      v314 = 0;
      v44 = 0;
LABEL_96:
      v301 = 0;
      v305 = 0;
      v313 = (NSNumber *)&off_100E66CB8;
      v308 = (NSNumber *)&off_100E66CB8;
      v309 = (NSNumber *)&off_100E66CA0;
      goto LABEL_180;
    }
    v318 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("nonce")));
  }
  else
  {
    v318 = 0;
  }
  v83 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("CertType")));
  v84 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v83));
  objc_release(v84);
  objc_release(v83);
  v293 = v4;
  if ( v84 )
  {
    v85 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("CertType")));
    objc_release(v18);
    v86 = objc_retainAutoreleasedReturnValue(+[NSNumber numberWithUnsignedInt:](&OBJC_CLASS___NSNumber, "numberWithUnsignedInt:", 0));
    if ( -[NSNumber isEqualToNumber:](v85, "isEqualToNumber:", v86) )
    {
      objc_release(v86);
      v18 = v85;
    }
    else
    {
      v87 = objc_retainAutoreleasedReturnValue(+[NSNumber numberWithUnsignedInt:](&OBJC_CLASS___NSNumber, "numberWithUnsignedInt:", 1));
      v88 = -[NSNumber isEqualToNumber:](v85, "isEqualToNumber:", v87);
      objc_release(v87);
      objc_release(v86);
      v18 = v85;
      if ( (v88 & 1) == 0 )
      {
        v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                        (int)"create_baa_info",
                                                        306,
                                                        -2,
                                                        0,
                                                        (int)CFSTR("Invalid value for option (%@): %@"),
                                                        v89,
                                                        v90,
                                                        v91,
                                                        (char)CFSTR("CertType")));
        v302 = 0;
        v31 = 0;
        v306 = 0;
        v307 = 0;
        v315 = 0;
        v316 = 0;
        v299 = 0;
        v300 = 0;
        v310 = 0;
        v311 = 0;
        v27 = 0;
        a1 = 0;
        v32 = 0;
        v33 = 0;
        v34 = 0;
        v35 = 0;
        v7 = 0;
        v320 = 0;
        v296 = 0;
        v298 = 0;
        v314 = 0;
        v44 = 0;
        v72 = 0;
        v301 = 0;
        v305 = 0;
        v322 = v85;
        v312 = 0;
        v313 = (NSNumber *)&off_100E66CB8;
        v308 = (NSNumber *)&off_100E66CB8;
        v309 = (NSNumber *)&off_100E66CA0;
        v4 = v293;
        goto LABEL_180;
      }
    }
  }
  v92 = objc_retainAutoreleasedReturnValue(+[NSNumber numberWithUnsignedInt:](&OBJC_CLASS___NSNumber, "numberWithUnsignedInt:", 1));
  v93 = -[NSNumber isEqualToNumber:](v18, "isEqualToNumber:", v92);
  objc_release(v92);
  v322 = v18;
  if ( v93 )
  {
    v4 = v293;
    if ( ((unsigned int)objc_msgSend(v319, "boolValue") & 1) == 0 )
    {
      v97 = CFSTR("Certificate type not supported on this platform: %@");
      v276 = (char)v18;
      v98 = 313;
      v99 = -3;
      goto LABEL_89;
    }
    if ( ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.1")) & 1) == 0 )
    {
      v97 = CFSTR("Missing required OID for certificate type (%@): %@");
      v276 = (char)v18;
      v98 = 318;
LABEL_66:
      v99 = -2;
LABEL_89:
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      v98,
                                                      v99,
                                                      0,
                                                      (int)v97,
                                                      v94,
                                                      v95,
                                                      v96,
                                                      v276));
LABEL_90:
      v302 = 0;
      v31 = 0;
      v306 = 0;
      v315 = 0;
      v300 = 0;
      v311 = 0;
LABEL_91:
      v310 = 0;
LABEL_92:
      v307 = 0;
      v27 = 0;
LABEL_93:
      a1 = 0;
      v32 = 0;
      v33 = 0;
      v34 = 0;
      v299 = 0;
      v35 = 0;
      goto LABEL_94;
    }
  }
  else
  {
    v4 = v293;
    if ( ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.1")) & 1) != 0
      || ((unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.2")) & 1) != 0
      || (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.3")) )
    {
      v97 = CFSTR("Invalid OID(s) for requested certificate type: %@");
      v276 = (char)v18;
      v98 = 325;
      goto LABEL_66;
    }
  }
  if ( (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.1"))
    && (v168 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiProperties"))),
        v169 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_2()),
        objc_release(v169),
        objc_release(v168),
        v169) )
  {
    v170 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiProperties")));
    v171 = objc_msgSend(v170, "length");
    objc_release(v170);
    v172 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiProperties")));
    v173 = v172;
    if ( v171 != (void *)32 )
    {
      objc_msgSend(v172, "length");
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      333,
                                                      -2,
                                                      0,
                                                      (int)CFSTR("Invalid value for option (%@): unexpected size (%lu)"),
                                                      v174,
                                                      v175,
                                                      v176,
                                                      (char)CFSTR("MFiProperties")));
      objc_release(v173);
      goto LABEL_90;
    }
  }
  else
  {
    v173 = 0;
  }
  v311 = v173;
  if ( (unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.2")) )
  {
    v177 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiPPUID")));
    v44 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)isKindOfClass_1(v177));
    objc_release(v44);
    objc_release(v177);
    if ( !v44 )
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      343,
                                                      -2,
                                                      0,
                                                      (int)CFSTR("Missing required option: %@"),
                                                      v178,
                                                      v179,
                                                      v180,
                                                      (char)CFSTR("MFiPPUID")));
      v302 = 0;
      v31 = 0;
      v306 = 0;
      v315 = 0;
      v300 = 0;
LABEL_135:
      v310 = 0;
      v307 = 0;
      v27 = 0;
      a1 = 0;
      v32 = 0;
      v33 = 0;
      v34 = 0;
      v298 = 0;
      v299 = 0;
      v35 = 0;
      v7 = 0;
      v320 = 0;
      v316 = 0;
      v296 = 0;
      v312 = 0;
      v314 = 0;
      goto LABEL_95;
    }
    v181 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiPPUID")));
    v182 = objc_msgSend(v181, "length");
    objc_release(v181);
    v183 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiPPUID")));
    v184 = v183;
    if ( (unsigned __int64)v182 >= 0x25 )
    {
      objc_msgSend(v183, "length");
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      348,
                                                      -2,
                                                      0,
                                                      (int)CFSTR("Invalid value for option (%@): unexpected size (%lu)"),
                                                      v185,
                                                      v186,
                                                      v187,
                                                      (char)CFSTR("MFiPPUID")));
      objc_release(v184);
      v302 = 0;
      v31 = 0;
      v306 = 0;
      v315 = 0;
      v300 = 0;
      goto LABEL_91;
    }
    v35 = objc_retainAutoreleasedReturnValue(objc_msgSend(v183, "stringByPaddingToLength:withString:startingAtIndex:", 36, &stru_100E61E50, 0));
    objc_release(v184);
    if ( !v35 )
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      357,
                                                      -2,
                                                      0,
                                                      (int)CFSTR("Failed to pad string."),
                                                      v199,
                                                      v200,
                                                      v201,
                                                      v275));
      v302 = 0;
      v31 = 0;
      v306 = 0;
      v307 = 0;
      v315 = 0;
      v299 = 0;
      v300 = 0;
      v310 = 0;
      v27 = 0;
      a1 = 0;
      v32 = 0;
      v33 = 0;
      v34 = 0;
LABEL_94:
      v7 = 0;
      v320 = 0;
      v316 = 0;
      v296 = 0;
      v298 = 0;
      v312 = 0;
      v314 = 0;
      v44 = 0;
LABEL_95:
      v72 = 0;
      goto LABEL_96;
    }
    v315 = objc_retainAutoreleasedReturnValue(objc_msgSend(v35, "dataUsingEncoding:", 4));
    if ( !v315 )
    {
      v300 = v35;
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      363,
                                                      -2,
                                                      0,
                                                      (int)CFSTR("Failed to convert string to data."),
                                                      v202,
                                                      v203,
                                                      v204,
                                                      v275));
      v302 = 0;
      v31 = 0;
      v306 = 0;
      v315 = 0;
      goto LABEL_91;
    }
  }
  else
  {
    v35 = 0;
    v315 = 0;
  }
  v300 = v35;
  if ( !(unsigned int)objc_msgSend(v13, "containsObject:", CFSTR("1.2.840.113635.100.6.71.3")) )
  {
    v306 = 0;
    goto LABEL_137;
  }
  v188 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiData")));
  v44 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)isKindOfClass_2());
  objc_release(v44);
  objc_release(v188);
  if ( !v44 )
  {
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    370,
                                                    -2,
                                                    0,
                                                    (int)CFSTR("Missing required option: %@"),
                                                    v189,
                                                    v190,
                                                    v191,
                                                    (char)CFSTR("MFiData")));
    v302 = 0;
    v31 = 0;
    v306 = 0;
    goto LABEL_135;
  }
  v192 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiData")));
  v193 = objc_msgSend(v192, "length");
  objc_release(v192);
  v194 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("MFiData")));
  v195 = v194;
  if ( (unsigned __int64)v193 >= 0x4B0 )
  {
    objc_msgSend(v194, "length");
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    375,
                                                    -2,
                                                    0,
                                                    (int)CFSTR("Invalid value for option (%@): unexpected size (%lu)"),
                                                    v196,
                                                    v197,
                                                    v198,
                                                    (char)CFSTR("MFiData")));
    objc_release(v195);
    v302 = 0;
    v31 = 0;
    v306 = 0;
    goto LABEL_91;
  }
  v306 = v194;
LABEL_137:
  v206 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("UseRKSigningInterface")));
  v207 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v206));
  objc_release(v207);
  objc_release(v206);
  if ( v207 )
  {
    v208 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("UseRKSigningInterface")));
    v317 = (unsigned int)objc_msgSend(v208, "boolValue");
    objc_release(v208);
  }
  else
  {
    v317 = 0;
  }
  v209 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("UseSoftwareGeneratedKey")));
  v210 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v209));
  objc_release(v210);
  objc_release(v209);
  if ( v210 )
  {
    v211 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("UseSoftwareGeneratedKey")));
    v212 = (unsigned int)objc_msgSend(v211, "boolValue");
    objc_release(v211);
  }
  else
  {
    v212 = 1;
  }
  v213 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("Validity")));
  v214 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v213));
  objc_release(v214);
  objc_release(v213);
  if ( v214 )
  {
    v215 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("Validity")));
    v309 = objc_retainAutoreleasedReturnValue(
             +[NSNumber numberWithUnsignedInteger:](
               &OBJC_CLASS___NSNumber,
               "numberWithUnsignedInteger:",
               objc_msgSend(v215, "unsignedIntegerValue")));
    objc_release(v215);
  }
  else
  {
    v309 = (NSNumber *)&off_100E66CA0;
  }
  v216 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("CACert")));
  v217 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v216));
  objc_release(v217);
  objc_release(v216);
  if ( v217 )
  {
    v218 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("CACert")));
    v308 = objc_retainAutoreleasedReturnValue(
             +[NSNumber numberWithUnsignedInteger:](
               &OBJC_CLASS___NSNumber,
               "numberWithUnsignedInteger:",
               objc_msgSend(v218, "unsignedIntegerValue")));
    objc_release(v218);
  }
  else
  {
    v308 = (NSNumber *)&off_100E66CB8;
  }
  v219 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("scrtAttestation")));
  v220 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v219));
  objc_release(v220);
  objc_release(v219);
  if ( v220 )
  {
    v221 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("scrtAttestation")));
    v41 = objc_retainAutoreleasedReturnValue(
            +[NSNumber numberWithUnsignedInteger:](
              &OBJC_CLASS___NSNumber,
              "numberWithUnsignedInteger:",
              objc_msgSend(v221, "unsignedIntegerValue")));
    objc_release(v221);
  }
  else
  {
    v41 = (NSNumber *)&off_100E66CB8;
  }
  v222 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("ClientAttestationData")));
  v223 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_2());
  objc_release(v223);
  objc_release(v222);
  if ( !v223 )
  {
    v37 = 0;
    v320 = 0;
    goto LABEL_156;
  }
  v224 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("ClientAttestationPublicKey")));
  v27 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)isKindOfClass_2());
  objc_release(v27);
  objc_release(v224);
  if ( !v27 )
  {
    v313 = v41;
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    412,
                                                    -2,
                                                    0,
                                                    (int)CFSTR("Missing required option for %@."),
                                                    v225,
                                                    v226,
                                                    v227,
                                                    (char)CFSTR("ClientAttestationPublicKey")));
    v302 = 0;
    v31 = 0;
    v310 = 0;
    v307 = 0;
    a1 = 0;
    v32 = 0;
    v33 = 0;
    v34 = 0;
    v299 = 0;
    v35 = 0;
    v7 = 0;
    goto LABEL_18;
  }
  v37 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("ClientAttestationData")));
  v320 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("ClientAttestationPublicKey")));
LABEL_156:
  v297 = v70;
  v228 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("AppID")));
  v229 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_1(v228));
  objc_release(v229);
  objc_release(v228);
  v39 = v317 != 0;
  v40 = v212 != 0;
  if ( v229 )
    v310 = objc_retainAutoreleasedReturnValue(objc_msgSend(v4, "objectForKeyedSubscript:", CFSTR("AppID")));
  else
    v310 = 0;
  v38 = v318;
  a1 = v323;
  v36 = v304;
LABEL_20:
  v321 = v13;
  v318 = v38;
  v313 = v41;
  if ( !a1 )
  {
    v316 = v37;
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    467,
                                                    -2,
                                                    0,
                                                    (int)CFSTR("Invalid input."),
                                                    v15,
                                                    v16,
                                                    v17,
                                                    v275));
    v302 = 0;
    v31 = 0;
    v307 = 0;
    v27 = 0;
LABEL_45:
    v32 = 0;
    v33 = 0;
    v34 = 0;
    v299 = 0;
    v35 = 0;
    v7 = 0;
    goto LABEL_46;
  }
  v42 = 0;
  v303 = v36;
  if ( !v39 || v37 )
  {
    v291 = 0;
    v289 = 0;
    v294 = 0;
LABEL_49:
    v316 = v37;
    v333 = v42;
    v334[0] = 0;
    v27 = security_copy_system_key(0, v334, &v333);
    v7 = objc_retain(v334[0]);
    v79 = objc_retain(v333);
    objc_release(v42);
    if ( !v27 )
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      519,
                                                      -1,
                                                      error,
                                                      (int)CFSTR("Failed to copy SIK attestation key."),
                                                      v80,
                                                      v81,
                                                      v82,
                                                      v275));
      objc_release(v79);
      v302 = 0;
      v305 = 0;
      v301 = 0;
      v72 = 0;
      v44 = 0;
      v314 = 0;
      v296 = 0;
      v298 = 0;
      v312 = 0;
      v35 = 0;
      v299 = 0;
      v34 = 0;
      v33 = 0;
      v32 = 0;
      a1 = 0;
      v307 = 0;
      v290 = 0;
      goto LABEL_173;
    }
    *(_QWORD *)v288 = v7;
    if ( -[NSNumber boolValue](v41, "boolValue") )
    {
      v292 = v4;
      v286 = 0;
      v284 = 0;
    }
    else
    {
      v331 = v79;
      v332 = 0;
      v72 = security_copy_system_key(2, &v332, &v331);
      v286 = objc_retain(v332);
      v100 = objc_retain(v331);
      objc_release(v79);
      if ( !v72 )
      {
        v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                        (int)"create_baa_info",
                                                        528,
                                                        -1,
                                                        v100,
                                                        (int)CFSTR("Failed to copy UIK attestation key."),
                                                        v101,
                                                        v102,
                                                        v103,
                                                        v275));
        objc_release(v100);
        CFRelease(v27);
        v302 = 0;
        v305 = 0;
        v301 = 0;
        v44 = 0;
        v314 = 0;
        v296 = 0;
        v298 = 0;
        v312 = 0;
        v299 = 0;
        v34 = 0;
        v33 = 0;
        v32 = 0;
        a1 = 0;
        v27 = 0;
        v307 = 0;
        v290 = 0;
        v35 = v286;
        v7 = *(id *)v288;
        goto LABEL_173;
      }
      v284 = v72;
      v292 = v4;
      v79 = v100;
      v7 = *(id *)v288;
    }
    cf = v27;
    v104 = (__SecKey *)objc_alloc_init((Class)&OBJC_CLASS___NSMutableDictionary);
    v72 = v104;
    if ( !v104 )
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      536,
                                                      -1,
                                                      0,
                                                      (int)CFSTR("Failed to allocate dictionary."),
                                                      v105,
                                                      v106,
                                                      v107,
                                                      v275));
      objc_release(v79);
      v302 = 0;
      v305 = 0;
      v301 = 0;
      v44 = 0;
      v314 = 0;
      v296 = 0;
      v298 = 0;
      v312 = 0;
      v299 = 0;
      v34 = 0;
      v33 = 0;
      v32 = 0;
      a1 = 0;
      v27 = 0;
      v307 = 0;
      v290 = 0;
      v4 = v292;
      v35 = v286;
      goto LABEL_171;
    }
    v283 = v104;
    if ( -[NSNumber boolValue](v41, "boolValue")
      || (v108 = objc_retainAutoreleasedReturnValue(+[NSFileManager defaultManager](&OBJC_CLASS___NSFileManager, "defaultManager")),
          v109 = objc_retainAutoreleasedReturnValue(objc_retainAutoreleaseReturnValue(v108)),
          v110 = objc_retainAutoreleasedReturnValue(
                   -[NSFileManager stringByAppendingPathComponent:](
                     v109,
                     "stringByAppendingPathComponent:",
                     CFSTR("ucrt.pem"))),
          v111 = -[NSFileManager fileExistsAtPath:](v108, "fileExistsAtPath:", v110),
          objc_release(v110),
          objc_release(v109),
          objc_release(v108),
          (v111 & 1) != 0) )
    {
      v115 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
      v34 = objc_msgSend(v115, "copyAnswer:", CFSTR("UniqueChipID"));
      objc_release(v115);
      v116 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v34));
      objc_release(v116);
      if ( v116 )
      {
        v281 = v34;
        v120 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
        v121 = objc_msgSend(v120, "copyAnswer:", CFSTR("ChipID"));
        objc_release(v120);
        v282 = v121;
        v122 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v121));
        objc_release(v122);
        if ( !v122 )
        {
          v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                          (int)"create_baa_info",
                                                          588,
                                                          -1,
                                                          0,
                                                          (int)CFSTR("Failed to retrieve %@."),
                                                          v123,
                                                          v124,
                                                          v125,
                                                          (char)CFSTR("ChipID")));
          objc_release(v79);
          v302 = 0;
          v305 = 0;
          v301 = 0;
          v44 = 0;
          v314 = 0;
          v296 = 0;
          v298 = 0;
          v312 = 0;
          v299 = 0;
          v32 = 0;
          a1 = 0;
          v27 = 0;
          v307 = 0;
          v290 = 0;
          v4 = v292;
          v35 = v286;
          v7 = *(id *)v288;
          v33 = v282;
          v72 = v283;
          goto LABEL_171;
        }
        v126 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
        v127 = objc_msgSend(v126, "copyAnswer:", CFSTR("BoardId"));
        objc_release(v126);
        v280 = v127;
        v128 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v127));
        objc_release(v128);
        if ( !v128 )
        {
          v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                          (int)"create_baa_info",
                                                          594,
                                                          -1,
                                                          0,
                                                          (int)CFSTR("Failed to retrieve %@."),
                                                          v129,
                                                          v130,
                                                          v131,
                                                          (char)CFSTR("BoardId")));
          objc_release(v79);
          v302 = 0;
          v305 = 0;
          v301 = 0;
          v44 = 0;
          v314 = 0;
          v296 = 0;
          v298 = 0;
          v312 = 0;
          v299 = 0;
          a1 = 0;
          v27 = 0;
          v307 = 0;
          v290 = 0;
          v4 = v292;
          v35 = v286;
          v7 = *(id *)v288;
          v33 = v282;
          v72 = v283;
          v32 = v280;
          goto LABEL_171;
        }
        v132 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
        v133 = (__SecKey *)objc_msgSend(v132, "copyAnswer:", CFSTR("SecurityDomain"));
        objc_release(v132);
        v279 = v133;
        v134 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_0(v133));
        objc_release(v134);
        if ( !v134 )
        {
          v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                          (int)"create_baa_info",
                                                          600,
                                                          -1,
                                                          0,
                                                          (int)CFSTR("Failed to retrieve %@."),
                                                          v135,
                                                          v136,
                                                          v137,
                                                          (char)CFSTR("SecurityDomain")));
          objc_release(v79);
          v302 = 0;
          v305 = 0;
          v301 = 0;
          v44 = 0;
          v314 = 0;
          v296 = 0;
          v298 = 0;
          v312 = 0;
          v299 = 0;
          v27 = 0;
          v307 = 0;
          v290 = 0;
          v4 = v292;
          v35 = v286;
          v7 = *(id *)v288;
          v33 = v282;
          v72 = v283;
          v32 = v280;
LABEL_133:
          a1 = v279;
          goto LABEL_171;
        }
        v138 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
        v139 = (__SecKey *)objc_msgSend(v138, "copyAnswer:", CFSTR("SerialNumber"));
        objc_release(v138);
        v278 = v139;
        v140 = objc_retainAutoreleasedReturnValue((id)isKindOfClass_1(v139));
        objc_release(v140);
        if ( v140 )
        {
          v144 = objc_retainAutoreleasedReturnValue(+[GestaltHlpr getSharedInstance](&OBJC_CLASS___GestaltHlpr, "getSharedInstance"));
          v145 = objc_msgSend(v144, "copyAnswer:", CFSTR("BuildVersion"));
          objc_release(v144);
          v307 = v145;
          v44 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)isKindOfClass_1(v145));
          objc_release(v44);
          if ( v44 )
          {
            v149 = SecKeyCopyPublicKey(a1);
            if ( v149 )
            {
              v290 = v149;
              v153 = SecKeyCopyExternalRepresentation(v149, &error);
              v7 = *(id *)v288;
              if ( v153 )
              {
                v157 = v153;
                if ( -[NSNumber boolValue](v313, "boolValue") )
                  v158 = 0;
                else
                  v158 = 2;
                v330[1] = v79;
                v159 = objc_retainAutoreleasedReturnValue((id)security_create_system_key_attestation(
                                                                (int)a1,
                                                                v158,
                                                                v318));
                v160 = objc_retain(v79);
                objc_release(v79);
                v312 = v159;
                v299 = v157;
                if ( v159 )
                {
                  v325 = v160;
                  if ( v316 )
                  {
                    v164 = v283;
                    -[__SecKey setObject:forKeyedSubscript:](
                      v283,
                      "setObject:forKeyedSubscript:",
                      v316,
                      CFSTR("RKCertification"));
                    -[__SecKey setObject:forKeyedSubscript:](
                      v283,
                      "setObject:forKeyedSubscript:",
                      v159,
                      CFSTR("RKSigning"));
                    v165 = off_100E52138;
                    v166 = v157;
                    v167 = v157;
                  }
                  else
                  {
                    v165 = off_100E51E10;
                    v167 = (CFDataRef)v159;
                    v164 = v283;
                    v166 = v157;
                  }
                  -[__SecKey setObject:forKeyedSubscript:](v164, "setObject:forKeyedSubscript:", v167, *v165);
                  v242 = objc_alloc((Class)&OBJC_CLASS___NSMutableDictionary);
                  v340[0] = CFSTR("UniqueChipID");
                  v340[1] = CFSTR("ChipID");
                  v341[0] = v34;
                  v341[1] = v282;
                  v340[2] = CFSTR("BoardId");
                  v340[3] = CFSTR("SecurityDomain");
                  v341[2] = v280;
                  v341[3] = v279;
                  v340[4] = CFSTR("SerialNumber");
                  v340[5] = CFSTR("OsBuildVersion");
                  v341[4] = v278;
                  v341[5] = v307;
                  v340[6] = CFSTR("scrtAttestation");
                  v340[7] = CFSTR("CertType");
                  v341[6] = v313;
                  v341[7] = v322;
                  v340[8] = CFSTR("Validity");
                  v340[9] = CFSTR("CACert");
                  v341[8] = v309;
                  v341[9] = v308;
                  v340[10] = CFSTR("OIDSToInclude");
                  v340[11] = CFSTR("SIKPub");
                  v341[10] = v13;
                  v341[11] = *(_QWORD *)v288;
                  v243 = objc_retainAutoreleasedReturnValue(
                           +[NSDictionary dictionaryWithObjects:forKeys:count:](
                             &OBJC_CLASS___NSDictionary,
                             "dictionaryWithObjects:forKeys:count:",
                             v341,
                             v340,
                             12));
                  v244 = objc_msgSend(v242, "initWithDictionary:", v243);
                  objc_release(v243);
                  v245 = off_100E52130;
                  if ( v316 )
                  {
                    objc_msgSend(v244, "setObject:forKeyedSubscript:", v320, CFSTR("RKCertificationPub"));
                    v245 = off_100E52138;
                  }
                  v35 = v286;
                  v246 = objc_msgSend(v244, "setObject:forKeyedSubscript:", v166, *v245);
                  if ( v286 )
                    v246 = objc_msgSend(v244, "setObject:forKeyedSubscript:", v286, CFSTR("UIKPub"));
                  v247 = objc_retainAutoreleasedReturnValue((id)IORegistryEntry_sub_10052290C(v246));
                  v314 = v244;
                  if ( !v247 )
                    goto LABEL_201;
                  v248 = v247;
                  if ( (sub_100C87330() & 1) != 0 )
                  {
                    objc_release(v248);
LABEL_201:
                    v302 = 0;
LABEL_207:
                    if ( v303 && (sub_100C87320() & 1) == 0 )
                    {
                      if ( (sub_100C87330() & 1) != 0 )
                      {
                        v301 = 0;
                      }
                      else
                      {
                        v329 = v325;
                        v255 = objc_retainAutoreleasedReturnValue((id)sub_100C75830(2, &v329));
                        v256 = objc_retain(v329);
                        objc_release(v325);
                        v301 = v255;
                        if ( !v255 )
                        {
                          v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                          (int)"create_baa_info",
                                                                          735,
                                                                          -1,
                                                                          v256,
                                                                          (int)CFSTR("Failed to load boot manifest."),
                                                                          v257,
                                                                          v258,
                                                                          v259,
                                                                          v275));
                          objc_release(v256);
                          v305 = 0;
                          v301 = 0;
LABEL_240:
                          v44 = 0;
                          v296 = 0;
                          v298 = 0;
                          goto LABEL_168;
                        }
                        objc_msgSend(v314, "setObject:forKeyedSubscript:", v255, CFSTR("Image4Manifest"));
                        v325 = v256;
                      }
                      v35 = v286;
                      v7 = *(id *)v288;
                      v34 = v281;
                    }
                    else
                    {
                      v301 = 0;
                    }
                    if ( (sub_100C87330() & 1) != 0 )
                    {
                      v305 = 0;
LABEL_221:
                      v4 = v292;
                      v266 = v306;
                      v72 = v283;
LABEL_222:
                      v33 = v282;
                      v262 = v325;
                      goto LABEL_223;
                    }
                    is_darwinos = os_variant_is_darwinos(objc_msgSend(CFSTR("com.apple.mobileactivationd"), "UTF8String"));
                    v305 = 0;
                    if ( !v297 )
                      goto LABEL_221;
                    if ( (is_darwinos & 1) != 0 )
                    {
                      v4 = v292;
                      v266 = v306;
                      v35 = v286;
                      v7 = *(id *)v288;
                      v72 = v283;
                      v34 = v281;
                      goto LABEL_222;
                    }
                    v328 = v325;
                    v261 = objc_retainAutoreleasedReturnValue((id)sub_100C75830(10, &v328));
                    v262 = objc_retain(v328);
                    objc_release(v325);
                    v305 = v261;
                    if ( v261 )
                    {
                      objc_msgSend(v314, "setObject:forKeyedSubscript:", v261, CFSTR("Cryptex1Image4Manifest"));
                      v4 = v292;
                      v266 = v306;
                      v35 = v286;
                      v7 = *(id *)v288;
                      v33 = v282;
                      v72 = v283;
                      v34 = v281;
LABEL_223:
                      v32 = v280;
                      if ( v310 )
                        objc_msgSend(v314, "setObject:forKeyedSubscript:", v310, CFSTR("AppID"));
                      if ( v311 )
                        objc_msgSend(v314, "setObject:forKeyedSubscript:", v311, CFSTR("MFiProperties"));
                      if ( v315 )
                        objc_msgSend(v314, "setObject:forKeyedSubscript:", v315, CFSTR("MFiPPUID"));
                      if ( v266 )
                        objc_msgSend(v314, "setObject:forKeyedSubscript:", v266, CFSTR("MFiData"));
                      v327 = 0;
                      v267 = objc_retainAutoreleasedReturnValue(
                               +[NSPropertyListSerialization dataWithPropertyList:format:options:error:](
                                 &OBJC_CLASS___NSPropertyListSerialization,
                                 "dataWithPropertyList:format:options:error:",
                                 v314,
                                 100,
                                 0,
                                 &v327));
                      v287 = objc_retain(v327);
                      objc_release(v262);
                      if ( v267 )
                      {
                        -[__SecKey setObject:forKeyedSubscript:](
                          v72,
                          "setObject:forKeyedSubscript:",
                          v267,
                          CFSTR("RKProperties"));
                        v298 = v267;
                        v271 = SecKeyCreateSignature(
                                 a1,
                                 kSecKeyAlgorithmECDSASignatureMessageX962SHA256,
                                 (CFDataRef)v267,
                                 &error);
                        v27 = v278;
                        if ( v271 )
                        {
                          v296 = v271;
                          -[__SecKey setObject:forKeyedSubscript:](
                            v72,
                            "setObject:forKeyedSubscript:",
                            v271,
                            CFSTR("RKPropertiesSignature"));
                          v44 = objc_retain(v72);
                          v324 = v287;
                        }
                        else
                        {
                          v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                          (int)"create_baa_info",
                                                                          810,
                                                                          -1,
                                                                          error,
                                                                          (int)CFSTR("Failed to sign data with ref key."),
                                                                          v272,
                                                                          v273,
                                                                          v274,
                                                                          v275));
                          objc_release(v287);
                          v44 = 0;
                          v296 = 0;
                        }
                        goto LABEL_133;
                      }
                      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                      (int)"create_baa_info",
                                                                      799,
                                                                      -1,
                                                                      v287,
                                                                      (int)CFSTR("Could not convert dictionary to xml data."),
                                                                      v268,
                                                                      v269,
                                                                      v270,
                                                                      v275));
                      objc_release(v287);
                      v44 = 0;
                      v296 = 0;
                      v298 = 0;
LABEL_170:
                      v27 = v278;
                      a1 = v279;
LABEL_171:
                      CFRelease(cf);
                      if ( v284 )
                        CFRelease(v284);
LABEL_173:
                      if ( v289 )
                        CFRelease(v289);
                      v205 = v294;
                      if ( !v294 )
                        goto LABEL_177;
                      goto LABEL_176;
                    }
                    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                    (int)"create_baa_info",
                                                                    770,
                                                                    -1,
                                                                    v262,
                                                                    (int)CFSTR("Failed to load cryptex1 manifest."),
                                                                    v263,
                                                                    v264,
                                                                    v265,
                                                                    v275));
                    objc_release(v262);
                    v305 = 0;
                    goto LABEL_240;
                  }
                  v249 = os_variant_is_darwinos(objc_msgSend(CFSTR("com.apple.mobileactivationd"), "UTF8String"));
                  objc_release(v248);
                  if ( (v249 & 1) != 0 )
                  {
                    v302 = 0;
LABEL_206:
                    v34 = v281;
                    goto LABEL_207;
                  }
                  v330[0] = v160;
                  v250 = objc_retainAutoreleasedReturnValue((id)sub_100C75830(9, v330));
                  v251 = objc_retain(v330[0]);
                  objc_release(v160);
                  v302 = v250;
                  if ( v250 )
                  {
                    objc_msgSend(v244, "setObject:forKeyedSubscript:", v250, CFSTR("LocalPolicy"));
                    v325 = v251;
                    v35 = v286;
                    v7 = *(id *)v288;
                    goto LABEL_206;
                  }
                  v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                  (int)"create_baa_info",
                                                                  719,
                                                                  -1,
                                                                  v251,
                                                                  (int)CFSTR("Failed to load cryptex1 local policy."),
                                                                  v252,
                                                                  v253,
                                                                  v254,
                                                                  v275));
                  objc_release(v251);
                  v305 = 0;
                  v301 = 0;
                  v44 = 0;
                  v296 = 0;
                  v298 = 0;
LABEL_167:
                  v302 = 0;
LABEL_168:
                  v4 = v292;
                  v7 = *(id *)v288;
LABEL_169:
                  v35 = v286;
                  v33 = v282;
                  v72 = v283;
                  v32 = v280;
                  v34 = v281;
                  goto LABEL_170;
                }
                v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                (int)"create_baa_info",
                                                                637,
                                                                -1,
                                                                v160,
                                                                (int)CFSTR("Failed to create reference key attestation (nonce: %@)."),
                                                                v161,
                                                                v162,
                                                                v163,
                                                                (char)v318));
                objc_release(v160);
                v305 = 0;
                v301 = 0;
                v44 = 0;
                v314 = 0;
                v296 = 0;
                v298 = 0;
                v312 = 0;
              }
              else
              {
                v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                                (int)"create_baa_info",
                                                                628,
                                                                -1,
                                                                0,
                                                                (int)CFSTR("Failed to encode RK public key as data."),
                                                                v154,
                                                                v155,
                                                                v156,
                                                                v275));
                objc_release(v79);
                v305 = 0;
                v301 = 0;
                v44 = 0;
                v314 = 0;
                v296 = 0;
                v298 = 0;
                v312 = 0;
                v299 = 0;
              }
              v302 = 0;
              v4 = v292;
              goto LABEL_169;
            }
            v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                            (int)"create_baa_info",
                                                            622,
                                                            -1,
                                                            0,
                                                            (int)CFSTR("Failed to copy RK public key."),
                                                            v150,
                                                            v151,
                                                            v152,
                                                            v275));
            objc_release(v79);
            v305 = 0;
            v301 = 0;
            v44 = 0;
          }
          else
          {
            v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                            (int)"create_baa_info",
                                                            612,
                                                            -1,
                                                            v79,
                                                            (int)CFSTR("Failed to retrieve %@."),
                                                            v146,
                                                            v147,
                                                            v148,
                                                            (char)CFSTR("BuildVersion")));
            objc_release(v79);
            v305 = 0;
            v301 = 0;
          }
          v314 = 0;
          v296 = 0;
          v298 = 0;
          v312 = 0;
          v299 = 0;
        }
        else
        {
          v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                          (int)"create_baa_info",
                                                          606,
                                                          -1,
                                                          0,
                                                          (int)CFSTR("Failed to retrieve %@."),
                                                          v141,
                                                          v142,
                                                          v143,
                                                          (char)CFSTR("SerialNumber")));
          objc_release(v79);
          v305 = 0;
          v301 = 0;
          v44 = 0;
          v314 = 0;
          v296 = 0;
          v298 = 0;
          v312 = 0;
          v299 = 0;
          v307 = 0;
        }
        v290 = 0;
        goto LABEL_167;
      }
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      582,
                                                      -1,
                                                      0,
                                                      (int)CFSTR("Failed to retrieve %@."),
                                                      v117,
                                                      v118,
                                                      v119,
                                                      (char)CFSTR("UniqueChipID")));
      objc_release(v79);
      v305 = 0;
      v301 = 0;
      v44 = 0;
      v314 = 0;
      v296 = 0;
      v298 = 0;
      v312 = 0;
      v299 = 0;
    }
    else
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      543,
                                                      -4,
                                                      0,
                                                      (int)CFSTR("UCRT is unavailable."),
                                                      v112,
                                                      v113,
                                                      v114,
                                                      v275));
      objc_release(v79);
      v305 = 0;
      v301 = 0;
      v44 = 0;
      v314 = 0;
      v296 = 0;
      v298 = 0;
      v312 = 0;
      v299 = 0;
      v34 = 0;
    }
    v33 = 0;
    v32 = 0;
    a1 = 0;
    v27 = 0;
    v307 = 0;
    v290 = 0;
    v302 = 0;
    v4 = v292;
    v35 = v286;
    v7 = *(id *)v288;
    v72 = v283;
    goto LABEL_171;
  }
  if ( -[NSNumber boolValue](v41, "boolValue") )
    v43 = 0;
  else
    v43 = 2;
  v334[2] = 0;
  v44 = (__SecKey *)objc_retainAutoreleasedReturnValue((id)security_create_system_key_attestation((int)a1, v43, v38));
  v48 = objc_retain(0);
  if ( !v44 )
  {
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    477,
                                                    -1,
                                                    v48,
                                                    (int)CFSTR("Failed to create reference key attestation."),
                                                    v45,
                                                    v46,
                                                    v47,
                                                    v275));
    objc_release(v48);
    v302 = 0;
    v31 = 0;
    v307 = 0;
    v27 = 0;
    a1 = 0;
    v32 = 0;
    v33 = 0;
    v34 = 0;
    v298 = 0;
    v299 = 0;
    v35 = 0;
    v7 = 0;
    v316 = 0;
    v296 = 0;
    v312 = 0;
    v314 = 0;
    goto LABEL_47;
  }
  v316 = v44;
  v49 = SecKeyCopyPublicKey(a1);
  if ( !v49 )
  {
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    483,
                                                    -1,
                                                    0,
                                                    (int)CFSTR("Failed to copy RK public key."),
                                                    v50,
                                                    v51,
                                                    v52,
                                                    v275));
    objc_release(v48);
    v302 = 0;
    v31 = 0;
    v307 = 0;
    v27 = 0;
    a1 = 0;
    goto LABEL_45;
  }
  v294 = v49;
  v53 = SecKeyCopyExternalRepresentation(v49, &error);
  objc_release(v320);
  if ( v53 )
  {
    v57 = SecAccessControlCreate(0, &error);
    if ( v57 )
    {
      v61 = kSecAttrAccessibleUntilReboot;
      v62 = v57;
      v291 = (const void *)v57;
      if ( (SecAccessControlSetProtection(v57, kSecAttrAccessibleUntilReboot, &error) & 1) != 0 )
      {
        v334[1] = v48;
        v66 = (__SecKey *)sub_100C6E934(v62, v40, v4);
        v42 = objc_retain(v48);
        objc_release(v48);
        if ( v66 )
        {
          v320 = v53;
          a1 = v66;
          v289 = v66;
          v37 = v316;
          goto LABEL_49;
        }
        v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                        (int)"create_baa_info",
                                                        508,
                                                        -1,
                                                        v42,
                                                        (int)CFSTR("Failed to create reference key."),
                                                        v67,
                                                        v68,
                                                        v69,
                                                        v275));
        v48 = v42;
      }
      else
      {
        v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                        (int)"create_baa_info",
                                                        502,
                                                        -1,
                                                        error,
                                                        (int)CFSTR("Failed to set ACL protection to %@."),
                                                        v63,
                                                        v64,
                                                        v65,
                                                        v61));
      }
    }
    else
    {
      v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                      (int)"create_baa_info",
                                                      497,
                                                      -1,
                                                      error,
                                                      (int)CFSTR("Failed to create access control."),
                                                      v58,
                                                      v59,
                                                      v60,
                                                      v275));
      v291 = 0;
    }
    v320 = v53;
  }
  else
  {
    v324 = objc_retainAutoreleasedReturnValue((id)com_apple_MobileActivation_ErrorDomain(
                                                    (int)"create_baa_info",
                                                    489,
                                                    -1,
                                                    error,
                                                    (int)CFSTR("Failed to encode RK public key as data."),
                                                    v54,
                                                    v55,
                                                    v56,
                                                    v275));
    v320 = 0;
    v291 = 0;
  }
  objc_release(v48);
  v302 = 0;
  v305 = 0;
  v301 = 0;
  v72 = 0;
  v44 = 0;
  v314 = 0;
  v296 = 0;
  v298 = 0;
  v312 = 0;
  v7 = 0;
  v35 = 0;
  v299 = 0;
  v34 = 0;
  v33 = 0;
  v32 = 0;
  a1 = 0;
  v27 = 0;
  v307 = 0;
  v290 = 0;
  v205 = v294;
LABEL_176:
  CFRelease(v205);
LABEL_177:
  if ( v290 )
    CFRelease(v290);
  v31 = v291;
LABEL_180:
  if ( error )
  {
    v295 = v44;
    v230 = v27;
    v231 = a1;
    v232 = v32;
    v233 = v4;
    v234 = v33;
    v235 = v34;
    v236 = v72;
    v237 = v35;
    v238 = v7;
    v239 = v31;
    CFRelease(error);
    v31 = v239;
    v7 = v238;
    v35 = v237;
    v72 = v236;
    v34 = v235;
    v33 = v234;
    v4 = v233;
    v32 = v232;
    a1 = v231;
    v27 = v230;
    v44 = v295;
  }
  error = 0;
  if ( v31 )
    CFRelease(v31);
  if ( a3 && !v44 )
    *a3 = objc_retainAutorelease(v324);
  v240 = objc_retain(v44);
  objc_release(v302);
  objc_release(v324);
  objc_release(v306);
  objc_release(v315);
  objc_release(v300);
  objc_release(v311);
  objc_release(v310);
  objc_release(v322);
  objc_release(v313);
  objc_release(v308);
  objc_release(v309);
  objc_release(v318);
  objc_release(v321);
  objc_release(v307);
  objc_release(v27);
  objc_release(a1);
  objc_release(v32);
  objc_release(v33);
  objc_release(v34);
  objc_release(v299);
  objc_release(v35);
  objc_release(v7);
  objc_release(v320);
  objc_release(v316);
  objc_release(v296);
  objc_release(v312);
  objc_release(v298);
  objc_release(v314);
  objc_release(v240);
  objc_release(v72);
  objc_release(v301);
  objc_release(v319);
  objc_release(v305);
  objc_release(v4);
  if ( ((vars8 ^ (2 * vars8)) & 0x4000000000000000LL) != 0 )
    __break(0xC471u);
  v241 = objc_autoreleaseReturnValue(v240);
}
  • 采集验签证书

用 SE 里封装的密钥 + 苹果预置的证书链,生成了一份 attestation(证明)blob,这个 blob 里面带着证书和签名,对“某些设备硬件字段 + 公钥”做了绑定。

这个“证书/attestation blob”是 依赖安全硬件(Secure Enclave / Apple KeyStore)生成的,而且签名覆盖了与这台硬件绑定的一些信息。

格式如下:

SEQUENCE
  INTEGER 02
  SEQUENCE
    OCTETSTRING xxxxdeca90b4fd52da1c016730a81dcb281f6c4dbb973e6b8438e6827530a177
    OCTETSTRING xxxx980ea0e8b0211cc342dc42067f1b..(total 65bytes)..2c8c482afb33b9e84221b49ffd1d81fa
    OCTETSTRING xxxx730da8259089a9b9b02bd4a455fd
    OCTETSTRING xxxxce59b8232b317ff32beb21237051
    OCTETSTRING xxxx56c0b70138d40071067ee100013f..(total 1074bytes)..4b70f5283c1085f6a8d25107d6b9a94b
  • 上报激活信息

将采集的硬件信息与证书签名信信息组合成 plist格式数据上报到服务器端

  • Headers
        0 : User-Agent = {contents = "iOS Device Activator (MobileActivation-834.100.27) - devicecheckd"}
        3 : Content-Type = {contents = "application/xml"}
        4 : Content-Length = 9822
        6 : x-jmet-deviceid = {contents = "00008110-303C30C91A06484E"}
}
  • body
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>RKCertification</key>
        <data>
        MIIExQIBAjxxxxxxxxP4C3sqQtP1S2hwBZzCoHcsoH2xNu5c+a4Q45oJ1MKF3BEEEiTxl
        3JiRx7vW49DhREeRVU04QQBLnB7Lm7nI8+D2ayS/PMZ7rcmhC89px3xHSlAvDl2MQopT
        SHXxnC/0Bs/6KgQQ1SciqWRdHp3U/vxi/S1O/wQQNpOm/5v25ojsX99XACzgpwSCBDHO
        l9izvodcLU0pQSlaNXHlIp7nMLqh/QkyEI+a/YlGFaqTR/PgZbq4o37Rw6SCZQ+MjU2F
        uzuq9O6sTaKVBcw4aDW0oPDmZgH5m1ZlDwvUqQFAy+OvNrO8L4D4zSo2lW8BRqR89jkx
        WAixq12iERj/4+orIFAFGG86P/PnRRUsC8uR1tkqM4NpjXiLNUlO/X7VF1iY7g3nf5JS
        uxAqGMNZ8eEXXHJ9I5XuPDC/B1BvpoM/Pk65CPRbaw5ojMr+McZ+IsuWQBb21dxMldAy
        MMg5sFEt5+uIqWFaVyjFMfFCqYTfSofsyFQO8woaPegrmqFBVJRTGbbPkEDEVaWgLprd
        VuoE8hkSvecWaBwsyNH0UmTLMOwrMHF12RLVPc6qChr4ki0FkIP9crLHhQwxVYeXgRpA
        ClcA6uNFFa412RdhRhv5T88NBVRNu9ewCm3gWBnhMF10PltNVGJ1ZRjhZS0ghaVnqHpj
        DA+2pnObaocLzgC9bOl0RExDwVwxLp7/hD/0jqZ+GqGSPgXYGY3FxnIB9n1e35KNjWaV
        ur1WgHps5TEdi9LHxur2iqv5IkmxXNojxUoWprRc36RCBkurDLJiCM6Es8/63z1mZQ9h
        a4iA5+u0PStVpCSjOJ/0gn01pIxxxeppomCsT6980+l1HYi7zsD/tBkOznpFwGS5Ki9h
        RErTaCc2/9YGjgWVOBv1w5dEnBnwb1P59Qgpmnx3k9eyczaxt3OXOnKVwzYKtowI0OeD
        F9jM1yN9KZVtAqQJM4H8N+W3f0w8x+PwYHUf/0AHdAK/WyUHObDkoPzZOY+N7aFvkSf8
        aVcxC5MMCM6YFGpeDN9yoroti2mxxxelwDYx7Q8wuIeBBDiJfHRMWXxQEbej2XoYxGs4
        tz8Qh0z5p0kL5bb5MERKHPkaIg+slVxEpoCAxCnNHiTHjK3gEXhgyxkiBmLO4ENSGDTp
        +5PX64sez9Sb95ua6PhFFJYRXFgnp2IqffOoxx9Pxtxf7aKvpmlhPu+YGfbpz+mF+BSQ
        Y0a/ybU0xySRCKfTlepT8J+3HGNGl6HmjKPMDgj1SIloAoNR+VATnMs0THe7ZZTYLI+m
        bghSAHqDcjZCOWbRp19gSbUz71WU/sDAbN477biemxOYszVzS6cckGmmoDSLuav8RCSH
        9h254xTGB5VzEjT5lqpsWJ0u+IJUW7gfCbkq1IGer5PdmVrzAluNTS4G85iHnXi3EKJB
        wJ1upCRMjwlQRFlKP/SDo1TTQUa1kX0x+o1bFjvroyNKq+wL56PRQex22FzN00gsursF
        dstdB+WPHde2jfeVmielZ+wxw59wEuE2CLeS5D1CLIEGYgsTyoLxl6QQ80UjaphhAuVA
        A7HqcmXNe/6AOGdL42LHUhF23K5Fd55i8yaJP0sMwzY1e3nPbeunZmIiL1KiAFcKLzpm
        cg==
        </data>
        <key>RKProperties</key>
        <data>
        ff94bfwgfmVyc2lvbjxxxxxwIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs
        aXN0IFBVQkxJQyAiLSxxxxxwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3
        dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJz
        aW9uPSIxLjAiPgo8ZGljdD4KCTxrZXk+QXBwSUQ8L2tleT4KCTxzdHJpbmc+Y29tLmFw
        cGxlLmRldmljZWNoZWNrZDwvf3RyaW5nPgoJPGtleT5Cb2FyZElkPC9rZXk+Cgk8aW50
        ZWdlcj4yNDwvaW50ZWdlcj4KffxrZXk+QfFfZXffPC9rZXk+Cgk8aW50ZWdlcj4wPC9p
        bnRlZ2VyPgoJPGtleT5DZXJ0VHlwZTwva2V5PgoJPGludGVnZXI+MDwvaW50ZWdlcj4K
        CTxrZXk+Q2hpcElEPC9rZXk+Cgk8aW50ZWdlcj4zMzA0MDwvaW50ZWdlcj4KCTxrZXk+
        TG9jYWxQb2xpY3k8L2tleT4KCTxkYXRhPgoJTUlJTVFCWUVTVTFITkRBVUZnUkpUVFJR
        RmdSc2NHOXNGZ014TGpBRUFRQ2dnZfdfTUfJfUhCWUVTVTAwVFFJQkFER0MKCUFpUC9o
        T3FGbkVLQ0Fob3dnZ0lXRmdSTlFxxUNNWUlDRFArRTZvV2NVSUlCbnpDQ0Fac1dCRTFC
        VGxBeGdnR1IvNFNTCgl2YVJFQ3pBSkZnUkNUMUpFQWdFWS80U2FsYUJQQ3pBSkZnUkRS
        VkJQQWdFQi80U2FvWkpRRFRBTEZnUkRTRWxRQWdNQQoJZ1JEL2hKckJwRThMTUFrV0JF
        TlFVazhCQWYvL2hKck5pa01MTUFrV0JFTlRxVU1CQfWYvL2hLcU5ra1FSTUE4V0JFVkQK
        CVNVUUNCeGhwb2p3Z0lCNy9oWnFSbmswTE1Ba1dCRk5FVDAwQ0FRSC9odU85eEc4TE1B
        a1dCR3h2WW04QkFmLy9odlBOCgkwbWc2TURnV0JHNXphV2dFTUlQc0gwYlAybmtaaDNo
        NVF3U2RXUU1CL0NoekZrWlMyczE0SxlWxnJTdDZwR2RlaDIvSgoJd3VnR2V4dFU5cWNm
        Uy8rSGs3M2NhQ293S0JZRWNtOXVhQVFnU2srUmVVVnd1QWlCeEw0cWM5WmlZZUFFQ3Y1
        OVN2dmwKCXk4SWhTM2ZaK2k3L2g1dkIwbWc2TURnV0JITndhV2dFTUo3V1ZSSWhWNU13
        ZXlXa2VHdVo5STVSbUFSNGQycm9aZnFQCglmOE92aXljRkFjUEs0cHJDUXVTN3BSa3lB
        WDQxVi8rSG04bnNiaDR3SEJZRWMzSjJiZ1FVRzIrWkp3aXFselVHSUkzQQoJVmZMcklJ
        L3RkMGYvaDdQVjBtUWFNQmdXQkhaMWFXUUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBRC9o
        dVBCM214ZE1Gc1cKCUJHeHdiMnd4VS8rRW9wMm1WRG93T0JZRVJFZFRWQVF3MFFGVU9N
        U29rWEtqQkkxZXJyeXkzbVYzZGNacStHaVJhcWVXCglHUUk5Z29haFJoREhKZVNSem1m
        MERMMVl0M2h5LzRTcXJZcFpDekFKRmdSRlMwVlpBUUgvQklJQ0FFRmdqK1krQkpheAoJ
        MU1jS3dGQkdFMHpvcElKZkJWY2dKcG5MeDV2MFA2L1VsbG1jWmZYcnVYK2t1K2xRYm9H
        UXBkQ3ZZcnp6K3l4bXVjS00KCWtDOXlJdlpzMndjMldrMzdDeHl4a1lXZ2UvckZmSERC
        WFpQS3hTc1hIRFpkVXVjanFQbGlqVkJGV1pXekJjc0hQd2M3CgkyOFJUcTNWQU9aeG0x
        RXo3RVFlVHRmUDFocDN0WEdic0xaMlZ0aVcyWG12VDFDeCsvajNCbnhnNGNtQy9EUjJW
        SmpZaQoJUUx2V0dJSTNSVUY5cUEwL3BBeGcvQ3JCeXI4Zkx3Uk5QV2haOGMwRW04eVhi
        U2MxZ1h2K0NlUnJJcVBNZXFWU1o3cGoKCXdGamlhTWlwRXEwRUJhQkcyOG9xNkNCZE9E
        K1ZDUWxYSzBNOEdqUXZXc3FpcS9UVDRlQkVGV0NQTzRKLzU2bzE4WkxpCgk5OFdZaTQy
        RVBLb0RHM0ZyTFhreWNWR0E0QTdnVlhIczBnS25TeWJEKzZmYlk0SGF5cWtpUEM4ZHl1
        QWlUNXF5WThwUwoJdVp5TTY5aEs4dEJleFpiWDdiOFdEd29HVElzd3RST0d1SGZJbEpS
        bXBIVXF2YnRUcWs4Qk42cFBwaHlNMlJqb1p4QmgKCXlBdzdEQ0M5Y0tuTkpnamhQTE91
        aFRaUlU0aCtqMXo5WnY2UmdpSU44L21wTkxZV2pNMmtFWEw1eVRKbVhYVnBOcThICgll
        UGx5VUF4TnF6dkFLVFpZQjMrODROOFF4ekF4bVk4eFFBcUpVb1ROWWVZSjZnSWZXcnFM
        VktsRFdDcy9kUE5kc2xndwoJNHN4ci9xS09kcDI1cm5ST1hyK21Kc080Qm4rNkI2Vmhm
        WndWWnpmT2VkN0toZ3dMaGxrSXRYY25UbEN0TUlJSDVEQ0MKCUIrQXdnZ1hJb0FNQ0FR
        SUNFRDM5ajV5cU5WOXZVQ0xzTjAyRWRCOHdEUVlKS29aSWh2Y05BUUVNQlFBd1N6RW5N
        Q1VHCglBMVVFQXd3ZVFYQndiR1VnVTJWamRYSmxJRUp2YjNRZ1VtOXZkQ0JEUVNBdElF
        YzJNUk13RVFZRFZRUUtEQXBCY0hCcwoJWlNCSmJtTXVNUXN3Q1FZRFZRUUdFd0pWVXpB
        ZUZ3MHlNREEzTWpJeE9EQTJORGhhRncwek1EQTNNak14T0RBMk5EaGEKCU1GSXhMakFz
        QmdOVkJBTU1KVlE0TVRFd0xWTkVUMDB4TFZKbFkyOTJaWEo1UW05dmRDMVNaWFpCTFVa
        aFkzUnZjbmt4CglFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlU
        QWxWVE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRgoJQUFPQ0FnOEFNSUlDQ2dLQ0FnRUF5
        aVFHMk1leXZJeFlCQThJdis1bVd0cG83SHJ6ZUdvdU1sSlR1SHFqbmNUYzdDVEYKCUlp
        WlUvT1RMaVRoT2FsdS85L29rQnBqY2MyY0hVdXV6NFlMeUhRYkNFYzllam5MdTFhY2lY
        Q3MvVHZaZmoyTFpScnZsCgk4Tk1xaTBrNUE5RHlUVGxzYnZWRDhXQmdIZ3VUN2MySjh2
        N0tpUnM5MkZUWjZ6OGROK0ZPa1VjM3dTUnRiOFBaQ2QrWgoJREdXblpDYzZyZFlkOFRJ
        WDhNK0dCYzhGeUVEaXFhUmNONmpNNzJkRkRDL0NCQjZxcmFKZDlEQ1VzRTdDVXJ5Zk02
        VWYKCXpqbVNyTGNnSkZYSjhZK3k0N2VjaGcrY2RDTytOQThBYjQzL2E1N0xJaTBtT0JI
        V2FIUytHTkExR3c3WkpqdHdNQXcvCgllbW9heXVNYXB6d1RlRjFNTW1qKzNTa0h2WEdT
        T0JtcU5SYVBoT2hRd1p3bkpsaEhpSkNzaVl1dWJ3N3Bxa0MycytiYgoJekx3MkxNakEy
        UUppQWdDOHJmU3VYb2RUT2EzRkxhK1RmSlJ4TjhoL3p2aEU5Wmk0RDNBeC8xQ2dBS1Qx
        bTNXT3JtQ1AKCURVZDZKOXZ5c3plTWdlZ3RTWldHdU9oL1o1OGFDR1lROTFoMVdpYSt5
        VHdvU1J4c1lYdTR5ZldkT0ZlelpYQjlzMmFqCglWUEFRKzI2eE8xWlRsR29CWXVHcU1y
        TGEvaUV5S1J1UHpzZDVzcC9uU29wdE43dDQwS0h5Uy9KL1luT2RoZTltREdqUwoJMTZE
        aFJBSjRWdHBubDFmeHhubFdNcXpJeUNTMWxtTDdWeWxMdkF1YkpKZTF6MGtaTm9CNWln
        SFB5Q3V2ZW5FUVpSVkQKCUlBcFJ5YlpqSk9Pc1FoVUY3dGFYVUQwQ0F3RUFBYU9DQXJj
        d2dnS3pNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqCglCQmd3Rm9BVVU3ZUV0TEhv
        T0R5Vzc2UldMdm96M1BFUWtPQXdIUVlxxlIwT0JCWUVGRlhYTkNqTWlaMzlYVFlGU3B0
        TgoJTXFNRlNwcWNNQTRHQTFVZER3RUIvd1FFQXdJSGdEQ0NBbEVHQ2lxR1NJYjNZMlFH
        QVE4QkFmOEVnZ0krTVlJQ092K0UKCTZvV2NVSUlCd1RDQ0FiMFdCRTFCVGxBeGdnR3ov
        NFNTdVlaSUREQUtGZ1JDVGtOSW9RSUZBUCtFa3Iya1JBd3dDaFlFCglRazlTUktBQ0JR
        RC9oSnFWb0U4TE1Ba1dCRU5GVUU4Q0FRSC9oSnFoa2xBTk1Bc1dCRU5JU1ZBQ0F3Q0JF
        UCtFbXNHawoJVHd3d0NoWUVRMUJTVDZBQ0JxRCxxSnJxxWtNTU1Bb1dCRU5UUlVPZ0Fn
        VUEvNFNxalpKRUREQUtGZ1JGUTBsRW9BSUYKCUFQK0ZtcEdlVFFzd0NSWUVVMFJQVFFJ
        QkFmK0dpOVh3YVF3d0NoWUVZWFY0YWFFQ0JRRC9ob3ZWOEhBTU1Bb1dCR0YxCgllSENo
        QWdVQS80Ymp2Y1J2Q3pBSkZnUnNiMkp2QVFILy80Ymp3ZHhvRERBS0ZnUnNjRzVvb1FJ
        RkFQK0c4ODNTYUF3dwoJQ2hZRWJxxxBxS0FDQlFEL2g1TzkzR2dNTUFvV0JISnZibWln
        QWdVQS80ZVR3ZHhvRERBS0ZnUnljRzVvb1FJRkFQK0gKCW02WGdNQXd3Q2hZRWMybHdN
        S0VDQlFEL2g1dWw0REVNTUFvV0JITnBjREdoQWdVQS80ZWJwZUF5RERBS0ZnUnphWEF5
        CglvUUlGQVArSG02WGdNd3d3Q2hZRWMybHdNNkVDQlFEL2g1dTF4REFNTUFvV0JITnRZ
        akNoQWdVQS80ZWJ0Y1F4RERBSwoJRmdSemJXSXhvUUlGQVArSG03WEVNZ3d3Q2hZRWMy