518 lines
16 KiB
C
518 lines
16 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401ae070 FUN_1401ae070
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1401ae070(undefined8 *param_1)
|
|
|
|
{
|
|
longlong lVar1;
|
|
void *pvVar2;
|
|
undefined8 *puVar3;
|
|
char cVar4;
|
|
int iVar5;
|
|
DWORD DVar6;
|
|
BOOL BVar7;
|
|
errno_t eVar8;
|
|
undefined8 *puVar9;
|
|
undefined8 uVar10;
|
|
longlong *plVar11;
|
|
undefined8 *puVar12;
|
|
int *piVar13;
|
|
undefined8 uVar14;
|
|
HANDLE pvVar15;
|
|
undefined1 *puVar16;
|
|
LPCWSTR pWVar17;
|
|
undefined *puVar18;
|
|
int *piVar19;
|
|
undefined *puVar20;
|
|
int iVar21;
|
|
longlong lVar22;
|
|
undefined1 auStackY_3b8 [32];
|
|
undefined2 local_378 [4];
|
|
undefined *local_370;
|
|
undefined8 *local_368;
|
|
undefined8 *local_360;
|
|
undefined *local_358;
|
|
undefined *local_350;
|
|
longlong 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;
|
|
undefined8 *local_2d0;
|
|
undefined1 local_2c8;
|
|
__time64_t local_2c0;
|
|
DWORD local_2b8 [2];
|
|
undefined8 local_2b0;
|
|
undefined8 local_2a8;
|
|
undefined1 local_2a0;
|
|
undefined8 local_298;
|
|
undefined1 local_290;
|
|
undefined8 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_1403463c0 ^ (ulonglong)auStackY_3b8;
|
|
local_320 = GetFileSize((HANDLE)*param_1,&DStack_31c);
|
|
if ((local_320 != 0xffffffff) || (iVar5 = FUN_1401ad250(), local_2f0 = local_348, -1 < iVar5)) {
|
|
local_2f0 = CONCAT44(DStack_31c,local_320);
|
|
}
|
|
DVar6 = SetFilePointer((HANDLE)*param_1,(LONG)local_2f0,(PLONG)((longlong)&local_2f0 + 4),0);
|
|
if (DVar6 == 0xffffffff) {
|
|
FUN_1401ad250();
|
|
}
|
|
FUN_14016d8c0();
|
|
local_350 = PTR_DAT_1403440a0;
|
|
local_2c0 = _time64((__time64_t *)0x0);
|
|
puVar9 = (undefined8 *)FUN_1401ad910(&local_2c0,&local_310,&DAT_140283898);
|
|
pWVar17 = (LPCWSTR)*puVar9;
|
|
local_258 = local_250;
|
|
if (pWVar17 == (LPCWSTR)0x0) {
|
|
local_258 = (undefined1 *)0x0;
|
|
goto LAB_1401ae22f;
|
|
}
|
|
iVar5 = lstrlenW(pWVar17);
|
|
iVar5 = iVar5 + 1;
|
|
if (iVar5 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80070057);
|
|
}
|
|
if (local_258 == local_250) {
|
|
if (0x80 < iVar5) {
|
|
puVar16 = calloc((longlong)iVar5,2);
|
|
goto LAB_1401ae1c1;
|
|
}
|
|
LAB_1401ae1d5:
|
|
puVar16 = local_250;
|
|
}
|
|
else {
|
|
if (iVar5 < 0x81) {
|
|
free(local_258);
|
|
goto LAB_1401ae1d5;
|
|
}
|
|
puVar16 = _recalloc(local_258,(longlong)iVar5,2);
|
|
if (puVar16 == (undefined1 *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
LAB_1401ae1c1:
|
|
if (puVar16 == (undefined1 *)0x0) {
|
|
local_258 = puVar16;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
}
|
|
local_258 = puVar16;
|
|
eVar8 = memcpy_s(puVar16,(longlong)iVar5 * 2,pWVar17,(longlong)iVar5 * 2);
|
|
if (eVar8 != 0) {
|
|
if (eVar8 == 0xc) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
if ((eVar8 == 0x16) || (eVar8 == 0x22)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80070057);
|
|
}
|
|
if (eVar8 != 0x50) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
}
|
|
LAB_1401ae22f:
|
|
piVar19 = (int *)0x0;
|
|
FUN_14004c020(&local_350,L"-------- Log start at %s --------\r\n",local_258);
|
|
if (local_258 != local_250) {
|
|
free(local_258);
|
|
}
|
|
LOCK();
|
|
piVar13 = (int *)(local_310 + -8);
|
|
iVar5 = *piVar13;
|
|
*piVar13 = *piVar13 + -1;
|
|
UNLOCK();
|
|
if (iVar5 + -1 < 1) {
|
|
(**(code **)(**(longlong **)(local_310 + -0x18) + 8))();
|
|
}
|
|
puVar20 = local_350;
|
|
puVar18 = PTR_DAT_1403440a0;
|
|
iVar5 = 0;
|
|
if (local_350 != (undefined *)0x0) {
|
|
piVar13 = piVar19;
|
|
if (local_350 != PTR_DAT_1403440a0) {
|
|
piVar13 = (int *)(ulonglong)*(uint *)(local_350 + -8);
|
|
}
|
|
puVar18 = local_350;
|
|
iVar5 = (int)piVar13;
|
|
}
|
|
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar5 * 2,&local_2e8,(LPOVERLAPPED)0x0);
|
|
if (BVar7 == 0) {
|
|
FUN_1401ad250();
|
|
}
|
|
if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) &&
|
|
(puVar20 + -8 != (undefined *)0x0)) {
|
|
uVar10 = FUN_14016d8c0();
|
|
local_2a8 = uVar10;
|
|
FUN_14016db50(uVar10);
|
|
local_2a0 = 1;
|
|
piVar13 = (int *)(puVar20 + -4);
|
|
*piVar13 = *piVar13 + -1;
|
|
if (*piVar13 == 0) {
|
|
FUN_14016d970(puVar20 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar10);
|
|
local_2a0 = 0;
|
|
}
|
|
cVar4 = *(char *)(param_1 + 0x10);
|
|
local_350 = PTR_DAT_1403440a0;
|
|
lVar22 = local_348;
|
|
do {
|
|
if (cVar4 != '\0') {
|
|
return;
|
|
}
|
|
cVar4 = FUN_1401c37f0(param_1 + 2,300);
|
|
if (cVar4 != '\0') {
|
|
local_340 = (undefined8 *)0x0;
|
|
local_328 = 0;
|
|
local_338 = (undefined8 *)0x0;
|
|
local_330 = (undefined8 *)0x0;
|
|
puVar9 = param_1 + 3;
|
|
local_2d0 = puVar9;
|
|
FUN_14016db50(puVar9);
|
|
local_2c8 = 1;
|
|
if (*(char *)(param_1 + 10) == '\0') {
|
|
lVar1 = param_1[0x14];
|
|
while (lVar1 != 0) {
|
|
plVar11 = (longlong *)FUN_1401ad9b0(param_1 + 0x11,&local_360);
|
|
puVar9 = (undefined8 *)FUN_14016d940(0x18);
|
|
local_270 = puVar9;
|
|
local_268 = puVar9;
|
|
if (puVar9 != (undefined8 *)0x0) {
|
|
puVar9[2] = 0;
|
|
if (*plVar11 != 0) {
|
|
*(longlong *)(*plVar11 + 8) = *(longlong *)(*plVar11 + 8) + 1;
|
|
piVar13 = piVar19;
|
|
if ((puVar9[2] != 0) &&
|
|
(*(longlong *)(puVar9[2] + 8) = *(longlong *)(puVar9[2] + 8) + -1,
|
|
*(longlong *)(puVar9[2] + 8) == 0)) {
|
|
piVar13 = (int *)puVar9[2];
|
|
}
|
|
puVar9[2] = *plVar11;
|
|
if (piVar13 != (int *)0x0) {
|
|
pvVar2 = *(void **)piVar13;
|
|
if (pvVar2 != (void *)0x0) {
|
|
FUN_14004eb70((longlong)pvVar2 + 8);
|
|
operator_delete(pvVar2);
|
|
}
|
|
FUN_14016d970(piVar13);
|
|
}
|
|
}
|
|
}
|
|
puVar12 = local_360;
|
|
puVar9[1] = local_330;
|
|
*puVar9 = 0;
|
|
local_328 = local_328 + 1;
|
|
puVar3 = puVar9;
|
|
if (local_330 != (undefined8 *)0x0) {
|
|
*local_330 = puVar9;
|
|
puVar3 = local_338;
|
|
}
|
|
local_338 = puVar3;
|
|
local_330 = puVar9;
|
|
if ((local_360 != (undefined8 *)0x0) &&
|
|
(local_360[1] = local_360[1] + -1, local_360[1] == 0)) {
|
|
pvVar2 = (void *)*local_360;
|
|
if (pvVar2 != (void *)0x0) {
|
|
FUN_14004eb70((longlong)pvVar2 + 8);
|
|
operator_delete(pvVar2);
|
|
}
|
|
FUN_14016d970(puVar12);
|
|
}
|
|
puVar9 = local_2d0;
|
|
lVar1 = param_1[0x14];
|
|
}
|
|
}
|
|
FUN_14016dbe0(puVar9);
|
|
local_2c8 = 0;
|
|
FUN_14016d8c0();
|
|
local_370 = PTR_DAT_1403440a0;
|
|
puVar20 = PTR_DAT_1403440a0;
|
|
while (local_328 != 0) {
|
|
FUN_1401ad9b0(&local_340,&local_368);
|
|
puVar9 = local_368;
|
|
piVar13 = piVar19;
|
|
if (local_368 != (undefined8 *)0x0) {
|
|
piVar13 = (int *)*local_368;
|
|
}
|
|
iVar5 = *piVar13;
|
|
iVar21 = 0;
|
|
if (iVar5 == 0) {
|
|
if ((HANDLE)*param_1 != (HANDLE)0x0) {
|
|
CloseHandle((HANDLE)*param_1);
|
|
*param_1 = 0;
|
|
}
|
|
piVar13 = piVar19;
|
|
if (puVar9 != (undefined8 *)0x0) {
|
|
piVar13 = (int *)*puVar9;
|
|
}
|
|
pWVar17 = *(LPCWSTR *)(piVar13 + 2);
|
|
if (*(LPCWSTR *)(piVar13 + 2) == (LPCWSTR)0x0) {
|
|
pWVar17 = (LPCWSTR)PTR_DAT_1403440a0;
|
|
}
|
|
if (param_1[1] == 0) {
|
|
pvVar15 = CreateFileW(pWVar17,0x40000000,1,(LPSECURITY_ATTRIBUTES)0x0,4,0x80,(HANDLE)0x0
|
|
);
|
|
}
|
|
else {
|
|
pvVar15 = (HANDLE)FUN_1401ad270(param_1[1],pWVar17,0x40000000);
|
|
}
|
|
if (pvVar15 == (HANDLE)0xffffffffffffffff) {
|
|
iVar5 = FUN_1401ad250();
|
|
if (iVar5 < 0) {
|
|
*(undefined1 *)(param_1 + 10) = 1;
|
|
goto LAB_1401ae989;
|
|
}
|
|
}
|
|
else {
|
|
*param_1 = pvVar15;
|
|
}
|
|
local_378[0] = 0xfeff;
|
|
BVar7 = WriteFile((HANDLE)*param_1,local_378,2,local_308,(LPOVERLAPPED)0x0);
|
|
if (BVar7 == 0) {
|
|
FUN_1401ad250();
|
|
}
|
|
local_318 = GetFileSize((HANDLE)*param_1,&DStack_314);
|
|
if ((local_318 != 0xffffffff) || (iVar5 = FUN_1401ad250(), -1 < iVar5)) {
|
|
lVar22 = CONCAT44(DStack_314,local_318);
|
|
}
|
|
local_300 = lVar22;
|
|
DVar6 = SetFilePointer((HANDLE)*param_1,(LONG)lVar22,(PLONG)((longlong)&local_300 + 4),0);
|
|
if (DVar6 == 0xffffffff) {
|
|
FUN_1401ad250();
|
|
}
|
|
FUN_14016d8c0();
|
|
local_358 = PTR_DAT_1403440a0;
|
|
local_2f8 = _time64((__time64_t *)0x0);
|
|
puVar9 = (undefined8 *)FUN_1401ad910(&local_2f8,&local_348,&DAT_140283898);
|
|
pWVar17 = (LPCWSTR)*puVar9;
|
|
local_148 = local_140;
|
|
if (pWVar17 == (LPCWSTR)0x0) {
|
|
local_148 = (undefined1 *)0x0;
|
|
}
|
|
else {
|
|
iVar5 = lstrlenW(pWVar17);
|
|
iVar5 = iVar5 + 1;
|
|
if (iVar5 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80070057);
|
|
}
|
|
if (local_148 == local_140) {
|
|
if (0x80 < iVar5) {
|
|
puVar16 = calloc((longlong)iVar5,2);
|
|
goto LAB_1401ae838;
|
|
}
|
|
LAB_1401ae84a:
|
|
puVar16 = local_140;
|
|
}
|
|
else {
|
|
if (iVar5 < 0x81) {
|
|
free(local_148);
|
|
goto LAB_1401ae84a;
|
|
}
|
|
puVar16 = _recalloc(local_148,(longlong)iVar5,2);
|
|
if (puVar16 == (undefined1 *)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
LAB_1401ae838:
|
|
if (puVar16 == (undefined1 *)0x0) {
|
|
local_148 = puVar16;
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
}
|
|
local_148 = puVar16;
|
|
eVar8 = memcpy_s(puVar16,(longlong)iVar5 * 2,pWVar17,(longlong)iVar5 * 2);
|
|
if (eVar8 != 0) {
|
|
if (eVar8 == 0xc) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x8007000e);
|
|
}
|
|
if ((eVar8 == 0x16) || (eVar8 == 0x22)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80070057);
|
|
}
|
|
if (eVar8 != 0x50) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14004dc60(0x80004005);
|
|
}
|
|
}
|
|
}
|
|
FUN_14004c020(&local_358,L"-------- Log start at %s --------\r\n",local_148);
|
|
if (local_148 != local_140) {
|
|
free(local_148);
|
|
}
|
|
LOCK();
|
|
piVar13 = (int *)(local_348 + -8);
|
|
iVar5 = *piVar13;
|
|
*piVar13 = *piVar13 + -1;
|
|
UNLOCK();
|
|
if (iVar5 + -1 < 1) {
|
|
(**(code **)(**(longlong **)(local_348 + -0x18) + 8))();
|
|
}
|
|
puVar20 = local_358;
|
|
puVar18 = PTR_DAT_1403440a0;
|
|
if (local_358 != (undefined *)0x0) {
|
|
piVar13 = piVar19;
|
|
if (local_358 != PTR_DAT_1403440a0) {
|
|
piVar13 = (int *)(ulonglong)*(uint *)(local_358 + -8);
|
|
}
|
|
iVar21 = (int)piVar13;
|
|
puVar18 = local_358;
|
|
}
|
|
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar21 * 2,local_2b8,(LPOVERLAPPED)0x0);
|
|
if (BVar7 == 0) {
|
|
FUN_1401ad250();
|
|
}
|
|
if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) &&
|
|
(puVar20 + -8 != (undefined *)0x0)) {
|
|
uVar10 = FUN_14016d8c0();
|
|
local_298 = uVar10;
|
|
FUN_14016db50(uVar10);
|
|
local_290 = 1;
|
|
piVar13 = (int *)(puVar20 + -4);
|
|
*piVar13 = *piVar13 + -1;
|
|
if (*piVar13 == 0) {
|
|
FUN_14016d970(puVar20 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar10);
|
|
local_290 = 0;
|
|
}
|
|
local_358 = PTR_DAT_1403440a0;
|
|
puVar9 = local_368;
|
|
puVar20 = local_370;
|
|
}
|
|
else if (iVar5 == 1) {
|
|
piVar13 = piVar19;
|
|
if (local_368 != (undefined8 *)0x0) {
|
|
piVar13 = (int *)*local_368;
|
|
}
|
|
local_2b0 = *(undefined8 *)(piVar13 + 6);
|
|
puVar12 = (undefined8 *)FUN_1401ad910(&local_2b0,&local_2d8,&DAT_140283898);
|
|
uVar10 = *puVar12;
|
|
piVar13 = piVar19;
|
|
if (puVar9 != (undefined8 *)0x0) {
|
|
piVar13 = (int *)*puVar9;
|
|
}
|
|
uVar14 = FUN_1401bbc90(piVar13[4]);
|
|
FUN_14004c020(&local_370,L"[%s] [%s] %s\r\n",uVar14,uVar10);
|
|
LOCK();
|
|
piVar13 = (int *)(local_2d8 + -8);
|
|
iVar5 = *piVar13;
|
|
*piVar13 = *piVar13 + -1;
|
|
UNLOCK();
|
|
if (iVar5 + -1 < 1) {
|
|
(**(code **)(**(longlong **)(local_2d8 + -0x18) + 8))();
|
|
}
|
|
puVar20 = local_370;
|
|
puVar18 = PTR_DAT_1403440a0;
|
|
if (local_370 != (undefined *)0x0) {
|
|
piVar13 = piVar19;
|
|
if (local_370 != PTR_DAT_1403440a0) {
|
|
piVar13 = (int *)(ulonglong)*(uint *)(local_370 + -8);
|
|
}
|
|
iVar21 = (int)piVar13;
|
|
puVar18 = local_370;
|
|
}
|
|
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar21 * 2,&local_2e4,(LPOVERLAPPED)0x0);
|
|
puVar9 = local_368;
|
|
if (BVar7 == 0) {
|
|
FUN_1401ad250();
|
|
puVar9 = local_368;
|
|
}
|
|
}
|
|
else if (iVar5 == 2) {
|
|
piVar13 = piVar19;
|
|
if (local_368 != (undefined8 *)0x0) {
|
|
piVar13 = (int *)*local_368;
|
|
}
|
|
puVar18 = *(undefined **)(piVar13 + 2);
|
|
iVar5 = 0;
|
|
if ((puVar18 != (undefined *)0x0) && (iVar5 = iVar21, puVar18 != PTR_DAT_1403440a0)) {
|
|
iVar5 = *(int *)(puVar18 + -8);
|
|
}
|
|
piVar13 = piVar19;
|
|
if (local_368 != (undefined8 *)0x0) {
|
|
piVar13 = (int *)*local_368;
|
|
}
|
|
puVar18 = *(undefined **)(piVar13 + 2);
|
|
if (*(undefined **)(piVar13 + 2) == (undefined *)0x0) {
|
|
puVar18 = PTR_DAT_1403440a0;
|
|
}
|
|
BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar5 * 2,local_2e0,(LPOVERLAPPED)0x0);
|
|
if (BVar7 == 0) {
|
|
FUN_1401ad250();
|
|
}
|
|
}
|
|
LAB_1401ae989:
|
|
puVar12 = local_368;
|
|
if (puVar9 != (undefined8 *)0x0) {
|
|
plVar11 = puVar9 + 1;
|
|
*plVar11 = *plVar11 + -1;
|
|
puVar20 = local_370;
|
|
if (*plVar11 == 0) {
|
|
pvVar2 = (void *)*local_368;
|
|
if (pvVar2 != (void *)0x0) {
|
|
FUN_14004eb70((longlong)pvVar2 + 8);
|
|
operator_delete(pvVar2);
|
|
}
|
|
FUN_14016d970(puVar12);
|
|
puVar20 = local_370;
|
|
}
|
|
}
|
|
}
|
|
if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) &&
|
|
(puVar20 + -8 != (undefined *)0x0)) {
|
|
uVar10 = FUN_14016d8c0();
|
|
local_288 = uVar10;
|
|
FUN_14016db50(uVar10);
|
|
local_280 = 1;
|
|
piVar13 = (int *)(puVar20 + -4);
|
|
*piVar13 = *piVar13 + -1;
|
|
if (*piVar13 == 0) {
|
|
FUN_14016d970(puVar20 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar10);
|
|
local_280 = 0;
|
|
}
|
|
local_370 = PTR_DAT_1403440a0;
|
|
FUN_1401ada50(&local_340);
|
|
if (local_340 != (undefined8 *)0x0) {
|
|
(**(code **)*local_340)(local_340,1);
|
|
}
|
|
}
|
|
cVar4 = *(char *)(param_1 + 0x10);
|
|
} while( true );
|
|
}
|
|
|