/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400cde30 FUN_1400cde30 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Type propagation algorithm not settling */ void FUN_1400cde30(byte *param_1,byte *param_2,uint *param_3) { int iVar1; longlong lVar2; uint uVar3; int iVar4; longlong lVar5; int iVar6; uint *puVar7; int iVar8; int iVar9; longlong lVar10; int iVar11; longlong lVar12; longlong lVar13; undefined1 auStack_118 [32]; int local_f8; int local_f4; int local_f0; ulonglong local_e8; size_t local_e0; byte *local_d8; uint *local_d0; exception local_c8 [72]; undefined4 local_80; uint auStack_64 [9]; ulonglong local_40; local_40 = DAT_1401ac5a0 ^ (ulonglong)auStack_118; local_d8 = param_2; local_d0 = param_3; if (0 < (int)param_3[0xf0]) { uVar3 = param_3[0xf1]; if (uVar3 == 0x10) { FUN_1400cd520(param_1,param_2,param_3); } else { lVar12 = 0; iVar4 = (int)(uVar3 + ((int)uVar3 >> 0x1f & 3U)) >> 2; iVar6 = 0; lVar13 = (longlong)iVar4; if (iVar4 != 4) { iVar6 = (iVar4 != 6) + 1; } lVar5 = (longlong)iVar6 * 0x20; iVar6 = *(int *)(&DAT_140145cd8 + lVar5); local_f8 = *(int *)(&DAT_140145ce0 + lVar5); iVar9 = *(int *)(&DAT_140145ce8 + lVar5); puVar7 = &local_80; lVar5 = lVar12; if (0 < iVar4) { do { lVar10 = lVar5 + 1; *puVar7 = (uint)*param_1 << 0x18; *puVar7 = *puVar7 | (uint)param_1[1] << 0x10; *puVar7 = *puVar7 | (uint)param_1[2] << 8; *puVar7 = *puVar7 | (uint)param_1[3]; *puVar7 = *puVar7 ^ param_3[lVar5]; puVar7 = puVar7 + 1; lVar5 = lVar10; param_1 = param_1 + 4; } while (lVar10 < lVar13); } if (1 < (int)param_3[0xf2]) { lVar5 = (longlong)param_3 - (longlong)&local_80; local_e0 = (size_t)(iVar4 * 4); local_e8 = (ulonglong)(param_3[0xf2] - 1); local_f4 = iVar6; local_f0 = iVar9; do { lVar5 = lVar5 + 0x20; if (0 < iVar4) { iVar11 = local_f8 - iVar6; iVar8 = iVar9 - iVar6; lVar10 = lVar12; iVar1 = iVar6; do { lVar2 = lVar10 * 4; lVar10 = lVar10 + 1; auStack_64[lVar10] = *(uint *)(&DAT_1401434b0 + ((longlong)(ulonglong)(uint)(&local_80)[(iVar11 + iVar1) % iVar4] >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_1401438b0 + (ulonglong)*(byte *)(&local_80 + (iVar8 + iVar1) % iVar4) * 4) ^ *(uint *)(&DAT_1401430b0 + ((longlong)(ulonglong)(uint)(&local_80)[iVar1 % iVar4] >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_140142cb0 + (ulonglong)*(byte *)((longlong)&local_80 + lVar2 + 3) * 4) ^ *(uint *)((longlong)auStack_64 + lVar5 + lVar2 + 0xffffffffffffffe4U); iVar6 = local_f4; iVar9 = local_f0; iVar1 = iVar1 + 1; } while (lVar10 < lVar13); } memcpy(&local_80,auStack_64 + 1,local_e0); local_e8 = local_e8 - 1; param_2 = local_d8; param_3 = local_d0; } while (local_e8 != 0); } if (0 < iVar4) { iVar6 = iVar6 - local_f8; iVar9 = iVar9 - local_f8; do { lVar5 = lVar12 + (longlong)(int)param_3[0xf2] * 8; lVar10 = lVar12 * 4; lVar12 = lVar12 + 1; uVar3 = param_3[lVar5]; *param_2 = (&DAT_140142ab0)[*(byte *)((longlong)&local_80 + lVar10 + 3)] ^ (byte)(uVar3 >> 0x18); param_2[1] = (&DAT_140142ab0) [(longlong)(ulonglong)(uint)(&local_80)[(local_f8 + iVar6) % iVar4] >> 0x10 & 0xff] ^ (byte)(uVar3 >> 0x10); param_2[2] = (&DAT_140142ab0) [(longlong)(ulonglong)(uint)(&local_80)[local_f8 % iVar4] >> 8 & 0xff] ^ (byte)(uVar3 >> 8); iVar1 = local_f8 + iVar9; local_f8 = local_f8 + 1; param_2[3] = (&DAT_140142ab0)[*(byte *)(&local_80 + iVar1 % iVar4)] ^ (byte)uVar3; param_2 = param_2 + 4; } while (lVar12 < lVar13); } } return; } FUN_14006ba50(local_c8,L"aes key is not initialized",param_3,param_1); /* WARNING: Subroutine does not return */ _CxxThrowException(local_c8,(ThrowInfo *)&DAT_1401a93e8); }