161 lines
4.5 KiB
C
161 lines
4.5 KiB
C
/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
|
|
* Ghidra 12.1.2 decompiler output for 0x14000f2a0 FUN_14000f2a0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
void ** FUN_14000f2a0(void **param_1,longlong *param_2,char *param_3)
|
|
|
|
{
|
|
int *piVar1;
|
|
int iVar2;
|
|
char cVar3;
|
|
short sVar4;
|
|
char *pcVar5;
|
|
longlong *plVar6;
|
|
longlong lVar7;
|
|
HMODULE pHVar8;
|
|
uint uVar9;
|
|
ulonglong uVar10;
|
|
char *pcVar11;
|
|
ulonglong uVar12;
|
|
short *psVar13;
|
|
longlong *plVar14;
|
|
short *psVar15;
|
|
undefined1 auStack_d8 [32];
|
|
short *local_b8;
|
|
undefined8 local_b0;
|
|
longlong *local_a0;
|
|
longlong *local_98;
|
|
void *local_90 [2];
|
|
void *local_80;
|
|
void *local_78;
|
|
ulonglong local_68 [2];
|
|
longlong local_58;
|
|
ulonglong local_50;
|
|
ulonglong local_40;
|
|
|
|
local_b0 = 0xfffffffffffffffe;
|
|
local_40 = DAT_14016f5a0 ^ (ulonglong)auStack_d8;
|
|
uVar12 = 0;
|
|
local_b8 = (short *)((ulonglong)local_b8 & 0xffffffff00000000);
|
|
local_50 = 0xf;
|
|
local_58 = 0;
|
|
local_68[0]._0_1_ = '\0';
|
|
uVar10 = 0xffffffffffffffff;
|
|
pcVar11 = param_3;
|
|
do {
|
|
if (uVar10 == 0) break;
|
|
uVar10 = uVar10 - 1;
|
|
cVar3 = *pcVar11;
|
|
pcVar11 = pcVar11 + 1;
|
|
} while (cVar3 != '\0');
|
|
local_98 = param_2;
|
|
FUN_14000c9e0(local_68,param_3,~uVar10 - 1);
|
|
if (param_2[4] == 0) {
|
|
local_a0 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
pcVar11 = (char *)local_68;
|
|
if (0xf < local_50) {
|
|
pcVar11 = (char *)CONCAT71(local_68[0]._1_7_,(char)local_68[0]);
|
|
}
|
|
pcVar5 = (char *)local_68;
|
|
if (0xf < local_50) {
|
|
pcVar5 = (char *)CONCAT71(local_68[0]._1_7_,(char)local_68[0]);
|
|
}
|
|
for (; pcVar5 != pcVar11 + local_58; pcVar5 = pcVar5 + 1) {
|
|
uVar12 = uVar12 ^ (uVar12 >> 2) + uVar12 * 0x40 + 0x9e3779b9 + (longlong)*pcVar5;
|
|
}
|
|
local_a0 = FUN_140010640((longlong *)(*param_2 + (uVar12 % (ulonglong)param_2[1]) * 8),local_68)
|
|
;
|
|
}
|
|
plVar6 = local_a0;
|
|
if (0xf < local_50) {
|
|
operator_delete((void *)CONCAT71(local_68[0]._1_7_,(char)local_68[0]));
|
|
}
|
|
local_50 = 0xf;
|
|
local_58 = 0;
|
|
local_68[0]._0_1_ = '\0';
|
|
if (plVar6 == (longlong *)0x0) {
|
|
param_1[3] = (void *)0x7;
|
|
param_1[2] = (void *)0x0;
|
|
*(undefined2 *)param_1 = 0;
|
|
}
|
|
else {
|
|
plVar14 = plVar6 + 6;
|
|
if (0xf < (ulonglong)plVar6[9]) {
|
|
plVar14 = (longlong *)*plVar14;
|
|
}
|
|
lVar7 = (**(code **)(PTR_PTR_14016f508 + 0x18))(&PTR_PTR_14016f508);
|
|
psVar13 = (short *)(lVar7 + 0x18);
|
|
local_b8 = psVar13;
|
|
if ((plVar14 == (longlong *)0x0) || (((ulonglong)plVar14 & 0xffffffffffff0000) != 0)) {
|
|
FUN_14000fdd0((longlong *)&local_b8,(LPCSTR)plVar14);
|
|
psVar13 = local_b8;
|
|
}
|
|
else {
|
|
uVar9 = (uint)plVar14 & 0xffff;
|
|
pHVar8 = FUN_1400112b0(uVar9,0);
|
|
if (pHVar8 != (HMODULE)0x0) {
|
|
FUN_140011650((longlong *)&local_b8,pHVar8,uVar9);
|
|
psVar13 = local_b8;
|
|
}
|
|
}
|
|
local_78 = (void *)0x7;
|
|
local_80 = (void *)0x0;
|
|
local_90[0] = (void *)((ulonglong)local_90[0] & 0xffffffffffff0000);
|
|
uVar12 = 0xffffffffffffffff;
|
|
psVar15 = psVar13;
|
|
do {
|
|
if (uVar12 == 0) break;
|
|
uVar12 = uVar12 - 1;
|
|
sVar4 = *psVar15;
|
|
psVar15 = psVar15 + 1;
|
|
} while (sVar4 != 0);
|
|
FUN_140001710((ulonglong *)local_90,psVar13,~uVar12 - 1);
|
|
param_1[3] = (void *)0x7;
|
|
param_1[2] = (void *)0x0;
|
|
*(undefined2 *)param_1 = 0;
|
|
if (param_1 != local_90) {
|
|
if ((void *)0x7 < param_1[3]) {
|
|
operator_delete(*param_1);
|
|
}
|
|
param_1[3] = (void *)0x7;
|
|
param_1[2] = (void *)0x0;
|
|
*(undefined2 *)param_1 = 0;
|
|
if (local_78 < (void *)0x8) {
|
|
memmove(param_1,local_90,(longlong)local_80 * 2 + 2);
|
|
}
|
|
else {
|
|
*param_1 = local_90[0];
|
|
local_90[0] = (void *)0x0;
|
|
}
|
|
param_1[2] = local_80;
|
|
param_1[3] = local_78;
|
|
local_78 = (void *)0x7;
|
|
local_80 = (void *)0x0;
|
|
local_90[0] = (void *)((ulonglong)local_90[0] & 0xffffffffffff0000);
|
|
}
|
|
if ((void *)0x7 < local_78) {
|
|
operator_delete(local_90[0]);
|
|
}
|
|
local_78 = (void *)0x7;
|
|
local_80 = (void *)0x0;
|
|
local_90[0] = (void *)((ulonglong)local_90[0] & 0xffffffffffff0000);
|
|
LOCK();
|
|
piVar1 = (int *)(psVar13 + -4);
|
|
iVar2 = *piVar1;
|
|
*piVar1 = *piVar1 + -1;
|
|
UNLOCK();
|
|
if (iVar2 + -1 < 1) {
|
|
(**(code **)(**(longlong **)(psVar13 + -0xc) + 8))();
|
|
}
|
|
}
|
|
if (*param_2 != 0) {
|
|
FUN_140010570(param_2);
|
|
}
|
|
return param_1;
|
|
}
|
|
|