23

Finding Kernel Symbols for async_wake_ios

solve a framework-in-framework code signing issues

Finding Kernel Symbols for async_wake_ios

The hint is too obscure to understand. With the help of [Hunting for ios Kernel Symbols] I can manage to get some, but for the rest of missing symbols, that article is still as obscure as the hint itself. But I don’t know how to search references to FPCR (Floating-point Control Register) for KSYMBOL_X21_JOP_GADGET.

Thanks to the author, it gives a clue that to use kernel cache and comparison directly to find symbols. So I downloaded iPhone 7’s 11.1.2 kernel cache, jump to the symbol address, and try to understand the asm code footprints. Then I can switch to 11.1.1 kernel image, and try to search for the same footprints, and it works. The asm code kept the same, except for those offsets. So here I am publishing some that are hard to search.

You can just try search the asm code like *add *x0, *x0. The idea is to first calculate the missing symbol address in 11.1.2 with the closest address of other known symbols, and do a simple math the same way in 11.1.1, and try to search the asm code that can uniquely identify the symbol address. In IDA’s searching results, you can look for the address that’s close to your calculation. It almost the right one with the closest address, and you can still compare the asm code snippet if you are not sure.

// ip7 11.1.2 (ksymbols_iphone_7_15B202)
KYSMBOL_RET:  FFFFFFF0074D74D4
__text:FFFFFFF0074D74CC ; __int64 __fastcall OSArray::getMetaClass(OSArray *__hidden this)
__text:FFFFFFF0074D74CC                 EXPORT __ZNK7OSArray12getMetaClassEv
__text:FFFFFFF0074D74CC __ZNK7OSArray12getMetaClassEv           ; DATA XREF: __const:FFFFFFF0070B3530↑o
__text:FFFFFFF0074D74CC                 ADRP            X0, #__ZN7OSArray10gMetaClassE@PAGE ; OSArray::gMetaClass
__text:FFFFFFF0074D74D0                 ADD             X0, X0, #__ZN7OSArray10gMetaClassE@PAGEOFF ; OSArray::gMetaClass
__text:FFFFFFF0074D74D4                 RET
__text:FFFFFFF0074D74D4 ; End of function OSArray::getMetaClass(void)
 
 
 
