/* 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; }