/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400cbc40 FUN_1400cbc40 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Type propagation algorithm not settling */ void FUN_1400cbc40(undefined8 *param_1) { char cVar1; LPCWSTR pWVar2; longlong lVar3; LPCWSTR ****pppppWVar4; undefined *puVar5; undefined8 *puVar6; bool bVar7; DWORD DVar8; BOOL BVar9; int iVar10; errno_t eVar11; longlong *plVar12; int *piVar13; undefined8 *puVar14; LPCWSTR *****ppppppWVar15; wchar_t *pwVar16; HANDLE pvVar17; undefined1 *puVar18; LPCWSTR ******lpFileName; int *piVar19; LPCWSTR ******pppppppWVar20; undefined *lpBuffer; LPCWSTR ******lpBuffer_00; LPCWSTR ******pppppppWVar21; LPCWSTR *****ppppppWVar22; LPCWSTR ******pppppppWVar23; int iVar24; PLONG pLVar25; ulonglong uVar26; rsize_t rVar27; LPDWORD lpNumberOfBytesWritten; ulonglong uVar28; undefined1 auStackY_3b8 [32]; undefined2 local_378 [4]; LPCWSTR ******local_370; LPCWSTR ******local_368; LPCWSTR *****local_360; LPCWSTR ******local_358; undefined *local_350; ulonglong local_348; undefined8 *local_340; undefined8 *local_338; undefined8 *local_330; longlong local_328; DWORD local_320; DWORD DStack_31c; DWORD local_318; DWORD DStack_314; longlong local_310; DWORD local_308 [2]; undefined8 local_300; __time64_t local_2f8; undefined8 local_2f0; DWORD local_2e8; DWORD local_2e4; DWORD local_2e0 [2]; longlong local_2d8; LPCWSTR ******local_2d0; undefined1 local_2c8; __time64_t local_2c0; DWORD local_2b8 [2]; LPCWSTR ****local_2b0; int *local_2a8; undefined1 local_2a0; LPCWSTR ******local_298; undefined1 local_290; int *local_288; undefined1 local_280; undefined8 local_278; undefined8 *local_270; undefined8 *local_268; undefined1 *local_258; undefined1 local_250 [264]; undefined1 *local_148; undefined1 local_140 [264]; ulonglong local_38; local_278 = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_3b8; local_320 = GetFileSize((HANDLE)*param_1,&DStack_31c); if ((local_320 != 0xffffffff) || (DVar8 = FUN_1400a0200(), local_2f0 = local_348, -1 < (int)DVar8) ) { local_2f0 = CONCAT44(DStack_31c,local_320); } rVar27 = 0; pLVar25 = (PLONG)((longlong)&local_2f0 + 4); uVar26 = local_2f0 & 0xffffffff; pvVar17 = (HANDLE)*param_1; DVar8 = SetFilePointer(pvVar17,(LONG)local_2f0,pLVar25,0); if (DVar8 == 0xffffffff) { FUN_1400a0200(); } FUN_14006cb70(pvVar17,uVar26,pLVar25,rVar27); local_350 = PTR_DAT_1401ac010; local_2c0 = _time64((__time64_t *)0x0); plVar12 = FUN_1400b0130(&local_2c0,&local_310,L"%#c"); pWVar2 = (LPCWSTR)*plVar12; local_258 = local_250; if (pWVar2 == (LPCWSTR)0x0) { local_258 = (undefined1 *)0x0; goto LAB_1400cbdff; } iVar10 = lstrlenW(pWVar2); iVar10 = iVar10 + 1; if (iVar10 < 0) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80070057); } if (local_258 == local_250) { if (0x80 < iVar10) { puVar18 = calloc((longlong)iVar10,2); goto LAB_1400cbd91; } LAB_1400cbda5: puVar18 = local_250; } else { if (iVar10 < 0x81) { free(local_258); goto LAB_1400cbda5; } puVar18 = _recalloc(local_258,(longlong)iVar10,2); if (puVar18 == (undefined1 *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } LAB_1400cbd91: if (puVar18 == (undefined1 *)0x0) { local_258 = puVar18; /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } } rVar27 = (longlong)iVar10 * 2; local_258 = puVar18; eVar11 = memcpy_s(puVar18,rVar27,pWVar2,rVar27); if (eVar11 != 0) { if (eVar11 == 0xc) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } if ((eVar11 == 0x16) || (eVar11 == 0x22)) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80070057); } if (eVar11 != 0x50) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80004005); } } LAB_1400cbdff: ppppppWVar22 = (LPCWSTR *****)0x0; FUN_140053d20((longlong *)&local_350,L"-------- Log start at %s --------\r\n",local_258,rVar27); if (local_258 != local_250) { free(local_258); } LOCK(); piVar19 = (int *)(local_310 + -8); iVar10 = *piVar19; *piVar19 = *piVar19 + -1; UNLOCK(); if (iVar10 + -1 < 1) { (**(code **)(**(longlong **)(local_310 + -0x18) + 8))(); } puVar5 = local_350; lpBuffer = PTR_DAT_1401ac010; iVar10 = 0; if (local_350 != (undefined *)0x0) { ppppppWVar15 = ppppppWVar22; if (local_350 != PTR_DAT_1401ac010) { ppppppWVar15 = (LPCWSTR *****)(ulonglong)*(uint *)(local_350 + -8); } lpBuffer = local_350; iVar10 = (int)ppppppWVar15; } uVar26 = (ulonglong)(uint)(iVar10 * 2); lpNumberOfBytesWritten = &local_2e8; pvVar17 = (HANDLE)*param_1; BVar9 = WriteFile(pvVar17,lpBuffer,iVar10 * 2,lpNumberOfBytesWritten,(LPOVERLAPPED)0x0); if (BVar9 == 0) { FUN_1400a0200(); } if (((puVar5 != (undefined *)0x0) && (puVar5 != PTR_DAT_1401ac010)) && (puVar5 + -8 != (undefined *)0x0)) { piVar13 = (int *)FUN_14006cb70(pvVar17,lpBuffer,uVar26,lpNumberOfBytesWritten); local_2a8 = piVar13; FUN_14006b350(piVar13); local_2a0 = 1; piVar19 = (int *)(puVar5 + -4); *piVar19 = *piVar19 + -1; if (*piVar19 == 0) { FUN_14006cc60(puVar5 + -8); } FUN_14006b3e0((longlong)piVar13); local_2a0 = 0; } cVar1 = *(char *)(param_1 + 0x10); local_350 = PTR_DAT_1401ac010; uVar28 = local_348; do { if (cVar1 != '\0') { return; } lpBuffer_00 = (LPCWSTR ******)0x12c; bVar7 = FUN_140076c10(param_1 + 2,300); if (bVar7) { local_340 = (undefined8 *)0x0; local_328 = 0; local_338 = (undefined8 *)0x0; local_330 = (undefined8 *)0x0; lpFileName = (LPCWSTR ******)(param_1 + 3); local_2d0 = lpFileName; FUN_14006b350((int *)lpFileName); local_2c8 = 1; if (*(char *)(param_1 + 10) == '\0') { lVar3 = param_1[0x14]; while (lVar3 != 0) { lpBuffer_00 = &local_360; plVar12 = FUN_1400cb580(param_1 + 0x11,(longlong *)lpBuffer_00,uVar26, lpNumberOfBytesWritten); puVar14 = (undefined8 *)FUN_14006cbf0(0x18); local_270 = puVar14; local_268 = puVar14; if (puVar14 != (undefined8 *)0x0) { puVar14[2] = 0; if (*plVar12 != 0) { *(longlong *)(*plVar12 + 8) = *(longlong *)(*plVar12 + 8) + 1; ppppppWVar15 = ppppppWVar22; if ((puVar14[2] != 0) && (*(longlong *)(puVar14[2] + 8) = *(longlong *)(puVar14[2] + 8) + -1, *(longlong *)(puVar14[2] + 8) == 0)) { ppppppWVar15 = (LPCWSTR *****)puVar14[2]; } puVar14[2] = *plVar12; if (ppppppWVar15 != (LPCWSTR *****)0x0) { pppppWVar4 = *ppppppWVar15; if (pppppWVar4 != (LPCWSTR ****)0x0) { FUN_1400031e0((longlong *)(pppppWVar4 + 1),lpBuffer_00,uVar26, lpNumberOfBytesWritten); operator_delete(pppppWVar4); } FUN_14006cc60(ppppppWVar15); } } } ppppppWVar15 = local_360; puVar14[1] = local_330; *puVar14 = 0; local_328 = local_328 + 1; puVar6 = puVar14; if (local_330 != (undefined8 *)0x0) { *local_330 = puVar14; puVar6 = local_338; } local_338 = puVar6; local_330 = puVar14; if ((local_360 != (LPCWSTR *****)0x0) && (local_360[1] = (LPCWSTR ****)((longlong)local_360[1] + -1), local_360[1] == (LPCWSTR ****)0x0)) { pppppWVar4 = *local_360; if (pppppWVar4 != (LPCWSTR ****)0x0) { FUN_1400031e0((longlong *)(pppppWVar4 + 1),lpBuffer_00,uVar26,lpNumberOfBytesWritten); operator_delete(pppppWVar4); } FUN_14006cc60(ppppppWVar15); } lpFileName = local_2d0; lVar3 = param_1[0x14]; } } FUN_14006b3e0((longlong)lpFileName); local_2c8 = 0; FUN_14006cb70(lpFileName,lpBuffer_00,uVar26,lpNumberOfBytesWritten); local_370 = (LPCWSTR ******)PTR_DAT_1401ac010; pppppppWVar23 = (LPCWSTR ******)PTR_DAT_1401ac010; while (local_328 != 0) { lpBuffer_00 = (LPCWSTR ******)&local_368; FUN_1400cb580((longlong *)&local_340,(longlong *)lpBuffer_00,uVar26,lpNumberOfBytesWritten); pppppppWVar21 = local_368; ppppppWVar15 = ppppppWVar22; if (local_368 != (LPCWSTR ******)0x0) { ppppppWVar15 = *local_368; } iVar10 = *(int *)ppppppWVar15; iVar24 = 0; if (iVar10 == 0) { if ((HANDLE)*param_1 != (HANDLE)0x0) { CloseHandle((HANDLE)*param_1); *param_1 = 0; } ppppppWVar15 = ppppppWVar22; if (pppppppWVar21 != (LPCWSTR ******)0x0) { ppppppWVar15 = *pppppppWVar21; } lpFileName = (LPCWSTR ******)ppppppWVar15[1]; if ((LPCWSTR ******)ppppppWVar15[1] == (LPCWSTR ******)0x0) { lpFileName = (LPCWSTR ******)PTR_DAT_1401ac010; } pppppppWVar20 = (LPCWSTR ******)param_1[1]; if (pppppppWVar20 == (LPCWSTR ******)0x0) { lpNumberOfBytesWritten = (LPDWORD)0x0; lpBuffer_00 = (LPCWSTR ******)0x40000000; uVar26 = 1; pvVar17 = CreateFileW((LPCWSTR)lpFileName,0x40000000,1,(LPSECURITY_ATTRIBUTES)0x0,4,0x80 ,(HANDLE)0x0); } else { lpNumberOfBytesWritten = (LPDWORD)0x1; uVar26 = 0x40000000; lpBuffer_00 = lpFileName; pvVar17 = FUN_1400a0220((longlong *)pppppppWVar20,(LPCWSTR)lpFileName,0x40000000,1, (LPSECURITY_ATTRIBUTES)0x0,4,0x80,0); lpFileName = pppppppWVar20; } if (pvVar17 == (HANDLE)0xffffffffffffffff) { DVar8 = FUN_1400a0200(); if ((int)DVar8 < 0) { *(undefined1 *)(param_1 + 10) = 1; goto LAB_1400cc559; } } else { *param_1 = pvVar17; } local_378[0] = 0xfeff; BVar9 = WriteFile((HANDLE)*param_1,local_378,2,local_308,(LPOVERLAPPED)0x0); if (BVar9 == 0) { FUN_1400a0200(); } local_318 = GetFileSize((HANDLE)*param_1,&DStack_314); if ((local_318 != 0xffffffff) || (DVar8 = FUN_1400a0200(), -1 < (int)DVar8)) { uVar28 = CONCAT44(DStack_314,local_318); } rVar27 = 0; pLVar25 = (PLONG)((longlong)&local_300 + 4); uVar26 = uVar28 & 0xffffffff; pvVar17 = (HANDLE)*param_1; local_300 = uVar28; DVar8 = SetFilePointer(pvVar17,(LONG)uVar28,pLVar25,0); if (DVar8 == 0xffffffff) { FUN_1400a0200(); } FUN_14006cb70(pvVar17,uVar26,pLVar25,rVar27); local_358 = (LPCWSTR ******)PTR_DAT_1401ac010; local_2f8 = _time64((__time64_t *)0x0); plVar12 = FUN_1400b0130(&local_2f8,(longlong *)&local_348,L"%#c"); pWVar2 = (LPCWSTR)*plVar12; local_148 = local_140; if (pWVar2 == (LPCWSTR)0x0) { local_148 = (undefined1 *)0x0; } else { iVar10 = lstrlenW(pWVar2); iVar10 = iVar10 + 1; if (iVar10 < 0) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80070057); } if (local_148 == local_140) { if (0x80 < iVar10) { puVar18 = calloc((longlong)iVar10,2); goto LAB_1400cc408; } LAB_1400cc41a: puVar18 = local_140; } else { if (iVar10 < 0x81) { free(local_148); goto LAB_1400cc41a; } puVar18 = _recalloc(local_148,(longlong)iVar10,2); if (puVar18 == (undefined1 *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } LAB_1400cc408: if (puVar18 == (undefined1 *)0x0) { local_148 = puVar18; /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } } rVar27 = (longlong)iVar10 * 2; local_148 = puVar18; eVar11 = memcpy_s(puVar18,rVar27,pWVar2,rVar27); if (eVar11 != 0) { if (eVar11 == 0xc) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } if ((eVar11 == 0x16) || (eVar11 == 0x22)) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80070057); } if (eVar11 != 0x50) { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x80004005); } } } FUN_140053d20((longlong *)&local_358,L"-------- Log start at %s --------\r\n",local_148, rVar27); if (local_148 != local_140) { free(local_148); } LOCK(); piVar19 = (int *)(local_348 - 8); iVar10 = *piVar19; *piVar19 = *piVar19 + -1; UNLOCK(); if (iVar10 + -1 < 1) { (**(code **)(**(longlong **)(local_348 - 0x18) + 8))(); } pppppppWVar23 = local_358; lpBuffer_00 = (LPCWSTR ******)PTR_DAT_1401ac010; if (local_358 != (LPCWSTR ******)0x0) { ppppppWVar15 = ppppppWVar22; if (local_358 != (LPCWSTR ******)PTR_DAT_1401ac010) { ppppppWVar15 = (LPCWSTR *****)(ulonglong)*(uint *)(local_358 + -1); } iVar24 = (int)ppppppWVar15; lpBuffer_00 = local_358; } uVar26 = (ulonglong)(uint)(iVar24 * 2); lpFileName = (LPCWSTR ******)*param_1; lpNumberOfBytesWritten = local_2b8; BVar9 = WriteFile(lpFileName,lpBuffer_00,iVar24 * 2,local_2b8,(LPOVERLAPPED)0x0); if (BVar9 == 0) { FUN_1400a0200(); } if (((pppppppWVar23 != (LPCWSTR ******)0x0) && (pppppppWVar23 != (LPCWSTR ******)PTR_DAT_1401ac010)) && (pppppppWVar23 + -1 != (LPCWSTR ******)0x0)) { lpFileName = (LPCWSTR ******) FUN_14006cb70(lpFileName,lpBuffer_00,uVar26,lpNumberOfBytesWritten); local_298 = lpFileName; FUN_14006b350((int *)lpFileName); local_290 = 1; pWVar2 = (LPCWSTR)((longlong)pppppppWVar23 + -4); *(int *)pWVar2 = *(int *)pWVar2 + -1; if (*(int *)pWVar2 == 0) { FUN_14006cc60(pppppppWVar23 + -1); } FUN_14006b3e0((longlong)lpFileName); local_290 = 0; } local_358 = (LPCWSTR ******)PTR_DAT_1401ac010; pppppppWVar21 = local_368; pppppppWVar23 = local_370; } else if (iVar10 == 1) { ppppppWVar15 = ppppppWVar22; if (local_368 != (LPCWSTR ******)0x0) { ppppppWVar15 = *local_368; } local_2b0 = ppppppWVar15[3]; plVar12 = FUN_1400b0130((__time64_t *)&local_2b0,&local_2d8,L"%#c"); lVar3 = *plVar12; ppppppWVar15 = ppppppWVar22; if (pppppppWVar21 != (LPCWSTR ******)0x0) { ppppppWVar15 = *pppppppWVar21; } pwVar16 = FUN_1400d9a00(*(int *)(ppppppWVar15 + 2)); FUN_140053d20((longlong *)&local_370,L"[%s] [%s] %s\r\n",pwVar16,lVar3); LOCK(); piVar19 = (int *)(local_2d8 + -8); iVar10 = *piVar19; *piVar19 = *piVar19 + -1; UNLOCK(); if (iVar10 + -1 < 1) { (**(code **)(**(longlong **)(local_2d8 + -0x18) + 8))(); } pppppppWVar23 = local_370; lpBuffer_00 = (LPCWSTR ******)PTR_DAT_1401ac010; if (local_370 != (LPCWSTR ******)0x0) { ppppppWVar15 = ppppppWVar22; if (local_370 != (LPCWSTR ******)PTR_DAT_1401ac010) { ppppppWVar15 = (LPCWSTR *****)(ulonglong)*(uint *)(local_370 + -1); } iVar24 = (int)ppppppWVar15; lpBuffer_00 = local_370; } uVar26 = (ulonglong)(uint)(iVar24 * 2); lpNumberOfBytesWritten = &local_2e4; lpFileName = (LPCWSTR ******)*param_1; BVar9 = WriteFile(lpFileName,lpBuffer_00,iVar24 * 2,lpNumberOfBytesWritten, (LPOVERLAPPED)0x0); pppppppWVar21 = local_368; if (BVar9 == 0) { FUN_1400a0200(); pppppppWVar21 = local_368; } } else { lpFileName = (LPCWSTR ******)(ulonglong)(iVar10 - 2U); if (iVar10 - 2U == 0) { ppppppWVar15 = ppppppWVar22; if (local_368 != (LPCWSTR ******)0x0) { ppppppWVar15 = *local_368; } pppppWVar4 = ppppppWVar15[1]; iVar10 = 0; if ((pppppWVar4 != (LPCWSTR ****)0x0) && (iVar10 = iVar24, pppppWVar4 != (LPCWSTR ****)PTR_DAT_1401ac010)) { iVar10 = *(int *)(pppppWVar4 + -1); } ppppppWVar15 = ppppppWVar22; if (local_368 != (LPCWSTR ******)0x0) { ppppppWVar15 = *local_368; } lpBuffer_00 = (LPCWSTR ******)ppppppWVar15[1]; if ((LPCWSTR ******)ppppppWVar15[1] == (LPCWSTR ******)0x0) { lpBuffer_00 = (LPCWSTR ******)PTR_DAT_1401ac010; } uVar26 = (ulonglong)(uint)(iVar10 * 2); lpNumberOfBytesWritten = local_2e0; lpFileName = (LPCWSTR ******)*param_1; BVar9 = WriteFile(lpFileName,lpBuffer_00,iVar10 * 2,lpNumberOfBytesWritten, (LPOVERLAPPED)0x0); if (BVar9 == 0) { FUN_1400a0200(); } } } LAB_1400cc559: pppppppWVar20 = local_368; if (pppppppWVar21 != (LPCWSTR ******)0x0) { pppppppWVar21 = pppppppWVar21 + 1; *pppppppWVar21 = (LPCWSTR *****)((longlong)*pppppppWVar21 + -1); pppppppWVar23 = local_370; if (*pppppppWVar21 == (LPCWSTR *****)0x0) { ppppppWVar15 = *local_368; if (ppppppWVar15 != (LPCWSTR *****)0x0) { FUN_1400031e0((longlong *)(ppppppWVar15 + 1),lpBuffer_00,uVar26,lpNumberOfBytesWritten ); operator_delete(ppppppWVar15); } FUN_14006cc60(pppppppWVar20); lpFileName = pppppppWVar20; pppppppWVar23 = local_370; } } } if (((pppppppWVar23 != (LPCWSTR ******)0x0) && (pppppppWVar23 != (LPCWSTR ******)PTR_DAT_1401ac010)) && (pppppppWVar23 + -1 != (LPCWSTR ******)0x0)) { piVar19 = (int *)FUN_14006cb70(lpFileName,lpBuffer_00,uVar26,lpNumberOfBytesWritten); local_288 = piVar19; FUN_14006b350(piVar19); local_280 = 1; pWVar2 = (LPCWSTR)((longlong)pppppppWVar23 + -4); *(int *)pWVar2 = *(int *)pWVar2 + -1; if (*(int *)pWVar2 == 0) { FUN_14006cc60(pppppppWVar23 + -1); } FUN_14006b3e0((longlong)piVar19); local_280 = 0; } local_370 = (LPCWSTR ******)PTR_DAT_1401ac010; FUN_1400cb620((longlong *)&local_340,(longlong *)lpBuffer_00,uVar26,lpNumberOfBytesWritten); if (local_340 != (undefined8 *)0x0) { (**(code **)*local_340)(local_340,1); } } cVar1 = *(char *)(param_1 + 0x10); } while( true ); }