126 lines
4 KiB
C
126 lines
4 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400ce590 FUN_1400ce590
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1400ce590(uint *param_1,byte *param_2,byte *param_3,ulonglong param_4,int param_5)
|
|
|
|
{
|
|
uint uVar1;
|
|
undefined1 auVar2 [16];
|
|
undefined1 auVar3 [16];
|
|
ulonglong uVar4;
|
|
byte *pbVar5;
|
|
ulonglong uVar6;
|
|
uint uVar7;
|
|
undefined1 auStack_c8 [32];
|
|
exception local_a8 [72];
|
|
byte local_60 [32];
|
|
ulonglong local_40;
|
|
|
|
local_40 = DAT_1401ac5a0 ^ (ulonglong)auStack_c8;
|
|
if ((int)param_1[0xf0] < 1) {
|
|
FUN_14006ba50(local_a8,L"aes key is not initialized",param_3,param_4);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_a8,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
if (param_4 != 0) {
|
|
uVar6 = (ulonglong)(int)param_1[0xf1];
|
|
auVar2._8_8_ = 0;
|
|
auVar2._0_8_ = uVar6;
|
|
auVar3._8_8_ = 0;
|
|
auVar3._0_8_ = param_4;
|
|
uVar4 = param_4 / uVar6;
|
|
if (SUB168(auVar3 % auVar2,0) == 0) {
|
|
local_60[1] = 0;
|
|
local_60[2] = 0;
|
|
local_60[3] = 0;
|
|
local_60[4] = 0;
|
|
local_60[5] = 0;
|
|
local_60[6] = 0;
|
|
local_60[7] = 0;
|
|
local_60[8] = 0;
|
|
local_60[9] = 0;
|
|
local_60[10] = 0;
|
|
local_60[0xb] = 0;
|
|
local_60[0xc] = 0;
|
|
local_60[0xd] = 0;
|
|
local_60[0xe] = 0;
|
|
local_60[0xf] = 0;
|
|
local_60[0x10] = 0;
|
|
local_60[0x11] = 0;
|
|
local_60[0x12] = 0;
|
|
local_60[0x13] = 0;
|
|
local_60[0x14] = 0;
|
|
local_60[0x15] = 0;
|
|
local_60[0x16] = 0;
|
|
local_60[0x17] = 0;
|
|
local_60[0x18] = 0;
|
|
local_60[0x19] = 0;
|
|
local_60[0x1a] = 0;
|
|
local_60[0x1b] = 0;
|
|
local_60[0x1c] = 0;
|
|
local_60[0x1d] = 0;
|
|
local_60[0x1e] = 0;
|
|
local_60[0x1f] = 0;
|
|
uVar7 = 0;
|
|
local_60[0] = SUB161(auVar3 % auVar2,0);
|
|
if (param_5 == 1) {
|
|
if (uVar4 != 0) {
|
|
do {
|
|
if (0 < (int)uVar6) {
|
|
uVar6 = uVar6 & 0xffffffff;
|
|
pbVar5 = local_60;
|
|
do {
|
|
*pbVar5 = *pbVar5 ^ pbVar5[(longlong)param_2 - (longlong)local_60];
|
|
uVar6 = uVar6 - 1;
|
|
pbVar5 = pbVar5 + 1;
|
|
} while (uVar6 != 0);
|
|
}
|
|
FUN_1400cde30(local_60,param_3,param_1);
|
|
uVar6 = (ulonglong)(int)param_1[0xf1];
|
|
memcpy(local_60,param_3,uVar6);
|
|
uVar7 = uVar7 + 1;
|
|
param_2 = param_2 + (int)param_1[0xf1];
|
|
param_3 = param_3 + (int)param_1[0xf1];
|
|
} while ((ulonglong)uVar7 < param_4 / uVar6);
|
|
}
|
|
}
|
|
else if (param_5 == 2) {
|
|
if (uVar4 != 0) {
|
|
do {
|
|
FUN_1400cde30(local_60,param_3,param_1);
|
|
if (0 < (int)param_1[0xf1]) {
|
|
uVar4 = (ulonglong)param_1[0xf1];
|
|
pbVar5 = param_3;
|
|
do {
|
|
*pbVar5 = *pbVar5 ^ pbVar5[(longlong)param_2 - (longlong)param_3];
|
|
uVar4 = uVar4 - 1;
|
|
pbVar5 = pbVar5 + 1;
|
|
} while (uVar4 != 0);
|
|
}
|
|
uVar1 = param_1[0xf1];
|
|
memcpy(local_60,param_3,(longlong)(int)uVar1);
|
|
uVar7 = uVar7 + 1;
|
|
param_2 = param_2 + (int)param_1[0xf1];
|
|
param_3 = param_3 + (int)param_1[0xf1];
|
|
} while ((ulonglong)uVar7 < param_4 / (ulonglong)(longlong)(int)uVar1);
|
|
}
|
|
}
|
|
else if (uVar4 != 0) {
|
|
do {
|
|
FUN_1400cde30(param_2,param_3,param_1);
|
|
uVar7 = uVar7 + 1;
|
|
param_2 = param_2 + (int)param_1[0xf1];
|
|
param_3 = param_3 + (int)param_1[0xf1];
|
|
} while ((ulonglong)uVar7 < param_4 / (ulonglong)(longlong)(int)param_1[0xf1]);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
FUN_14006ba50(local_a8,L"block size is not 16byte or 24byte or 32byte",param_3,param_4);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_a8,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
|