95 lines
3.2 KiB
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;
|
|
}
|
|
|