sub_1405BC6E0
void __fastcall __noreturn sub_1405BC6E0(__int64 a1){
__int64 *v2;
__int64 *v3;
unsigned int v4;
_ETHREAD *CurrentThread;
_KEVENT *p_Object;
__int64 v7;
__int64 v8;
unsigned int v9;
__int64 v10;
__int64 v11;
__int64 v12;
unsigned __int8 CurrentIrql;
int *v14;
__int64 v15;
unsigned __int64 v16;
_QWORD *v17;
int *v18;
char v19;
__int64 v20;
unsigned int v21;
unsigned int v22;
unsigned int v23;
char v24;
__int64 v25;
__int64 v26;
__int64 *v27;
__int64 v28;
__int64 v29;
bool v30;
__int64 v31;
__int64 v32;
__int64 v33;
__int64 *v34;
__int64 v35;
int v36[4];
__int16 Object;
char v38;
int v39;
__int64 v40[3];
__int64 v41;
_LARGE_INTEGER Interval;
KeExitRetpoline();
LODWORD(v2) = PsQueryThreadTerminationPort();
v34 = v2;
v3 = v2;
v4 = ExGenRandom(ExGenRandomDomainUserVisible);
v30 = *(_QWORD *)(a1 + 8) == 1i64;
Interval.QuadPart = -1200000000i64 - v4 % 0x5F5E100ui64;
if( v30 )
KeRundownApcQueues(KeGetCurrentThread());
if( (unsigned int)ExGenRandom(ExGenRandomDomainUserVisible) % 0xA < 3 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.SpecialApcDisable;
}
p_Object = *(_KEVENT **)a1;
KeWaitForSingleObject(*(_QWORD *)a1, 0, 0, 0, 0i64);
if( (unsigned int)ExGenRandom(ExGenRandomDomainUserVisible) % 0xA >= 5 )
{
KeResetEvent(p_Object);
}
else
{
Object = 0;
v40[1] = (__int64)v40;
p_Object = (_KEVENT *)&Object;
v38 = 6;
v40[0] = (__int64)v40;
v39 = 0;
}
v7 = *(_QWORD *)(a1 + 16);
*(_QWORD *)(a1 + 16) = 0i64;
v8 = *(_QWORD *)(v7 + 32);
v9 = ExGenRandom(ExGenRandomDomainUserVisible);
v10 = v9 ^ 0x6A15A217BC2A27DBi64;
*v3 = 0i64;
v11 = v7 ^ v10;
v12 = v8 ^ v10;
v33 = ((unsigned __int8)v9 ^ 0xDB) & 1;
while( 1 )
{
if( (v12 ^ v10) >> 47 == -1 || (v12 ^ v10) >> 47 == 0 )
{
(*(void(__fastcall **)(__int64, __int64, _QWORD, _QWORD))((v11 ^ v10) + 0x18))(
v11 ^ v10,
v12 ^ v10,
*(_QWORD *)((v11 ^ v10) + 0x28),
*(_QWORD *)((v11 ^ v10) + 0x30));
v12 = v10 ^ *(_QWORD *)((v11 ^ v10) + 0x20);
}
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v36[0] = 34539786;
v36[1] = 218497804;
v36[2] = 235143175;
v14 = v36;
v36[3] = 134284555;
v15 = 16i64;
v16 = v12 ^ v10 ^ *(_QWORD *)((v11 ^ v10) + 0x40) | 0xFFFF800000000000ui64;
v17 = (_QWORD *)v16;
v18 = v36;
v41 = __ROR8__(v16, (v12 ^ v10 ^ *(_BYTE *)((v11 ^ v10) + 0x40)) & 0x3F);
do
{
v19 = *(_BYTE *)v18;
v18 = (int *)((char *)v18 + 1);
*(_BYTE *)v14 = v19 ^ 0xA;
v14 = (int *)((char *)v14 + 1);
--v15;
}
while( v15 );
v20 = v41;
v21 = 16;
v22 = 25;
v23 = 0;
do
{
v24 = ~(unsigned __int8)*v17 & 0x3F;
*v17 = v16 + (KiWaitAlways ^ _byteswap_uint64(v20 ^ __ROL8__(KiWaitNever ^ *v17, KiWaitNever))) + v23;
v20 = (v16 + __ROL8__(__ROR8__(v23 ^ (unsigned __int64)(200 - v23), v24) ^ v20, v24)) ^ 0x3D406922;
v25 = v21;
do
{
v26 = __ROL8__(*v17, 4);
*v17 = *((unsigned __int8 *)v36 + (v26 & 0xF)) | v26 & 0xFFFFFFFFFFFFFFF0ui64;
--v25;
}
while( v25 );
++v17;
if( ++v23 == 25 )
{
if( *(_QWORD *)v16 != 0x85131481131482Ei64 )
{
*(v17 - 1) ^= *(_QWORD *)v16 ^ 0x85131481131482Ei64;
v22 += *((_DWORD *)v17 - 1);
*(v17 - 1) ^= *(_QWORD *)v16 ^ 0x85131481131482Ei64;
}
v21 = 1;
}
}
while( v23 < v22 );
v27 = v34;
v28 = *(_QWORD *)v16 ^ 0x85131481131482Ei64;
*(_BYTE *)(v16 + 3) = 17;
*(_BYTE *)(v16 + 2) = 49;
*(_BYTE *)(v16 + 1) = 72;
*(_BYTE *)v16 = 46;
((void(__fastcall *)(unsigned __int64, __int64, _QWORD, _QWORD))v16)(v16, v28, 0i64, 0i64);
__writecr8(CurrentIrql);
v29 = *v27;
v30 = *v27 == 0;
if( *v27 > 0 )
{
v31 = -v29;
*v34 = 0i64;
v35 = v31;
(*(void(__fastcall **)(_QWORD))(v31 + 16))(*(_QWORD *)(v31 + 24));
memset((void *)v31, 0, 0x20ui64);
memset(&v35, 0, sizeof(v35));
v29 = *v34;
v30 = *v34 == 0;
}
if( v30 )
{
do
{
if( v33 )
KeDelayExecutionThread(0, 0, &Interval);
else
KeWaitForSingleObject((UINT64)p_Object, 0, 0, 0, (INT64)&Interval);
v29 = *v34;
}
while( !*v34 );
}
v32 = *(_QWORD *)(v29 + 32);
v11 = v10 ^ v29;
*v34 = 0i64;
v12 = v10 ^ v32;
if( v33 )
KeDelayExecutionThread(0, 0, &Interval);
else
KeWaitForSingleObject((UINT64)p_Object, 0, 0, 0, (INT64)&Interval);
}
}Referenced by:
No references.