/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401c0b90 FUN_1401c0b90 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401c0b90(longlong param_1,longlong param_2,int param_3) { undefined1 uVar1; longlong lVar2; ulonglong uVar3; int iVar4; ulonglong uVar5; ulonglong uVar6; ulonglong uVar7; undefined1 auStack_198 [32]; undefined1 local_178 [80]; byte abStack_128 [256]; ulonglong local_28; local_28 = DAT_1403463c0 ^ (ulonglong)auStack_198; if (param_3 == 0) { *(undefined1 *)(param_1 + 0x28) = 1; } else { if (param_2 == 0) { FUN_14016d300(local_178,L"RC4 ExpandFrom Error. inputkey is NULL"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_178,(ThrowInfo *)&DAT_1403417f8); } FUN_14004f0e0(param_1,param_3); uVar5 = 0; uVar6 = uVar5; if (0 < param_3) { do { iVar4 = (int)uVar6; if ((iVar4 < 0) || (*(int *)(param_1 + 0x18) <= iVar4)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } *(char *)((longlong)iVar4 + *(longlong *)(param_1 + 0x10)) = (char)uVar6; uVar6 = (ulonglong)(iVar4 + 1U); abStack_128[iVar4] = *(byte *)(iVar4 % param_3 + param_2); } while ((int)(iVar4 + 1U) < param_3); } uVar6 = uVar5; uVar7 = uVar5; if (0 < param_3) { do { if ((longlong)uVar6 < 0) { LAB_1401c0cd2: /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } if (*(int *)(param_1 + 0x18) <= (int)uVar7) goto LAB_1401c0cd2; lVar2 = *(longlong *)(param_1 + 0x10); uVar3 = (longlong) (int)((uint)*(byte *)(lVar2 + uVar6) + (uint)abStack_128[uVar6] + (int)uVar5) % (longlong)param_3; uVar5 = uVar3 & 0xffffffff; iVar4 = (int)((longlong)((ulonglong)(uint)((int)uVar3 >> 0x1f) << 0x20 | uVar3 & 0xffffffff) % (longlong)param_3); if ((iVar4 < 0) || (*(int *)(param_1 + 0x18) <= iVar4)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } uVar1 = *(undefined1 *)(lVar2 + uVar6); uVar6 = uVar6 + 1; uVar7 = (ulonglong)((int)uVar7 + 1); *(undefined1 *)(lVar2 + -1 + uVar6) = *(undefined1 *)(iVar4 + lVar2); *(undefined1 *)(iVar4 + lVar2) = uVar1; } while ((longlong)uVar6 < (longlong)param_3); } *(undefined1 *)(param_1 + 0x28) = 1; } return; }