229 lines
6.7 KiB
C
229 lines
6.7 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x1400cbbe0 FUN_1400cbbe0
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_1400cbbe0(char *param_1,uint param_2,longlong param_3,uint param_4,int param_5)
|
|
|
|
{
|
|
byte bVar1;
|
|
uint *puVar2;
|
|
undefined4 uVar3;
|
|
undefined4 *puVar4;
|
|
undefined4 extraout_var;
|
|
undefined4 extraout_var_00;
|
|
int *piVar5;
|
|
uint uVar6;
|
|
ulonglong uVar7;
|
|
byte *pbVar8;
|
|
longlong lVar9;
|
|
bool bVar10;
|
|
uint local_res8;
|
|
int iVar11;
|
|
uint local_38;
|
|
uint local_34;
|
|
uint local_30;
|
|
uint local_2c;
|
|
longlong local_28;
|
|
|
|
uVar7 = (ulonglong)param_4;
|
|
if ((param_1 == (char *)0x0) || (param_3 == 0)) {
|
|
return 0x10;
|
|
}
|
|
if ((param_2 < 2) || ((*param_1 != '0' && (*param_1 != '1')))) {
|
|
return 7;
|
|
}
|
|
bVar1 = param_1[1];
|
|
local_34 = 1;
|
|
if (bVar1 < 0x80) {
|
|
local_res8 = (uint)bVar1;
|
|
local_34 = 2;
|
|
}
|
|
else if ((char)bVar1 < '\0') {
|
|
if (bVar1 < 0x81) {
|
|
return 7;
|
|
}
|
|
if (0x83 < bVar1) {
|
|
return 7;
|
|
}
|
|
uVar6 = bVar1 & 0x7f;
|
|
local_34 = 2;
|
|
if (param_2 < uVar6 + 2) {
|
|
return 7;
|
|
}
|
|
local_res8 = 0;
|
|
if ((bVar1 & 0x7f) != 0) {
|
|
pbVar8 = (byte *)(param_1 + 2);
|
|
local_34 = uVar6 + 2;
|
|
do {
|
|
bVar1 = *pbVar8;
|
|
pbVar8 = pbVar8 + 1;
|
|
local_res8 = local_res8 << 8 | (uint)bVar1;
|
|
uVar6 = uVar6 - 1;
|
|
} while (uVar6 != 0);
|
|
}
|
|
}
|
|
else {
|
|
local_res8 = (uint)param_1;
|
|
}
|
|
if (param_2 < local_res8 + local_34) {
|
|
return 7;
|
|
}
|
|
if (param_4 != 0) {
|
|
puVar4 = (undefined4 *)(param_3 + 0x14);
|
|
do {
|
|
*puVar4 = 0;
|
|
puVar4 = puVar4 + 0xe;
|
|
uVar7 = uVar7 - 1;
|
|
} while (uVar7 != 0);
|
|
}
|
|
local_30 = 0;
|
|
local_28 = 0;
|
|
if (param_4 != 0) {
|
|
do {
|
|
lVar9 = local_28 * 0x38;
|
|
local_2c = *(uint *)(lVar9 + 0x10 + param_3);
|
|
iVar11 = *(int *)(lVar9 + param_3);
|
|
puVar2 = *(uint **)(lVar9 + 8 + param_3);
|
|
if ((param_5 == 0) && (*(int *)(lVar9 + 0x14 + param_3) == 1)) goto LAB_1400cbde0;
|
|
if (iVar11 == 0) break;
|
|
local_38 = local_res8;
|
|
switch(iVar11) {
|
|
case 1:
|
|
uVar7 = FUN_1400d24d0(param_1 + local_34,local_res8,puVar2);
|
|
if ((int)uVar7 != 0) {
|
|
return uVar7;
|
|
}
|
|
uVar7 = FUN_1400d24b0(&local_38);
|
|
break;
|
|
case 2:
|
|
uVar7 = FUN_1400d2320((byte *)(param_1 + local_34),local_res8,(longlong)puVar2);
|
|
if ((int)uVar7 == 0) {
|
|
uVar7 = FUN_1400d2220((longlong)puVar2,(int *)&local_38);
|
|
break;
|
|
}
|
|
goto LAB_1400cbdc4;
|
|
case 3:
|
|
uVar7 = FUN_1400d21c0((byte *)(param_1 + local_34),local_res8,puVar2);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
uVar3 = FUN_1400d2170(*puVar2,(int *)&local_38);
|
|
uVar7 = CONCAT44(extraout_var,uVar3);
|
|
break;
|
|
case 4:
|
|
uVar7 = FUN_1400d2010((byte *)(param_1 + local_34),local_res8,(longlong)puVar2,&local_2c);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
|
|
uVar7 = FUN_1400d1fc0((ulonglong)local_2c,(int *)&local_38);
|
|
break;
|
|
case 5:
|
|
uVar7 = FUN_1400d1ec0((byte *)(param_1 + local_34),local_res8,(byte *)puVar2,&local_2c);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
|
|
uVar7 = FUN_1400d1e70(local_2c,(int *)&local_38);
|
|
break;
|
|
case 6:
|
|
if (((local_res8 < 2) || (param_1[local_34] != '\x05')) || (param_1[local_34 + 1] != '\0'))
|
|
{
|
|
if (param_5 != 0) {
|
|
return 7;
|
|
}
|
|
goto LAB_1400cbde0;
|
|
}
|
|
local_38 = 2;
|
|
goto LAB_1400cbd88;
|
|
case 7:
|
|
uVar7 = FUN_1400d1cf0((byte *)(param_1 + local_34),local_res8,puVar2,&local_2c);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
|
|
uVar7 = FUN_1400d1bc0(puVar2,local_2c,(int *)&local_38);
|
|
break;
|
|
case 8:
|
|
uVar7 = FUN_1400d1a80((byte *)(param_1 + local_34),local_res8,(undefined1 *)puVar2,&local_2c
|
|
);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
|
|
uVar7 = FUN_1400d19e0((byte *)puVar2,local_2c,(int *)&local_38);
|
|
break;
|
|
case 9:
|
|
uVar7 = FUN_1400d1840((byte *)(param_1 + local_34),local_res8,(undefined1 *)puVar2,&local_2c
|
|
);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
|
|
uVar7 = FUN_1400d17a0((byte *)puVar2,local_2c,(int *)&local_38);
|
|
break;
|
|
case 10:
|
|
uVar7 = FUN_1400d15a0((byte *)(param_1 + local_34),local_res8,(ushort *)puVar2,&local_2c);
|
|
if ((int)uVar7 != 0) goto LAB_1400cbdc4;
|
|
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
|
|
uVar7 = FUN_1400d1490((ushort *)puVar2,local_2c,(int *)&local_38);
|
|
break;
|
|
case 0xb:
|
|
iVar11 = FUN_1400d1190((longlong)(param_1 + local_34),&local_38,puVar2);
|
|
uVar7 = CONCAT44(extraout_var_00,iVar11);
|
|
goto joined_r0x0001400cc086;
|
|
case 0xc:
|
|
uVar7 = FUN_1400d0ba0((byte *)(param_1 + local_34),&local_38,(longlong)puVar2,local_2c);
|
|
iVar11 = (int)uVar7;
|
|
joined_r0x0001400cc086:
|
|
if (iVar11 == 0) goto LAB_1400cbd88;
|
|
LAB_1400cbdc4:
|
|
if (param_5 != 0) {
|
|
return uVar7;
|
|
}
|
|
goto LAB_1400cbde0;
|
|
case 0xd:
|
|
case 0xf:
|
|
if (iVar11 == 0xf) {
|
|
bVar10 = (param_1[local_34] & 0x3fU) == 0x31;
|
|
LAB_1400cc062:
|
|
if (!bVar10) {
|
|
return 7;
|
|
}
|
|
}
|
|
else if (iVar11 == 0xd) {
|
|
bVar10 = (param_1[local_34] & 0x3fU) == 0x30;
|
|
goto LAB_1400cc062;
|
|
}
|
|
iVar11 = 1;
|
|
goto LAB_1400cc004;
|
|
case 0xe:
|
|
iVar11 = 0;
|
|
LAB_1400cc004:
|
|
uVar7 = FUN_1400cbbe0(param_1 + local_34,local_res8,(longlong)puVar2,local_2c,iVar11);
|
|
if ((int)uVar7 == 0) {
|
|
uVar7 = FUN_1400d0f10((longlong)puVar2,local_2c,(int *)&local_38);
|
|
break;
|
|
}
|
|
goto LAB_1400cbdc4;
|
|
default:
|
|
return 0x10;
|
|
}
|
|
if ((int)uVar7 != 0) {
|
|
return uVar7;
|
|
}
|
|
LAB_1400cbd88:
|
|
local_34 = local_34 + local_38;
|
|
local_res8 = local_res8 - local_38;
|
|
*(undefined4 *)(lVar9 + 0x14 + param_3) = 1;
|
|
if (param_5 == 0) {
|
|
local_30 = 0xffffffff;
|
|
local_28 = -1;
|
|
}
|
|
LAB_1400cbde0:
|
|
local_30 = local_30 + 1;
|
|
local_28 = local_28 + 1;
|
|
} while (local_30 < param_4);
|
|
}
|
|
uVar6 = 0;
|
|
if (param_4 != 0) {
|
|
piVar5 = (int *)(param_3 + 0x14);
|
|
do {
|
|
if (*piVar5 == 0) {
|
|
return 7;
|
|
}
|
|
uVar6 = uVar6 + 1;
|
|
piVar5 = piVar5 + 0xe;
|
|
} while (uVar6 < param_4);
|
|
}
|
|
return 0;
|
|
}
|
|
|