/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1400a7aa0 FUN_1400a7aa0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400a7aa0(undefined8 *param_1,int param_2) { char cVar1; longlong lVar2; int iVar3; undefined8 uVar4; undefined8 *puVar5; void *pvVar6; ulonglong uVar7; longlong *plVar8; longlong *plVar9; longlong lVar10; undefined1 auStack_2e8 [32]; undefined8 *local_2c8; undefined8 local_2c0; undefined **local_2b8; char local_2b0 [136]; char local_228; undefined1 local_227 [255]; CHAR local_128 [280]; ulonglong local_10; local_2c0 = 0xfffffffffffffffe; local_10 = DAT_1403463c0 ^ (ulonglong)auStack_2e8; if (*(int *)((longlong)param_1 + 0x10c) != 1) { CoInitialize((LPVOID)0x0); local_2c8 = operator_new(0x78); uVar4 = 0; if (local_2c8 != (void *)0x0) { uVar4 = FUN_140002170(local_2c8); } param_1[0x24] = uVar4; puVar5 = operator_new(8); local_2c8 = puVar5; if (puVar5 == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { *puVar5 = 0; iVar3 = FUN_140001990(puVar5); if ((iVar3 < 0) && (iVar3 != -0x7fffbffe)) { /* WARNING: Subroutine does not return */ FUN_140218220(iVar3); } } param_1[0x25] = puVar5; pvVar6 = operator_new(0x130); uVar4 = 0; if (pvVar6 != (void *)0x0) { uVar4 = FUN_1400a6d00(pvVar6); } param_1[0x23] = uVar4; puVar5 = operator_new(0x20); if (puVar5 == (undefined8 *)0x0) { puVar5 = (undefined8 *)0x0; } else { *puVar5 = 0; puVar5[1] = &DAT_14029e010; puVar5[2] = &DAT_14029e010; *(undefined4 *)(puVar5 + 3) = 0; FUN_140001f70(puVar5); } *param_1 = puVar5; local_2b8 = CServerConfig::vftable; local_228 = '\0'; memset(local_227,0,0xff); GetCurrentDirectoryA(0x104,local_128); sprintf(&local_228,"%s\\%s"); strcpy_s(local_2b0,0x80,&local_228); lVar10 = DAT_140353190; if (param_2 == 1) { plVar8 = (longlong *)(DAT_140353190 + 0xb8); plVar9 = plVar8; if (0xf < *(ulonglong *)(DAT_140353190 + 0xd0)) { plVar9 = (longlong *)*plVar8; } uVar7 = 0xffffffffffffffff; do { if (uVar7 == 0) break; uVar7 = uVar7 - 1; cVar1 = *(char *)plVar9; plVar9 = (longlong *)((longlong)plVar9 + 1); } while (cVar1 != '\0'); if (~uVar7 - 1 < 0x100) { if (0xf < *(ulonglong *)(DAT_140353190 + 0xd0)) { plVar8 = (longlong *)*plVar8; } lVar2 = 8 - (longlong)plVar8; do { cVar1 = *(char *)plVar8; *(char *)((longlong)plVar8 + (longlong)param_1 + lVar2) = cVar1; plVar8 = (longlong *)((longlong)plVar8 + 1); } while (cVar1 != '\0'); } else { printf("Error Web String Max.!\n"); lVar10 = DAT_140353190; } *(undefined4 *)(param_1 + 0x21) = *(undefined4 *)(lVar10 + 0x134); printf("WEB : %s\n"); } else if (param_2 == 2) { plVar8 = (longlong *)(DAT_140353190 + 0x90); plVar9 = plVar8; if (0xf < *(ulonglong *)(DAT_140353190 + 0xa8)) { plVar9 = (longlong *)*plVar8; } uVar7 = 0xffffffffffffffff; do { if (uVar7 == 0) break; uVar7 = uVar7 - 1; cVar1 = *(char *)plVar9; plVar9 = (longlong *)((longlong)plVar9 + 1); } while (cVar1 != '\0'); if (~uVar7 - 1 < 0x100) { if (0xf < *(ulonglong *)(DAT_140353190 + 0xa8)) { plVar8 = (longlong *)*plVar8; } lVar2 = 8 - (longlong)plVar8; do { cVar1 = *(char *)plVar8; *(char *)((longlong)plVar8 + (longlong)param_1 + lVar2) = cVar1; plVar8 = (longlong *)((longlong)plVar8 + 1); } while (cVar1 != '\0'); } else { printf("Error Account String Max.!\n"); lVar10 = DAT_140353190; } *(undefined4 *)(param_1 + 0x21) = *(undefined4 *)(lVar10 + 0x134); printf("AUTH : %s\n"); } else if (param_2 == 3) { plVar8 = (longlong *)(DAT_140353190 + 0xe0); plVar9 = plVar8; if (0xf < *(ulonglong *)(DAT_140353190 + 0xf8)) { plVar9 = (longlong *)*plVar8; } uVar7 = 0xffffffffffffffff; do { if (uVar7 == 0) break; uVar7 = uVar7 - 1; cVar1 = *(char *)plVar9; plVar9 = (longlong *)((longlong)plVar9 + 1); } while (cVar1 != '\0'); if (~uVar7 - 1 < 0x100) { if (0xf < *(ulonglong *)(DAT_140353190 + 0xf8)) { plVar8 = (longlong *)*plVar8; } lVar2 = 8 - (longlong)plVar8; do { cVar1 = *(char *)plVar8; *(char *)((longlong)plVar8 + (longlong)param_1 + lVar2) = cVar1; plVar8 = (longlong *)((longlong)plVar8 + 1); } while (cVar1 != '\0'); } else { printf("Error Game String Max.!\n"); lVar10 = DAT_140353190; } *(undefined4 *)(param_1 + 0x21) = *(undefined4 *)(lVar10 + 0x138); printf("GAME : %s\n"); } else if (param_2 == 4) { plVar8 = (longlong *)(DAT_140353190 + 0x108); plVar9 = plVar8; if (0xf < *(ulonglong *)(DAT_140353190 + 0x120)) { plVar9 = (longlong *)*plVar8; } uVar7 = 0xffffffffffffffff; do { if (uVar7 == 0) break; uVar7 = uVar7 - 1; cVar1 = *(char *)plVar9; plVar9 = (longlong *)((longlong)plVar9 + 1); } while (cVar1 != '\0'); if (~uVar7 - 1 < 0x100) { if (0xf < *(ulonglong *)(DAT_140353190 + 0x120)) { plVar8 = (longlong *)*plVar8; } lVar2 = 8 - (longlong)plVar8; do { cVar1 = *(char *)plVar8; *(char *)((longlong)plVar8 + (longlong)param_1 + lVar2) = cVar1; plVar8 = (longlong *)((longlong)plVar8 + 1); } while (cVar1 != '\0'); } else { printf("Error GameLog String Max.!\n"); lVar10 = DAT_140353190; } *(undefined4 *)(param_1 + 0x21) = *(undefined4 *)(lVar10 + 0x13c); printf("GAME LOG: %s\n"); } else { printf("Error Type Miss !!!\n"); } iVar3 = *(int *)(param_1 + 0x21); if (iVar3 == 0) { iVar3 = 500; } *(int *)(param_1 + 0x21) = iVar3; *(undefined4 *)((longlong)param_1 + 0x10c) = 1; } return; }