KSYMBOL_X21_JOP_GADGET: 0xfffffff0070cc1ac
__text:FFFFFFF0070CC188                 MRS             X20, #0, c6, c0, #0
__text:FFFFFFF0070CC18C                 MRS             X21, #0, c5, c2, #0
__text:FFFFFFF0070CC190                 STR             X20, [X0,#0x118]
__text:FFFFFFF0070CC194                 STR             W21, [X0,#0x120]
__text:FFFFFFF0070CC198                 LDR             W21, [X0,#0x110]
__text:FFFFFFF0070CC19C                 AND             X21, X21, #0xC
__text:FFFFFFF0070CC1A0                 CMP             X21, #0
__text:FFFFFFF0070CC1A4                 B.NE            loc_FFFFFFF0070CC1AC
__text:FFFFFFF0070CC1A8                 MOV             X30, #0
__text:FFFFFFF0070CC1AC
__text:FFFFFFF0070CC1AC loc_FFFFFFF0070CC1AC                    ; CODE XREF: sub_FFFFFFF0070CC0F0+B4↑j
__text:FFFFFFF0070CC1AC                 MOV             X21, X0
__text:FFFFFFF0070CC1B0                 MOV             X22, X1
__text:FFFFFFF0070CC1B4                 BR              X22
 
 
KSYMBOL_EL1_HW_BP_INFINITE_LOOP 0xfffffff0071de074:
__text:FFFFFFF0071DE068                 AND             W8, W20, #0x3F ; jumptable FFFFFFF0071DDF60 case 49
__text:FFFFFFF0071DE06C                 CMP             W8, #0x22
__text:FFFFFFF0071DE070                 B.NE            loc_FFFFFFF0071DE9EC
__text:FFFFFFF0071DE074
__text:FFFFFFF0071DE074 loc_FFFFFFF0071DE074                    ; CODE XREF: __text:loc_FFFFFFF0071DE074↓j
__text:FFFFFFF0071DE074                 B               loc_FFFFFFF0071DE074
 
 
 
KSYMBOL_SLEH_SYNC_EPILOG 0xfffffff0071dea24
__text:FFFFFFF0071DEA20                 CBNZ            X8, loc_FFFFFFF0071DF074
__text:FFFFFFF0071DEA24                 LDP             X29, X30, [SP,#0x130]
__text:FFFFFFF0071DEA28                 LDP             X20, X19, [SP,#0x120]
__text:FFFFFFF0071DEA2C                 LDP             X22, X21, [SP,#0x110]
__text:FFFFFFF0071DEA30                 LDP             X24, X23, [SP,#0x100]
__text:FFFFFFF0071DEA34                 LDP             X26, X25, [SP,#0xF0]
__text:FFFFFFF0071DEA38                 LDP             X28, X27, [SP,#0xE0]
__text:FFFFFFF0071DEA3C                 ADD             SP, SP, #0x140
 
 
 
 KSYMBOL_VALID_LINK_REGISTER  0xfffffff0070cc1d4
 __text:FFFFFFF0070CC1B8 sub_FFFFFFF0070CC1B8                    ; DATA XREF: sub_FFFFFFF0070CB000+64↑o
__text:FFFFFFF0070CC1B8                                         ; sub_FFFFFFF0070CB000+68↑o ...
__text:FFFFFFF0070CC1B8
__text:FFFFFFF0070CC1B8 var_10          = -0x10
__text:FFFFFFF0070CC1B8
__text:FFFFFFF0070CC1B8                 MRS             X1, #0, c5, c2, #0
__text:FFFFFFF0070CC1BC                 MRS             X2, #0, c6, c0, #0
__text:FFFFFFF0070CC1C0                 AND             W3, W1, #0xFC000000
__text:FFFFFFF0070CC1C4                 LSR             W3, W3, #0x1A
__text:FFFFFFF0070CC1C8                 MOV             W4, #0x21
__text:FFFFFFF0070CC1CC                 CMP             W3, W4
__text:FFFFFFF0070CC1D0                 B.EQ            loc_FFFFFFF0070CC1EC
__text:FFFFFFF0070CC1D4
__text:FFFFFFF0070CC1D4 loc_FFFFFFF0070CC1D4                    ; CODE XREF: sub_FFFFFFF0070CC1B8+38↓j
__text:FFFFFFF0070CC1D4                 STP             X29, X30, [SP,#var_10]!
 
 
KSYMBOL_EXCEPTION_RETURN   0xfffffff0070cc474
__text:FFFFFFF0070CC474                 MSR             #6, #3
__text:FFFFFFF0070CC478                 MRS             X3, #0, c13, c0, #4
__text:FFFFFFF0070CC47C                 MOV             SP, X21
__text:FFFFFFF0070CC480                 LDR             X0, [X3,#0x448]
__text:FFFFFFF0070CC484                 STR             X0, [SP,#arg_98]
__text:FFFFFFF0070CC488                 LDR             X0, [SP,#arg_108]
__text:FFFFFFF0070CC48C                 LDR             W1, [SP,#arg_110]
__text:FFFFFFF0070CC490                 LDR             W2, [SP,#arg_340]
__text:FFFFFFF0070CC494                 LDR             W3, [SP,#arg_344]
__text:FFFFFFF0070CC498                 MSR             #0, c4, c0, #1, X0
__text:FFFFFFF0070CC49C                 MSR             #0, c4, c0, #0, X1
__text:FFFFFFF0070CC4A0                 MSR             #3, c4, c4, #1, X2
__text:FFFFFFF0070CC4A4                 MSR             #3, c4, c4, #0, X3
__text:FFFFFFF0070CC4A8                 MOV             X0, SP
__text:FFFFFFF0070CC4AC                 LDP             Q0, Q1, [X0,#arg_140]
__text:FFFFFFF0070CC4B0                 LDP             Q2, Q3, [X0,#arg_160]
__text:FFFFFFF0070CC4B4                 LDP             Q4, Q5, [X0,#arg_180]
__text:FFFFFFF0070CC4B8                 LDP             Q6, Q7, [X0,#arg_1A0]
__text:FFFFFFF0070CC4BC                 LDP             Q8, Q9, [X0,#arg_1C0]
__text:FFFFFFF0070CC4C0                 LDP             Q10, Q11, [X0,#arg_1E0]
__text:FFFFFFF0070CC4C4                 LDP             Q12, Q13, [X0,#arg_200]
__text:FFFFFFF0070CC4C8                 LDP             Q14, Q15, [X0,#arg_220]
__text:FFFFFFF0070CC4CC                 LDP             Q16, Q17, [X0,#arg_240]
__text:FFFFFFF0070CC4D0                 LDP             Q18, Q19, [X0,#arg_260]
__text:FFFFFFF0070CC4D4                 LDP             Q20, Q21, [X0,#arg_280]
__text:FFFFFFF0070CC4D8                 LDP             Q22, Q23, [X0,#arg_2A0]
__text:FFFFFFF0070CC4DC                 LDP             Q24, Q25, [X0,#arg_2C0]
__text:FFFFFFF0070CC4E0                 LDP             Q26, Q27, [X0,#arg_2E0]
__text:FFFFFFF0070CC4E4                 LDP             Q28, Q29, [X0,#arg_300]
__text:FFFFFFF0070CC4E8                 LDP             Q30, Q31, [X0,#arg_320]
__text:FFFFFFF0070CC4EC                 LDP             X2, X3, [X0,#arg_18]
__text:FFFFFFF0070CC4F0                 LDP             X4, X5, [X0,#arg_28]
__text:FFFFFFF0070CC4F4                 LDP             X6, X7, [X0,#arg_38]
__text:FFFFFFF0070CC4F8                 LDP             X8, X9, [X0,#arg_48]
__text:FFFFFFF0070CC4FC                 LDP             X10, X11, [X0,#arg_58]
__text:FFFFFFF0070CC500                 LDP             X12, X13, [X0,#arg_68]
__text:FFFFFFF0070CC504                 LDP             X14, X15, [X0,#arg_78]
__text:FFFFFFF0070CC508                 LDP             X16, X17, [X0,#arg_88]
__text:FFFFFFF0070CC50C                 LDP             X18, X19, [X0,#arg_98]
__text:FFFFFFF0070CC510                 LDP             X20, X21, [X0,#arg_A8]
__text:FFFFFFF0070CC514                 LDP             X22, X23, [X0,#arg_B8]
__text:FFFFFFF0070CC518                 LDP             X24, X25, [X0,#arg_C8]
__text:FFFFFFF0070CC51C                 LDP             X26, X27, [X0,#arg_D8]
__text:FFFFFFF0070CC520                 LDR             X28, [X0,#arg_E8]
__text:FFFFFFF0070CC524                 LDP             X29, X30, [X0,#arg_F0]
__text:FFFFFFF0070CC528                 LDR             X1, [X0,#arg_100]
__text:FFFFFFF0070CC52C                 MOV             SP, X1
__text:FFFFFFF0070CC530                 LDP             X0, X1, [X0,#8]
__text:FFFFFFF0070CC534                 ERET
__text:FFFFFFF0070CC534 ; End of function sub_FFFFFFF0070CC474
 
 
 
KSYMBOL_THREAD_EXCEPTION_RETURN    0xfffffff0070cc42c
__text:FFFFFFF0070CC42C ; =============== S U B R O U T I N E =======================================
__text:FFFFFFF0070CC42C
__text:FFFFFFF0070CC42C
__text:FFFFFFF0070CC42C sub_FFFFFFF0070CC42C                    ; CODE XREF: sub_FFFFFFF0070CC428↑j
__text:FFFFFFF0070CC42C                                         ; sub_FFFFFFF0070F6248+8↓p ...
__text:FFFFFFF0070CC42C                 MRS             X0, #0, c13, c0, #4
__text:FFFFFFF0070CC430                 ADD             X21, X0, #0x408
__text:FFFFFFF0070CC434                 LDR             X21, [X21]
__text:FFFFFFF0070CC434 ; End of function sub_FFFFFFF0070CC42C
 
 
 
KSYMBOL_SET_MDSCR_EL1_GADGET    0xfffffff0071e1998
__text:FFFFFFF0071E1978 loc_FFFFFFF0071E1978                    ; CODE XREF: sub_FFFFFFF0071E1668:loc_FFFFFFF0071E1958↑j
__text:FFFFFFF0071E1978                 LDR             X9, [X19,#0x208]
__text:FFFFFFF0071E197C                 MRS             X8, #0, c0, c2, #2
__text:FFFFFFF0071E1980                 STUR            X8, [X29,#var_28]
__text:FFFFFFF0071E1984                 LDUR            X8, [X29,#var_28]
__text:FFFFFFF0071E1988                 TBNZ            W9, #0, loc_FFFFFFF0071E19A4
__text:FFFFFFF0071E198C                 AND             X8, X8, #0xFFFFFFFFFFFFFFFE
__text:FFFFFFF0071E1990                 STUR            X8, [X29,#var_28]
__text:FFFFFFF0071E1994                 LDUR            X8, [X29,#var_28]
__text:FFFFFFF0071E1998                 MSR             #0, c0, c2, #2, X8
__text:FFFFFFF0071E199C                 ISB
__text:FFFFFFF0071E19A0                 B               loc_FFFFFFF0071E19F8
 
 
 
KSYMBOL_WRITE_SYSCALL_ENTRYPOINT  0xfffffff007439b20
__text:FFFFFFF007439B1C sub_FFFFFFF007439B1C                    ; DATA XREF: __const:FFFFFFF0070AE7D8↑o
__text:FFFFFFF007439B1C
__text:FFFFFFF007439B1C var_10          = -0x10
__text:FFFFFFF007439B1C
__text:FFFFFFF007439B1C                 MRS             X8, #0, c13, c0, #4
__text:FFFFFFF007439B20                 LDR             X8, [X8,#0x388]
__text:FFFFFFF007439B24                 LDR             W9, [X8,#0x140]
__text:FFFFFFF007439B28                 AND             W10, W9, #0xFFFFFFFB
__text:FFFFFFF007439B2C                 STR             W10, [X8,#0x140]
__text:FFFFFFF007439B30                 AND             W8, W9, #0x38
__text:FFFFFFF007439B34                 CMP             W8, #8
__text:FFFFFFF007439B38                 B.EQ            loc_FFFFFFF007439B40
__text:FFFFFFF007439B3C                 B               sub_FFFFFFF007439B50