/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401b0110 FUN_1401b0110 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Type propagation algorithm not settling */ void FUN_1401b0110(byte *param_1,byte *param_2,longlong param_3) { int iVar1; longlong lVar2; undefined4 uVar3; int iVar4; longlong lVar5; int iVar6; uint *puVar7; int iVar8; int iVar9; int iVar10; longlong lVar11; 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; longlong local_d0; undefined1 local_c8 [72]; undefined4 local_80; uint auStack_64 [9]; ulonglong local_40; local_40 = DAT_1403463c0 ^ (ulonglong)auStack_118; local_d8 = param_2; local_d0 = param_3; if (0 < *(int *)(param_3 + 0x3c0)) { iVar4 = *(int *)(param_3 + 0x3c4); if (iVar4 == 0x10) { FUN_1401af800(); } else { lVar11 = 0; iVar4 = (int)(iVar4 + (iVar4 >> 0x1f & 3U)) >> 2; iVar6 = 0; lVar12 = (longlong)iVar4; if (iVar4 != 4) { iVar6 = (iVar4 != 6) + 1; } lVar5 = (longlong)iVar6 * 0x20; iVar6 = *(int *)(&DAT_1402874d8 + lVar5); local_f8 = *(int *)(&DAT_1402874e0 + lVar5); iVar9 = *(int *)(&DAT_1402874e8 + lVar5); puVar7 = &local_80; lVar5 = lVar11; if (0 < iVar4) { do { lVar5 = 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 ^ *(uint *)(param_3 + -4 + lVar5 * 4); puVar7 = puVar7 + 1; param_1 = param_1 + 4; } while (lVar5 < lVar12); } if (1 < *(int *)(param_3 + 0x3c8)) { lVar5 = param_3 - (longlong)&local_80; local_e0 = (size_t)(iVar4 * 4); local_e8 = (ulonglong)(*(int *)(param_3 + 0x3c8) - 1); local_f4 = iVar6; local_f0 = iVar9; do { lVar5 = lVar5 + 0x20; if (0 < iVar4) { iVar10 = local_f8 - iVar6; iVar8 = iVar9 - iVar6; lVar13 = lVar11; iVar1 = iVar6; do { lVar2 = lVar13 * 4; lVar13 = lVar13 + 1; auStack_64[lVar13] = *(uint *)(&DAT_140284cb0 + ((longlong)(ulonglong)(uint)(&local_80)[(iVar10 + iVar1) % iVar4] >> 8 & 0xffU) * 4) ^ *(uint *)(&DAT_1402850b0 + (ulonglong)*(byte *)(&local_80 + (iVar8 + iVar1) % iVar4) * 4) ^ *(uint *)(&DAT_1402848b0 + ((longlong)(ulonglong)(uint)(&local_80)[iVar1 % iVar4] >> 0x10 & 0xffU) * 4) ^ *(uint *)(&DAT_1402844b0 + (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 (lVar13 < lVar12); } 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 = lVar11 + (longlong)*(int *)(param_3 + 0x3c8) * 8; lVar13 = lVar11 * 4; lVar11 = lVar11 + 1; uVar3 = *(undefined4 *)(param_3 + lVar5 * 4); *param_2 = (&DAT_1402842b0)[*(byte *)((longlong)&local_80 + lVar13 + 3)] ^ (byte)((uint)uVar3 >> 0x18); param_2[1] = (&DAT_1402842b0) [(longlong)(ulonglong)(uint)(&local_80)[(local_f8 + iVar6) % iVar4] >> 0x10 & 0xff] ^ (byte)((uint)uVar3 >> 0x10); param_2[2] = (&DAT_1402842b0) [(longlong)(ulonglong)(uint)(&local_80)[local_f8 % iVar4] >> 8 & 0xff] ^ (byte)((uint)uVar3 >> 8); iVar1 = local_f8 + iVar9; local_f8 = local_f8 + 1; param_2[3] = (&DAT_1402842b0)[*(byte *)(&local_80 + iVar1 % iVar4)] ^ (byte)uVar3; param_2 = param_2 + 4; } while (lVar11 < lVar12); } } return; } FUN_14016d300(local_c8,L"aes key is not initialized"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_c8,(ThrowInfo *)&DAT_1403417f8); }