217 lines
6.8 KiB
C
217 lines
6.8 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401af310 FUN_1401af310
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1401af310(void *param_1,byte *param_2,int param_3,int param_4)
|
|
|
|
{
|
|
byte bVar1;
|
|
uint uVar2;
|
|
undefined4 uVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint *puVar6;
|
|
int iVar7;
|
|
void *pvVar8;
|
|
int iVar9;
|
|
longlong lVar10;
|
|
ulonglong uVar11;
|
|
int iVar12;
|
|
int iVar13;
|
|
uint *puVar14;
|
|
longlong lVar15;
|
|
byte *pbVar16;
|
|
longlong lVar17;
|
|
undefined1 auStack_d8 [32];
|
|
int local_b8;
|
|
undefined1 local_a8 [68];
|
|
uint auStack_64 [9];
|
|
ulonglong local_40;
|
|
|
|
local_40 = DAT_1403463c0 ^ (ulonglong)auStack_d8;
|
|
local_b8 = param_3;
|
|
if (((param_3 != 0x10) && (param_3 != 0x18)) && (param_3 != 0x20)) {
|
|
FUN_14016d2a0(local_a8,"Incorrect key length");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_a8,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
if (((param_4 != 0x10) && (param_4 != 0x18)) && (param_4 != 0x20)) {
|
|
FUN_14016d2a0(local_a8,"Incorrect block length");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_a8,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
*(int *)((longlong)param_1 + 0x3c4) = param_4;
|
|
if (param_3 == 0x10) {
|
|
if (param_4 == 0x10) {
|
|
uVar3 = 10;
|
|
}
|
|
else {
|
|
uVar3 = 0xe;
|
|
if (param_4 == 0x18) {
|
|
uVar3 = 0xc;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if (param_3 != 0x18) {
|
|
*(undefined4 *)((longlong)param_1 + 0x3c8) = 0xe;
|
|
goto LAB_1401af41f;
|
|
}
|
|
uVar3 = 0xe;
|
|
if (param_4 != 0x20) {
|
|
uVar3 = 0xc;
|
|
}
|
|
}
|
|
*(undefined4 *)((longlong)param_1 + 0x3c8) = uVar3;
|
|
LAB_1401af41f:
|
|
iVar9 = 0;
|
|
iVar4 = (int)(param_4 + (param_4 >> 0x1f & 3U)) >> 2;
|
|
lVar15 = (longlong)iVar4;
|
|
pvVar8 = param_1;
|
|
if (-1 < *(int *)((longlong)param_1 + 0x3c8)) {
|
|
do {
|
|
if (0 < iVar4) {
|
|
memset(pvVar8,0,lVar15 << 2);
|
|
}
|
|
iVar9 = iVar9 + 1;
|
|
pvVar8 = (void *)((longlong)pvVar8 + 0x20);
|
|
} while (iVar9 <= *(int *)((longlong)param_1 + 0x3c8));
|
|
}
|
|
iVar9 = 0;
|
|
if (-1 < *(int *)((longlong)param_1 + 0x3c8)) {
|
|
pvVar8 = (void *)((longlong)param_1 + 0x1e0);
|
|
do {
|
|
if (0 < iVar4) {
|
|
memset(pvVar8,0,lVar15 << 2);
|
|
}
|
|
iVar9 = iVar9 + 1;
|
|
pvVar8 = (void *)((longlong)pvVar8 + 0x20);
|
|
} while (iVar9 <= *(int *)((longlong)param_1 + 0x3c8));
|
|
}
|
|
puVar6 = auStack_64;
|
|
iVar9 = (*(int *)((longlong)param_1 + 0x3c8) + 1) * iVar4;
|
|
uVar5 = (int)(param_3 + (param_3 >> 0x1f & 3U)) >> 2;
|
|
lVar17 = (longlong)(int)uVar5;
|
|
if (0 < (int)uVar5) {
|
|
uVar11 = (ulonglong)uVar5;
|
|
do {
|
|
puVar6 = puVar6 + 1;
|
|
bVar1 = param_2[2];
|
|
*puVar6 = (uint)*param_2 << 0x18;
|
|
*puVar6 = *puVar6 | (uint)param_2[1] << 0x10;
|
|
*puVar6 = *puVar6 | (uint)bVar1 << 8;
|
|
*puVar6 = *puVar6 | (uint)param_2[3];
|
|
uVar11 = uVar11 - 1;
|
|
param_2 = param_2 + 4;
|
|
} while (uVar11 != 0);
|
|
}
|
|
iVar7 = 0;
|
|
lVar10 = 0;
|
|
iVar12 = iVar7;
|
|
if (0 < (int)uVar5) {
|
|
do {
|
|
iVar12 = iVar7;
|
|
if (iVar9 <= iVar7) break;
|
|
uVar2 = auStack_64[lVar10 + 1];
|
|
lVar10 = lVar10 + 1;
|
|
iVar12 = iVar7 + 1;
|
|
*(uint *)((longlong)param_1 + ((longlong)(iVar7 % iVar4) + (longlong)(iVar7 / iVar4) * 8) * 4)
|
|
= uVar2;
|
|
*(uint *)((longlong)param_1 +
|
|
((longlong)(iVar7 % iVar4) + 0x78 +
|
|
((longlong)*(int *)((longlong)param_1 + 0x3c8) - (longlong)(iVar7 / iVar4)) * 8) * 4)
|
|
= uVar2;
|
|
iVar7 = iVar12;
|
|
} while (lVar10 < lVar17);
|
|
}
|
|
iVar7 = 1;
|
|
if (iVar12 < iVar9) {
|
|
pbVar16 = &DAT_1402874b0;
|
|
do {
|
|
uVar11 = (ulonglong)(int)auStack_64[lVar17];
|
|
auStack_64[1] =
|
|
auStack_64[1] ^
|
|
CONCAT31(CONCAT21(CONCAT11((&DAT_1402842b0)[(longlong)uVar11 >> 0x10 & 0xff] ^ *pbVar16,
|
|
(&DAT_1402842b0)[(longlong)uVar11 >> 8 & 0xff]),
|
|
(&DAT_1402842b0)[uVar11 & 0xff]),
|
|
(&DAT_1402842b0)[auStack_64[lVar17] >> 0x18]);
|
|
if (uVar5 == 8) {
|
|
lVar10 = 3;
|
|
puVar6 = auStack_64 + 2;
|
|
do {
|
|
*puVar6 = *puVar6 ^ puVar6[-1];
|
|
lVar10 = lVar10 + -1;
|
|
puVar6 = puVar6 + 1;
|
|
} while (lVar10 != 0);
|
|
uVar11 = (ulonglong)(int)auStack_64[4];
|
|
lVar10 = 5;
|
|
auStack_64[5] =
|
|
auStack_64[5] ^
|
|
CONCAT31(CONCAT21(CONCAT11((&DAT_1402842b0)[auStack_64[4] >> 0x18],
|
|
(&DAT_1402842b0)[(longlong)uVar11 >> 0x10 & 0xff]),
|
|
(&DAT_1402842b0)[(longlong)uVar11 >> 8 & 0xff]),
|
|
(&DAT_1402842b0)[uVar11 & 0xff]);
|
|
do {
|
|
puVar6 = auStack_64 + lVar10;
|
|
lVar10 = lVar10 + 1;
|
|
auStack_64[lVar10] = auStack_64[lVar10] ^ *puVar6;
|
|
} while (lVar10 < 8);
|
|
}
|
|
else {
|
|
lVar10 = 1;
|
|
if (1 < lVar17) {
|
|
do {
|
|
puVar6 = auStack_64 + lVar10;
|
|
lVar10 = lVar10 + 1;
|
|
auStack_64[lVar10] = auStack_64[lVar10] ^ *puVar6;
|
|
} while (lVar10 < lVar17);
|
|
}
|
|
}
|
|
lVar10 = 0;
|
|
iVar13 = iVar12;
|
|
param_3 = local_b8;
|
|
if (0 < (int)uVar5) {
|
|
do {
|
|
if (iVar9 <= iVar13) goto LAB_1401af705;
|
|
uVar2 = auStack_64[lVar10 + 1];
|
|
lVar10 = lVar10 + 1;
|
|
iVar12 = iVar13 + 1;
|
|
*(uint *)((longlong)param_1 +
|
|
((longlong)(iVar13 % iVar4) + (longlong)(iVar13 / iVar4) * 8) * 4) = uVar2;
|
|
*(uint *)((longlong)param_1 +
|
|
((longlong)(iVar13 % iVar4) + 0x78 +
|
|
((longlong)*(int *)((longlong)param_1 + 0x3c8) - (longlong)(iVar13 / iVar4)) * 8)
|
|
* 4) = uVar2;
|
|
iVar13 = iVar12;
|
|
} while (lVar10 < lVar17);
|
|
}
|
|
pbVar16 = pbVar16 + 1;
|
|
} while (iVar12 < iVar9);
|
|
}
|
|
LAB_1401af705:
|
|
if (1 < *(int *)((longlong)param_1 + 0x3c8)) {
|
|
puVar6 = (uint *)((longlong)param_1 + 0x200);
|
|
do {
|
|
puVar14 = puVar6;
|
|
lVar17 = lVar15;
|
|
if (0 < lVar15) {
|
|
do {
|
|
uVar11 = (ulonglong)(int)*puVar14;
|
|
lVar17 = lVar17 + -1;
|
|
*puVar14 = *(uint *)(&DAT_1402864b0 + (ulonglong)(*puVar14 >> 0x18) * 4) ^
|
|
*(uint *)(&DAT_1402868b0 + ((longlong)uVar11 >> 0x10 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_140286cb0 + ((longlong)uVar11 >> 8 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1402870b0 + (uVar11 & 0xff) * 4);
|
|
puVar14 = puVar14 + 1;
|
|
} while (lVar17 != 0);
|
|
}
|
|
iVar7 = iVar7 + 1;
|
|
puVar6 = puVar6 + 8;
|
|
} while (iVar7 < *(int *)((longlong)param_1 + 0x3c8));
|
|
}
|
|
*(int *)((longlong)param_1 + 0x3c0) = param_3;
|
|
return;
|
|
}
|
|
|