server-re/decomp/Agent_Release_x64/full/functions/0x1400a0660.c
2026-10-14 16:45:19 -04:00

95 lines
3.2 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x1400a0660 FUN_1400a0660
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_1400a0660(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_1401555a0 ^ (ulonglong)auStack_198;
iVar9 = (int)param_3;
if (iVar9 == 0) {
*(undefined1 *)(param_1 + 0x28) = 1;
}
else {
if (param_2 == 0) {
FUN_14002f1e0(local_178,L"RC4 ExpandFrom Error. inputkey is NULL",param_3,param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_178,(ThrowInfo *)&DAT_140151b88);
}
uVar7 = param_3 & 0xffffffff;
uVar5 = param_1;
FUN_14001bc70(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_14002f5c0(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_1400a07a2:
/* WARNING: Subroutine does not return */
FUN_14002f5c0(uVar5,uVar7,param_3,uVar10);
}
uVar2 = *(uint *)(param_1 + 0x18);
param_3 = (SIZE_T)uVar2;
if ((int)uVar2 <= (int)uVar11) goto LAB_1400a07a2;
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_14002f5c0((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;
}