93 lines
4.6 KiB
C
93 lines
4.6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400cd9a0 FUN_1400cd9a0
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400cd9a0(byte *param_1,byte *param_2,longlong param_3)
|
|
|
|
{
|
|
undefined4 uVar1;
|
|
uint *puVar2;
|
|
undefined4 *puVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
ulonglong uVar7;
|
|
ulonglong uVar8;
|
|
ulonglong uVar9;
|
|
ulonglong uVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
ulonglong uVar13;
|
|
exception local_78 [80];
|
|
|
|
if (*(int *)(param_3 + 0x3c0) < 1) {
|
|
FUN_14006ba50(local_78,L"aes key is not initialized",param_3,param_1);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_78,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
iVar12 = *(int *)(param_3 + 0x3c8);
|
|
uVar6 = ((uint)*param_1 << 0x18 | (uint)param_1[1] << 0x10 | (uint)param_1[2] << 8 |
|
|
(uint)param_1[3]) ^ *(uint *)(param_3 + 0x1e0);
|
|
uVar5 = ((uint)param_1[4] << 0x18 | (uint)param_1[5] << 0x10 | (uint)param_1[6] << 8 |
|
|
(uint)param_1[7]) ^ *(uint *)(param_3 + 0x1e4);
|
|
uVar4 = ((uint)param_1[8] << 0x18 | (uint)param_1[9] << 0x10 | (uint)param_1[10] << 8 |
|
|
(uint)param_1[0xb]) ^ *(uint *)(param_3 + 0x1e8);
|
|
uVar11 = ((uint)CONCAT11(param_1[0xe],param_1[0xf]) |
|
|
(uint)param_1[0xc] << 0x18 | (uint)param_1[0xd] << 0x10) ^ *(uint *)(param_3 + 0x1ec);
|
|
if (1 < iVar12) {
|
|
uVar13 = (ulonglong)(iVar12 - 1);
|
|
puVar2 = (uint *)(param_3 + 0x208);
|
|
do {
|
|
uVar10 = (ulonglong)(int)uVar5;
|
|
uVar9 = (ulonglong)(int)uVar11;
|
|
uVar8 = (ulonglong)(int)uVar4;
|
|
uVar7 = (ulonglong)(int)uVar6;
|
|
uVar5 = *(uint *)(&DAT_1401440b0 + ((longlong)uVar7 >> 0x10 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_140143cb0 + ((longlong)uVar10 >> 0x18 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401444b0 + ((longlong)uVar9 >> 8 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401448b0 + (uVar8 & 0xff) * 4) ^ puVar2[-1];
|
|
uVar4 = *(uint *)(&DAT_140143cb0 + ((longlong)uVar8 >> 0x18 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401444b0 + ((longlong)uVar7 >> 8 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401440b0 + ((longlong)uVar10 >> 0x10 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401448b0 + (uVar9 & 0xff) * 4) ^ *puVar2;
|
|
uVar11 = *(uint *)(&DAT_1401440b0 + ((longlong)uVar8 >> 0x10 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401444b0 + ((longlong)uVar10 >> 8 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_140143cb0 + ((longlong)uVar9 >> 0x18 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401448b0 + (uVar7 & 0xff) * 4) ^ puVar2[1];
|
|
uVar6 = *(uint *)(&DAT_140143cb0 + (ulonglong)(uVar6 >> 0x18) * 4) ^
|
|
*(uint *)(&DAT_1401444b0 + ((longlong)uVar8 >> 8 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401440b0 + ((longlong)uVar9 >> 0x10 & 0xffU) * 4) ^
|
|
*(uint *)(&DAT_1401448b0 + (uVar10 & 0xff) * 4) ^ puVar2[-2];
|
|
uVar13 = uVar13 - 1;
|
|
puVar2 = puVar2 + 8;
|
|
} while (uVar13 != 0);
|
|
iVar12 = *(int *)(param_3 + 0x3c8);
|
|
}
|
|
uVar13 = (ulonglong)(int)uVar6;
|
|
uVar8 = (ulonglong)(int)uVar4;
|
|
uVar9 = (ulonglong)(int)uVar11;
|
|
uVar7 = (ulonglong)(int)uVar5;
|
|
puVar3 = (undefined4 *)(((longlong)iVar12 + 0xf) * 0x20 + param_3);
|
|
uVar1 = *puVar3;
|
|
*param_2 = (&DAT_140142bb0)[(longlong)uVar13 >> 0x18 & 0xff] ^ (byte)((uint)uVar1 >> 0x18);
|
|
param_2[1] = (&DAT_140142bb0)[(longlong)uVar9 >> 0x10 & 0xff] ^ (byte)((uint)uVar1 >> 0x10);
|
|
param_2[2] = (&DAT_140142bb0)[(longlong)uVar8 >> 8 & 0xff] ^ (byte)((uint)uVar1 >> 8);
|
|
param_2[3] = (&DAT_140142bb0)[uVar7 & 0xff] ^ (byte)uVar1;
|
|
uVar1 = puVar3[1];
|
|
param_2[4] = (&DAT_140142bb0)[(longlong)uVar7 >> 0x18 & 0xff] ^ (byte)((uint)uVar1 >> 0x18);
|
|
param_2[5] = (&DAT_140142bb0)[(longlong)uVar13 >> 0x10 & 0xff] ^ (byte)((uint)uVar1 >> 0x10);
|
|
param_2[6] = (&DAT_140142bb0)[(longlong)uVar9 >> 8 & 0xff] ^ (byte)((uint)uVar1 >> 8);
|
|
param_2[7] = (&DAT_140142bb0)[uVar8 & 0xff] ^ (byte)uVar1;
|
|
uVar1 = puVar3[2];
|
|
param_2[8] = (&DAT_140142bb0)[(longlong)uVar8 >> 0x18 & 0xff] ^ (byte)((uint)uVar1 >> 0x18);
|
|
param_2[9] = (&DAT_140142bb0)[(longlong)uVar7 >> 0x10 & 0xff] ^ (byte)((uint)uVar1 >> 0x10);
|
|
param_2[10] = (&DAT_140142bb0)[(longlong)uVar13 >> 8 & 0xff] ^ (byte)((uint)uVar1 >> 8);
|
|
param_2[0xb] = (&DAT_140142bb0)[uVar9 & 0xff] ^ (byte)uVar1;
|
|
uVar1 = puVar3[3];
|
|
param_2[0xc] = (&DAT_140142bb0)[(longlong)uVar9 >> 0x18 & 0xff] ^ (byte)((uint)uVar1 >> 0x18);
|
|
param_2[0xd] = (&DAT_140142bb0)[(longlong)uVar8 >> 0x10 & 0xff] ^ (byte)((uint)uVar1 >> 0x10);
|
|
param_2[0xe] = (&DAT_140142bb0)[(longlong)uVar7 >> 8 & 0xff] ^ (byte)((uint)uVar1 >> 8);
|
|
param_2[0xf] = (&DAT_140142bb0)[uVar13 & 0xff] ^ (byte)uVar1;
|
|
return;
|
|
}
|
|
|