204 lines
6.3 KiB
C
204 lines
6.3 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400dd990 FUN_1400dd990
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong * FUN_1400dd990(ulonglong *param_1,longlong param_2,SIZE_T param_3,longlong *param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
int *piVar2;
|
|
uint uVar3;
|
|
undefined *puVar4;
|
|
ulonglong uVar5;
|
|
int *piVar6;
|
|
longlong lVar7;
|
|
void *pvVar8;
|
|
ulonglong *puVar9;
|
|
ulonglong *puVar10;
|
|
ulonglong **ppuVar11;
|
|
ulonglong uVar12;
|
|
ulonglong **ppuVar13;
|
|
SIZE_T SVar14;
|
|
void *pvVar15;
|
|
undefined8 uVar16;
|
|
longlong *plVar17;
|
|
uint *puVar18;
|
|
undefined **ppuVar19;
|
|
int local_res10 [2];
|
|
uint local_res18 [4];
|
|
ulonglong *local_88;
|
|
undefined *local_80;
|
|
undefined8 local_78;
|
|
ulonglong *local_70;
|
|
undefined1 local_68;
|
|
undefined **local_60;
|
|
undefined8 local_58;
|
|
undefined8 local_50;
|
|
undefined8 local_48;
|
|
undefined8 local_40;
|
|
|
|
local_78 = 0xfffffffffffffffe;
|
|
pvVar8 = (void *)0x0;
|
|
local_res10[0] = 0;
|
|
local_res18[0] = *(uint *)(param_3 + 0x18);
|
|
uVar5 = (ulonglong)local_res18[0];
|
|
lVar7 = param_2;
|
|
SVar14 = param_3;
|
|
plVar17 = param_4;
|
|
FUN_1400146f0(param_2,local_res18[0],param_3);
|
|
pvVar15 = pvVar8;
|
|
if (*(int *)(param_2 + 0x18) != 0) {
|
|
pvVar15 = *(void **)(param_2 + 0x10);
|
|
}
|
|
uVar3 = *(uint *)(param_3 + 0x18);
|
|
if (uVar3 != 0) {
|
|
pvVar8 = *(void **)(param_3 + 0x10);
|
|
}
|
|
puVar4 = FUN_1400dd510(lVar7,uVar5,SVar14,plVar17);
|
|
puVar18 = local_res18;
|
|
uVar12 = (ulonglong)uVar3;
|
|
uVar5 = FUN_1400fc520(pvVar8,uVar3,pvVar15,puVar18,(byte *)0x0,0,*(uint *)(puVar4 + 0x105c),2,
|
|
local_res10,*param_4);
|
|
if ((int)uVar5 == 0) {
|
|
if (local_res10[0] == 1) {
|
|
if (*(uint *)(param_3 + 0x18) < local_res18[0]) {
|
|
FUN_14006cb70(pvVar8,(ulonglong)local_res18[0],pvVar15,puVar18);
|
|
local_80 = PTR_DAT_1401ac010;
|
|
FUN_140053d20((longlong *)&local_80,
|
|
L"Decryption result is larger! Memory corruption may occur!",pvVar15,puVar18);
|
|
local_58 = 0;
|
|
local_50 = 0;
|
|
local_48 = 0;
|
|
local_40 = 0;
|
|
local_60 = Proud::ByteArray::vftable;
|
|
ppuVar19 = &local_80;
|
|
uVar16 = 0;
|
|
FUN_140078c10((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60);
|
|
FUN_140078360(&local_60);
|
|
*param_1 = 0;
|
|
ppuVar13 = &local_88;
|
|
FUN_140078ae0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19);
|
|
ppuVar11 = &local_88;
|
|
FUN_140064150((longlong *)ppuVar11,ppuVar13,uVar16,ppuVar19);
|
|
puVar4 = local_80;
|
|
if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_1401ac010)) &&
|
|
(puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) {
|
|
piVar6 = (int *)FUN_14006cb70(ppuVar11,ppuVar13,uVar16,ppuVar19);
|
|
local_70 = (ulonglong *)piVar6;
|
|
FUN_14006b350(piVar6);
|
|
local_68 = 1;
|
|
piVar2 = (int *)(puVar4 + -4);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (*piVar2 == 0) {
|
|
FUN_14006cc60(puVar1);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar6);
|
|
}
|
|
}
|
|
else {
|
|
FUN_1400146f0(param_2,local_res18[0],(SIZE_T)pvVar15);
|
|
*param_1 = 0;
|
|
}
|
|
}
|
|
else {
|
|
FUN_14006cb70(pvVar8,uVar12,pvVar15,puVar18);
|
|
local_80 = PTR_DAT_1401ac010;
|
|
FUN_140053d20((longlong *)&local_80,L"Incorrect Packet",pvVar15,puVar18);
|
|
local_58 = 0;
|
|
local_50 = 0;
|
|
local_48 = 0;
|
|
local_40 = 0;
|
|
local_60 = Proud::ByteArray::vftable;
|
|
ppuVar19 = &local_80;
|
|
uVar16 = 0;
|
|
FUN_140078c10((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60);
|
|
FUN_140078360(&local_60);
|
|
*param_1 = 0;
|
|
ppuVar13 = &local_88;
|
|
puVar9 = param_1;
|
|
FUN_140078ae0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19);
|
|
puVar10 = local_88;
|
|
if (local_88 != (ulonglong *)0x0) {
|
|
local_70 = local_88;
|
|
FUN_14006b350((int *)local_88);
|
|
local_68 = 1;
|
|
local_88[8] = local_88[8] - 1;
|
|
if (local_88[8] == 0) {
|
|
FUN_14006b3e0((longlong)puVar10);
|
|
local_68 = 0;
|
|
FUN_1400640e0((undefined4 *)local_88,ppuVar13,uVar16,ppuVar19);
|
|
puVar9 = local_88;
|
|
}
|
|
else {
|
|
FUN_14006b3e0((longlong)puVar10);
|
|
puVar9 = puVar10;
|
|
}
|
|
}
|
|
puVar4 = local_80;
|
|
if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_1401ac010)) &&
|
|
(puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) {
|
|
piVar6 = (int *)FUN_14006cb70(puVar9,ppuVar13,uVar16,ppuVar19);
|
|
local_70 = (ulonglong *)piVar6;
|
|
FUN_14006b350(piVar6);
|
|
local_68 = 1;
|
|
piVar2 = (int *)(puVar4 + -4);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (*piVar2 == 0) {
|
|
FUN_14006cc60(puVar1);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar6);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
FUN_14006cb70(pvVar8,uVar12,pvVar15,puVar18);
|
|
local_80 = PTR_DAT_1401ac010;
|
|
FUN_140053d20((longlong *)&local_80,L"Error",pvVar15,puVar18);
|
|
local_58 = 0;
|
|
local_50 = 0;
|
|
local_48 = 0;
|
|
local_40 = 0;
|
|
local_60 = Proud::ByteArray::vftable;
|
|
ppuVar19 = &local_80;
|
|
uVar16 = 0;
|
|
FUN_140078c10((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60);
|
|
FUN_140078360(&local_60);
|
|
*param_1 = 0;
|
|
ppuVar13 = &local_88;
|
|
puVar9 = param_1;
|
|
FUN_140078ae0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19);
|
|
puVar10 = local_88;
|
|
if (local_88 != (ulonglong *)0x0) {
|
|
local_70 = local_88;
|
|
FUN_14006b350((int *)local_88);
|
|
local_68 = 1;
|
|
local_88[8] = local_88[8] - 1;
|
|
if (local_88[8] == 0) {
|
|
FUN_14006b3e0((longlong)puVar10);
|
|
local_68 = 0;
|
|
FUN_1400640e0((undefined4 *)local_88,ppuVar13,uVar16,ppuVar19);
|
|
puVar9 = local_88;
|
|
}
|
|
else {
|
|
FUN_14006b3e0((longlong)puVar10);
|
|
puVar9 = puVar10;
|
|
}
|
|
}
|
|
puVar4 = local_80;
|
|
if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_1401ac010)) &&
|
|
(puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) {
|
|
piVar6 = (int *)FUN_14006cb70(puVar9,ppuVar13,uVar16,ppuVar19);
|
|
local_70 = (ulonglong *)piVar6;
|
|
FUN_14006b350(piVar6);
|
|
local_68 = 1;
|
|
piVar2 = (int *)(puVar4 + -4);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (*piVar2 == 0) {
|
|
FUN_14006cc60(puVar1);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar6);
|
|
}
|
|
}
|
|
return param_1;
|
|
}
|
|
|