Skip to content

Instantly share code, notes, and snippets.

@ammarfaizi2
Created July 1, 2019 06:48
Show Gist options
  • Save ammarfaizi2/17cb0de599edfb27ceba6bdf507f37af to your computer and use it in GitHub Desktop.
Save ammarfaizi2/17cb0de599edfb27ceba6bdf507f37af to your computer and use it in GitHub Desktop.
void FUN_0037670c(longlong lParm1)
{
bool bVar1;
undefined8 *puVar2;
undefined *puVar3;
char cVar4;
bool bVar5;
byte bVar6;
longlong in_tpidr_el0;
size_t sVar7;
int iVar8;
longlong lVar9;
undefined8 *__ptr;
undefined8 *puVar10;
ulonglong uVar11;
byte *__dest;
byte *__ptr_00;
void *__dest_00;
uint uVar12;
char *__s;
char *__s1;
undefined8 uVar13;
longlong lVar14;
longlong *plVar15;
undefined8 uVar16;
code *pcVar17;
uint local_128 [25];
byte abStack196 [40];
char acStack156 [39];
char cStack117;
undefined local_74;
longlong local_68;
local_68 = *(longlong *)(in_tpidr_el0 + 0x28);
if (*(longlong *)(lParm1 + 0x18) == 0) {
lVar9 = FUN_00307a20();
lVar9 = (**(code **)(**(longlong **)(lVar9 + 0x10) + 0x2d8))();
*(longlong *)(lParm1 + 0x18) = lVar9;
if (lVar9 == 0) goto LAB_00376b98;
}
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x2e0))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
lVar9 = *(longlong *)(lParm1 + 0x10);
if (*(char *)(lVar9 + 0x1b) != '\0') {
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x308))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18),&UNK_004a5eb1);
lVar9 = *(longlong *)(lParm1 + 0x10);
}
if (*(int *)(lVar9 + 0x94) != 0) {
uVar12 = 0;
do {
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x308))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18),
*(undefined8 *)
(*(longlong *)(*(longlong *)(lParm1 + 0x10) + 0x78) + (ulonglong)uVar12 * 8));
lVar9 = *(longlong *)(lParm1 + 0x10);
uVar12 = uVar12 + 1;
} while (uVar12 < *(uint *)(lVar9 + 0x94));
}
if (*(char *)(lVar9 + 0x1b) == '\0') {
bVar6 = 0;
LAB_003769d4:
lVar9 = FUN_00307a20();
plVar15 = *(longlong **)(lVar9 + 0x10);
lVar9 = *(longlong *)(lParm1 + 0x10);
uVar16 = *(undefined8 *)(lParm1 + 0x18);
puVar3 = &DAT_00637778;
uVar13 = *(undefined8 *)(lVar9 + 0x28);
pcVar17 = *(code **)(*plVar15 + 0x328);
sVar7 = strlen(&DAT_00637778);
if (sVar7 == 0) {
puVar3 = (undefined *)0x0;
}
(*pcVar17)(plVar15,uVar16,uVar13,puVar3,lVar9,FUN_00376e7c,FUN_00376e94,FUN_003771c4);
lVar9 = FUN_00307a20();
iVar8 = (**(code **)(**(longlong **)(lVar9 + 0x10) + 0x2f0))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
lVar9 = *(longlong *)(lParm1 + 0x10);
*(longlong *)(lVar9 + 0x20) = (longlong)iVar8;
if (iVar8 != 0) goto LAB_00376af8;
lVar9 = FUN_00307a20();
lVar9 = (**(code **)(**(longlong **)(lVar9 + 0x10) + 0x330))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
lVar14 = *(longlong *)(lParm1 + 0x10);
*(longlong *)(lVar14 + 0x10) = lVar9;
*(undefined8 *)(lVar14 + 0x50) = *(undefined8 *)(lVar14 + 0x58);
*(undefined8 *)(lVar14 + 0x40) = *(undefined8 *)(lVar14 + 0x48);
if ((bool)(bVar6 & lVar9 == 200)) {
__dest = (byte *)operator.new[](*(int *)(lVar14 + 0x68) + 1);
memcpy(__dest,*(void **)(lVar14 + 0x60),*(size_t *)(lVar14 + 0x68));
__dest[(ulonglong)*(uint *)(lVar14 + 0x68)] = 0;
sVar7 = strlen((char *)__dest);
__ptr_00 = (byte *)malloc(sVar7 + 1);
if (__ptr_00 == (byte *)0x0) {
local_128[0] = 0;
*(undefined8 *)(lVar14 + 0x10) = 500;
}
else {
FUN_00318f18(__dest,__ptr_00,local_128);
}
_ZdaPv(__dest);
lVar9 = *(longlong *)(lParm1 + 0x10);
if (*(longlong *)(lVar9 + 0x10) == 200) {
lVar14 = *(longlong *)(lVar9 + 0x40);
sVar7 = strlen(acStack156);
uVar11 = (ulonglong)sVar7 + lVar14;
__dest_00 = operator.new[]((int)uVar11 + 1);
memcpy(__dest_00,*(void **)(lVar9 + 0x50),(size_t)*(undefined8 *)(lVar9 + 0x40));
strcpy((char *)((longlong)__dest_00 + *(longlong *)(lVar9 + 0x40)),acStack156);
lVar9 = FUN_00307a20();
uVar11 = (**(code **)(**(longlong **)(lVar9 + 0x10) + 0x2a0))
(*(longlong **)(lVar9 + 0x10),__dest_00,uVar11 & 0xffffffff,__ptr_00,
(ulonglong)local_128[0]);
if ((uVar11 & 1) == 0) {
*(undefined8 *)(*(longlong *)(lParm1 + 0x10) + 0x10) = 500;
}
_ZdaPv(__dest_00);
}
free(__ptr_00);
}
}
else {
if (*(char ***)(lVar9 + 0x80) == (char **)0x0) {
bVar6 = 0;
LAB_003769bc:
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x310))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
goto LAB_003769d4;
}
__s1 = **(char ***)(lVar9 + 0x80);
if (__s1 == (char *)0x0) {
bVar6 = 0;
LAB_003769b4:
if (*(char *)(lVar9 + 0x1b) == '\0') goto LAB_003769d4;
goto LAB_003769bc;
}
bVar6 = 0;
uVar12 = 0;
bVar5 = false;
__s = __s1;
LAB_00376828:
do {
__s = __s;
__s = __s + 1;
cVar4 = *__s;
if (cVar4 != '=') {
if (cVar4 != '\0') goto LAB_00376828;
}
if (cVar4 != '\0') {
*__s = '\0';
lVar9 = FUN_00307a20();
plVar15 = *(longlong **)(lVar9 + 0x10);
uVar16 = *(undefined8 *)(lParm1 + 0x18);
pcVar17 = *(code **)(*plVar15 + 800);
sVar7 = strlen(__s);
(*pcVar17)(plVar15,uVar16,__s1,(ulonglong)sVar7,__s);
iVar8 = strncmp(__s1,"request_data",0xc);
if (iVar8 == 0) {
__ptr = (undefined8 *)operator.new(0x180);
__ptr[0x2f] = 0;
puVar10 = FUN_0037ef98();
puVar2 = puVar10 + 0xc;
if (*(char *)(lParm1 + 0xc) != '\0') {
puVar2 = puVar10 + 0x10;
}
sVar7 = strlen(__s);
uVar11 = FUN_00376c74(__ptr,__s,sVar7,puVar2,*(size_t *)(puVar10 + 0x15),
(longlong)abStack196);
if ((uVar11 & 1) == 0) {
bVar5 = true;
}
else {
__s1 = &cStack117;
lVar9 = 0x13;
do {
cVar4 = "0123456789abcdef"[(ulonglong)abStack196[lVar9] & 0xf];
__s1[-1] = "0123456789abcdef"[(ulonglong)(abStack196[lVar9] >> 4)];
*__s1 = cVar4;
bVar1 = 0 < lVar9;
__s1 = __s1 + -2;
lVar9 = lVar9 + -1;
} while (bVar1);
local_74 = 0;
snprintf((char *)local_128,100,"X-Message-Code: %s",acStack156);
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x308))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18),local_128);
}
if ((void *)__ptr[0x2f] != (void *)0x0) {
_ZdaPv((void *)__ptr[0x2f]);
}
_ZdlPv(__ptr);
bVar6 = 1;
}
*__s = '=';
lVar9 = *(longlong *)(lParm1 + 0x10);
}
uVar12 = uVar12 + 1;
__s1 = *(char **)(*(longlong *)(lVar9 + 0x80) + (ulonglong)uVar12 * 8);
__s = __s1;
} while (__s1 != (char *)0x0);
if (!bVar5) goto LAB_003769b4;
*(undefined8 *)(lVar9 + 0x20) = 2;
LAB_00376af8:
*(undefined8 *)(lVar9 + 0x10) = 500;
}
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x2f8))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x2e8))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
lVar9 = FUN_00307a20();
(**(code **)(**(longlong **)(lVar9 + 0x10) + 0x300))
(*(longlong **)(lVar9 + 0x10),*(undefined8 *)(lParm1 + 0x18));
*(undefined8 *)(lParm1 + 0x18) = 0;
if ((*(char *)(*(longlong *)(lParm1 + 0x10) + 0x19) != '\0') &&
(plVar15 = *(longlong **)(*(longlong *)(lParm1 + 0x10) + 0x38), plVar15 != (longlong *)0x0)) {
iVar8 = (**(code **)(*plVar15 + 0x18))();
lVar9 = *(longlong *)(lParm1 + 0x10);
if (iVar8 != 0) {
*(undefined8 *)(lVar9 + 0x20) = 0x17;
}
if (*(longlong **)(lVar9 + 0x38) != (longlong *)0x0) {
(**(code **)(**(longlong **)(lVar9 + 0x38) + 8))();
lVar9 = *(longlong *)(lParm1 + 0x10);
}
*(undefined8 *)(lVar9 + 0x38) = 0;
}
LAB_00376b98:
if (*(longlong *)(in_tpidr_el0 + 0x28) != local_68) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment