/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401b0870 FUN_1401b0870 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401b0870(longlong param_1,longlong param_2,byte *param_3,ulonglong param_4,int param_5) { int iVar1; undefined1 auVar2 [16]; undefined1 auVar3 [16]; ulonglong uVar4; byte *pbVar5; ulonglong uVar6; uint uVar7; undefined1 auStack_c8 [32]; undefined1 local_a8 [72]; byte local_60 [32]; ulonglong local_40; local_40 = DAT_1403463c0 ^ (ulonglong)auStack_c8; if (*(int *)(param_1 + 0x3c0) < 1) { FUN_14016d300(local_a8,L"aes key is not initialized"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_a8,(ThrowInfo *)&DAT_1403417f8); } if (param_4 != 0) { uVar6 = (ulonglong)*(int *)(param_1 + 0x3c4); auVar2._8_8_ = 0; auVar2._0_8_ = uVar6; auVar3._8_8_ = 0; auVar3._0_8_ = param_4; uVar4 = param_4 / uVar6; if (SUB168(auVar3 % auVar2,0) == 0) { local_60[1] = 0; local_60[2] = 0; local_60[3] = 0; local_60[4] = 0; local_60[5] = 0; local_60[6] = 0; local_60[7] = 0; local_60[8] = 0; local_60[9] = 0; local_60[10] = 0; local_60[0xb] = 0; local_60[0xc] = 0; local_60[0xd] = 0; local_60[0xe] = 0; local_60[0xf] = 0; local_60[0x10] = 0; local_60[0x11] = 0; local_60[0x12] = 0; local_60[0x13] = 0; local_60[0x14] = 0; local_60[0x15] = 0; local_60[0x16] = 0; local_60[0x17] = 0; local_60[0x18] = 0; local_60[0x19] = 0; local_60[0x1a] = 0; local_60[0x1b] = 0; local_60[0x1c] = 0; local_60[0x1d] = 0; local_60[0x1e] = 0; local_60[0x1f] = 0; uVar7 = 0; local_60[0] = SUB161(auVar3 % auVar2,0); if (param_5 == 1) { if (uVar4 != 0) { do { if (0 < (int)uVar6) { uVar6 = uVar6 & 0xffffffff; pbVar5 = local_60; do { *pbVar5 = *pbVar5 ^ pbVar5[param_2 - (longlong)local_60]; uVar6 = uVar6 - 1; pbVar5 = pbVar5 + 1; } while (uVar6 != 0); } FUN_1401b0110(local_60,param_3,param_1); uVar6 = (ulonglong)*(int *)(param_1 + 0x3c4); memcpy(local_60,param_3,uVar6); uVar7 = uVar7 + 1; param_2 = param_2 + *(int *)(param_1 + 0x3c4); param_3 = param_3 + *(int *)(param_1 + 0x3c4); } while ((ulonglong)uVar7 < param_4 / uVar6); } } else if (param_5 == 2) { if (uVar4 != 0) { do { FUN_1401b0110(local_60,param_3,param_1); if (0 < (int)*(uint *)(param_1 + 0x3c4)) { uVar4 = (ulonglong)*(uint *)(param_1 + 0x3c4); pbVar5 = param_3; do { *pbVar5 = *pbVar5 ^ pbVar5[param_2 - (longlong)param_3]; uVar4 = uVar4 - 1; pbVar5 = pbVar5 + 1; } while (uVar4 != 0); } iVar1 = *(int *)(param_1 + 0x3c4); memcpy(local_60,param_3,(longlong)iVar1); uVar7 = uVar7 + 1; param_2 = param_2 + *(int *)(param_1 + 0x3c4); param_3 = param_3 + *(int *)(param_1 + 0x3c4); } while ((ulonglong)uVar7 < param_4 / (ulonglong)(longlong)iVar1); } } else if (uVar4 != 0) { do { FUN_1401b0110(param_2,param_3,param_1); uVar7 = uVar7 + 1; param_2 = param_2 + *(int *)(param_1 + 0x3c4); param_3 = param_3 + *(int *)(param_1 + 0x3c4); } while ((ulonglong)uVar7 < param_4 / (ulonglong)(longlong)*(int *)(param_1 + 0x3c4)); } return; } } FUN_14016d300(local_a8,L"block size is not 16byte or 24byte or 32byte"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_a8,(ThrowInfo *)&DAT_1403417f8); }