/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401b04c0 FUN_1401b04c0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Type propagation algorithm not settling */ void FUN_1401b04c0(byte *param_1,byte *param_2,longlong param_3) { longlong lVar1; undefined4 uVar2; int iVar3; longlong lVar4; int iVar5; uint *puVar6; int iVar7; int iVar8; uint *puVar9; int iVar10; longlong lVar11; longlong lVar12; ulonglong uVar13; undefined1 auStack_118 [32]; int local_f8; int local_f4; int local_ec; size_t local_e8; byte *local_e0; longlong local_d8; undefined1 local_d0 [72]; undefined4 local_88; uint auStack_6c [9]; ulonglong local_48; local_48 = DAT_1403463c0 ^ (ulonglong)auStack_118; local_e0 = param_2; local_d8 = param_3; if (0 < *(int *)(param_3 + 0x3c0)) { iVar3 = *(int *)(param_3 + 0x3c4); if (iVar3 == 0x10) { FUN_1401afc80(); } else { iVar5 = 0; iVar3 = (int)(iVar3 + (iVar3 >> 0x1f & 3U)) >> 2; lVar11 = (longlong)iVar3; if (iVar3 != 4) { iVar5 = (iVar3 != 6) + 1; } lVar4 = (longlong)iVar5 * 0x20; iVar5 = *(int *)(&DAT_1402874dc + lVar4); local_f4 = *(int *)(&DAT_1402874e4 + lVar4); local_f8 = *(int *)(&DAT_1402874ec + lVar4); if (0 < iVar3) { puVar6 = &local_88; puVar9 = (uint *)(param_3 + 0x1e0); lVar4 = lVar11; do { *puVar6 = (uint)*param_1 << 0x18; *puVar6 = *puVar6 | (uint)param_1[1] << 0x10; *puVar6 = *puVar6 | (uint)param_1[2] << 8; *puVar6 = *puVar6 | (uint)param_1[3]; *puVar6 = *puVar6 ^ *puVar9; lVar4 = lVar4 + -1; puVar6 = puVar6 + 1; puVar9 = puVar9 + 1; param_1 = param_1 + 4; } while (lVar4 != 0); } if (1 < *(int *)(param_3 + 0x3c8)) { uVar13 = (ulonglong)(*(int *)(param_3 + 0x3c8) - 1); local_e8 = (size_t)(iVar3 * 4); lVar4 = (param_3 - (longlong)&local_88) + 0x200; local_ec = iVar5; do { lVar12 = 0; if (0 < iVar3) { iVar10 = local_f4 - iVar5; iVar8 = local_f8 - iVar5; iVar7 = iVar5; do { lVar1 = lVar12 * 4; lVar12 = lVar12 + 1; auStack_6c[lVar12] = *(uint *)(&DAT_140285cb0 + ((longlong)(ulonglong)(uint)(&local_88)[(iVar10 + iVar7) % iVar3] >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_1402860b0 + (ulonglong)*(byte *)(&local_88 + (iVar8 + iVar7) % iVar3) * 4) ^ *(uint *)(&DAT_1402858b0 + ((longlong)(ulonglong)(uint)(&local_88)[iVar7 % iVar3] >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_1402854b0 + (ulonglong)*(byte *)((longlong)&local_88 + lVar1 + 3) * 4) ^ *(uint *)((longlong)&local_88 + lVar4 + lVar1); iVar7 = iVar7 + 1; iVar5 = local_ec; } while (lVar12 < lVar11); } memcpy(&local_88,auStack_6c + 1,local_e8); lVar4 = lVar4 + 0x20; uVar13 = uVar13 - 1; param_3 = local_d8; param_2 = local_e0; } while (uVar13 != 0); } lVar4 = 0; if (0 < iVar3) { iVar5 = iVar5 - local_f4; local_f8 = local_f8 - local_f4; do { lVar12 = lVar4 + 0x78; lVar1 = lVar4 * 4; lVar4 = lVar4 + 1; uVar2 = *(undefined4 *)(param_3 + (lVar12 + (longlong)*(int *)(param_3 + 0x3c8) * 8) * 4); *param_2 = (&DAT_1402843b0)[*(byte *)((longlong)&local_88 + lVar1 + 3)] ^ (byte)((uint)uVar2 >> 0x18); param_2[1] = (&DAT_1402843b0) [(longlong)(ulonglong)(uint)(&local_88)[(local_f4 + iVar5) % iVar3] >> 0x10 & 0xff] ^ (byte)((uint)uVar2 >> 0x10); param_2[2] = (&DAT_1402843b0) [(longlong)(ulonglong)(uint)(&local_88)[local_f4 % iVar3] >> 8 & 0xff] ^ (byte)((uint)uVar2 >> 8); iVar7 = local_f4 + local_f8; local_f4 = local_f4 + 1; param_2[3] = (&DAT_1402843b0)[*(byte *)(&local_88 + iVar7 % iVar3)] ^ (byte)uVar2; param_2 = param_2 + 4; } while (lVar4 < lVar11); } } return; } FUN_14016d300(local_d0,L"aes key is not initialized"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_d0,(ThrowInfo *)&DAT_1403417f8); }