server-re/decomp/DBCServer_Release_x64/full/functions/0x1401b0b00.c

124 lines
4.2 KiB
C

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