138 lines
4.7 KiB
C
138 lines
4.7 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401b04c0 FUN_1401b04c0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
void FUN_1401b04c0(byte *param_1,byte *param_2,longlong param_3)
|
|
|
|
{
|
|
longlong lVar1;
|
|
undefined4 uVar2;
|
|
int iVar3;
|
|
longlong lVar4;
|
|
int iVar5;
|
|
uint *puVar6;
|
|
int iVar7;
|
|
int iVar8;
|
|
uint *puVar9;
|
|
int iVar10;
|
|
longlong lVar11;
|
|
longlong lVar12;
|
|
ulonglong uVar13;
|
|
undefined1 auStack_118 [32];
|
|
int local_f8;
|
|
int local_f4;
|
|
int local_ec;
|
|
size_t local_e8;
|
|
byte *local_e0;
|
|
longlong local_d8;
|
|
undefined1 local_d0 [72];
|
|
undefined4 local_88;
|
|
uint auStack_6c [9];
|
|
ulonglong local_48;
|
|
|
|
local_48 = DAT_1403463c0 ^ (ulonglong)auStack_118;
|
|
local_e0 = param_2;
|
|
local_d8 = param_3;
|
|
if (0 < *(int *)(param_3 + 0x3c0)) {
|
|
iVar3 = *(int *)(param_3 + 0x3c4);
|
|
if (iVar3 == 0x10) {
|
|
FUN_1401afc80();
|
|
}
|
|
else {
|
|
iVar5 = 0;
|
|
iVar3 = (int)(iVar3 + (iVar3 >> 0x1f & 3U)) >> 2;
|
|
lVar11 = (longlong)iVar3;
|
|
if (iVar3 != 4) {
|
|
iVar5 = (iVar3 != 6) + 1;
|
|
}
|
|
lVar4 = (longlong)iVar5 * 0x20;
|
|
iVar5 = *(int *)(&DAT_1402874dc + lVar4);
|
|
local_f4 = *(int *)(&DAT_1402874e4 + lVar4);
|
|
local_f8 = *(int *)(&DAT_1402874ec + lVar4);
|
|
if (0 < iVar3) {
|
|
puVar6 = &local_88;
|
|
puVar9 = (uint *)(param_3 + 0x1e0);
|
|
lVar4 = lVar11;
|
|
do {
|
|
*puVar6 = (uint)*param_1 << 0x18;
|
|
*puVar6 = *puVar6 | (uint)param_1[1] << 0x10;
|
|
*puVar6 = *puVar6 | (uint)param_1[2] << 8;
|
|
*puVar6 = *puVar6 | (uint)param_1[3];
|
|
*puVar6 = *puVar6 ^ *puVar9;
|
|
lVar4 = lVar4 + -1;
|
|
puVar6 = puVar6 + 1;
|
|
puVar9 = puVar9 + 1;
|
|
param_1 = param_1 + 4;
|
|
} while (lVar4 != 0);
|
|
}
|
|
if (1 < *(int *)(param_3 + 0x3c8)) {
|
|
uVar13 = (ulonglong)(*(int *)(param_3 + 0x3c8) - 1);
|
|
local_e8 = (size_t)(iVar3 * 4);
|
|
lVar4 = (param_3 - (longlong)&local_88) + 0x200;
|
|
local_ec = iVar5;
|
|
do {
|
|
lVar12 = 0;
|
|
if (0 < iVar3) {
|
|
iVar10 = local_f4 - iVar5;
|
|
iVar8 = local_f8 - iVar5;
|
|
iVar7 = iVar5;
|
|
do {
|
|
lVar1 = lVar12 * 4;
|
|
lVar12 = lVar12 + 1;
|
|
auStack_6c[lVar12] =
|
|
*(uint *)(&DAT_140285cb0 +
|
|
((longlong)(ulonglong)(uint)(&local_88)[(iVar10 + iVar7) % iVar3] >> 8 &
|
|
0xffU) * 4) ^
|
|
*(uint *)(&DAT_1402860b0 +
|
|
(ulonglong)*(byte *)(&local_88 + (iVar8 + iVar7) % iVar3) * 4) ^
|
|
*(uint *)(&DAT_1402858b0 +
|
|
((longlong)(ulonglong)(uint)(&local_88)[iVar7 % iVar3] >> 0x10 & 0xffU)
|
|
* 4) ^
|
|
*(uint *)(&DAT_1402854b0 +
|
|
(ulonglong)*(byte *)((longlong)&local_88 + lVar1 + 3) * 4) ^
|
|
*(uint *)((longlong)&local_88 + lVar4 + lVar1);
|
|
iVar7 = iVar7 + 1;
|
|
iVar5 = local_ec;
|
|
} while (lVar12 < lVar11);
|
|
}
|
|
memcpy(&local_88,auStack_6c + 1,local_e8);
|
|
lVar4 = lVar4 + 0x20;
|
|
uVar13 = uVar13 - 1;
|
|
param_3 = local_d8;
|
|
param_2 = local_e0;
|
|
} while (uVar13 != 0);
|
|
}
|
|
lVar4 = 0;
|
|
if (0 < iVar3) {
|
|
iVar5 = iVar5 - local_f4;
|
|
local_f8 = local_f8 - local_f4;
|
|
do {
|
|
lVar12 = lVar4 + 0x78;
|
|
lVar1 = lVar4 * 4;
|
|
lVar4 = lVar4 + 1;
|
|
uVar2 = *(undefined4 *)(param_3 + (lVar12 + (longlong)*(int *)(param_3 + 0x3c8) * 8) * 4);
|
|
*param_2 = (&DAT_1402843b0)[*(byte *)((longlong)&local_88 + lVar1 + 3)] ^
|
|
(byte)((uint)uVar2 >> 0x18);
|
|
param_2[1] = (&DAT_1402843b0)
|
|
[(longlong)(ulonglong)(uint)(&local_88)[(local_f4 + iVar5) % iVar3] >> 0x10 &
|
|
0xff] ^ (byte)((uint)uVar2 >> 0x10);
|
|
param_2[2] = (&DAT_1402843b0)
|
|
[(longlong)(ulonglong)(uint)(&local_88)[local_f4 % iVar3] >> 8 & 0xff] ^
|
|
(byte)((uint)uVar2 >> 8);
|
|
iVar7 = local_f4 + local_f8;
|
|
local_f4 = local_f4 + 1;
|
|
param_2[3] = (&DAT_1402843b0)[*(byte *)(&local_88 + iVar7 % iVar3)] ^ (byte)uVar2;
|
|
param_2 = param_2 + 4;
|
|
} while (lVar4 < lVar11);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
FUN_14016d300(local_d0,L"aes key is not initialized");
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_d0,(ThrowInfo *)&DAT_1403417f8);
|
|
}
|
|
|