server-re/decomp/MessageServer_Release_x64/full/functions/0x1400dccc0.c

95 lines
3.2 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400dccc0 FUN_1400dccc0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_1400dccc0(ulonglong param_1,longlong param_2,SIZE_T param_3,undefined8 param_4)
{
byte bVar1;
uint uVar2;
longlong lVar3;
uint uVar4;
ulonglong uVar5;
int iVar6;
ulonglong uVar7;
ulonglong uVar8;
int iVar9;
ulonglong uVar10;
ulonglong uVar11;
undefined1 auStack_198 [32];
exception local_178 [80];
byte abStack_128 [256];
ulonglong local_28;
local_28 = DAT_1401ac5a0 ^ (ulonglong)auStack_198;
iVar9 = (int)param_3;
if (iVar9 == 0) {
*(undefined1 *)(param_1 + 0x28) = 1;
}
else {
if (param_2 == 0) {
FUN_14006ba50(local_178,L"RC4 ExpandFrom Error. inputkey is NULL",param_3,param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_178,(ThrowInfo *)&DAT_1401a93e8);
}
uVar7 = param_3 & 0xffffffff;
uVar5 = param_1;
FUN_1400146f0(param_1,iVar9,param_3);
uVar8 = 0;
uVar10 = uVar8;
if (0 < iVar9) {
do {
iVar6 = (int)uVar10;
if ((iVar6 < 0) || (*(int *)(param_1 + 0x18) <= iVar6)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(uVar5,uVar7,param_3,uVar10);
}
param_3 = (SIZE_T)iVar6;
*(char *)(param_3 + *(longlong *)(param_1 + 0x10)) = (char)uVar10;
uVar10 = (ulonglong)(iVar6 + 1U);
uVar7 = (longlong)iVar6 % (longlong)iVar9 & 0xffffffff;
bVar1 = *(byte *)((int)((longlong)iVar6 % (longlong)iVar9) + param_2);
uVar5 = (ulonglong)bVar1;
abStack_128[param_3] = bVar1;
} while ((int)(iVar6 + 1U) < iVar9);
}
uVar10 = uVar8;
uVar11 = uVar8;
if (0 < iVar9) {
do {
if ((longlong)uVar10 < 0) {
LAB_1400dce02:
/* WARNING: Subroutine does not return */
FUN_14006be30(uVar5,uVar7,param_3,uVar10);
}
uVar2 = *(uint *)(param_1 + 0x18);
param_3 = (SIZE_T)uVar2;
if ((int)uVar2 <= (int)uVar11) goto LAB_1400dce02;
lVar3 = *(longlong *)(param_1 + 0x10);
uVar4 = (uint)abStack_128[uVar10] + (int)uVar8;
uVar5 = (longlong)(int)(*(byte *)(lVar3 + uVar10) + uVar4) % (longlong)iVar9;
uVar8 = uVar5 & 0xffffffff;
uVar5 = (longlong)((ulonglong)(uint)((int)uVar5 >> 0x1f) << 0x20 | uVar5 & 0xffffffff) %
(longlong)iVar9;
uVar7 = uVar5 & 0xffffffff;
iVar6 = (int)uVar5;
if ((iVar6 < 0) || ((int)uVar2 <= iVar6)) {
/* WARNING: Subroutine does not return */
FUN_14006be30((ulonglong)uVar4,uVar7,param_3,uVar10);
}
bVar1 = *(byte *)(lVar3 + uVar10);
uVar5 = (ulonglong)bVar1;
param_3 = (SIZE_T)iVar6;
uVar10 = uVar10 + 1;
uVar11 = (ulonglong)((int)uVar11 + 1);
*(undefined1 *)(lVar3 + -1 + uVar10) = *(undefined1 *)(param_3 + lVar3);
*(byte *)(param_3 + lVar3) = bVar1;
} while ((longlong)uVar10 < (longlong)iVar9);
}
*(undefined1 *)(param_1 + 0x28) = 1;
}
return;
}