Last active
January 3, 2024 08:01
-
-
Save uyjulian/7048f061148774bf807570143dee1703 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdint.h> | |
#include <stdio.h> | |
uint64_t FUN_00293a60(uint64_t param_1) //OK | |
{ | |
int iVar1; | |
uint64_t uVar2; | |
uint64_t uVar3; | |
uint64_t uVar4; | |
uint64_t uVar5; | |
uint64_t uVar6; | |
uint64_t uVar7; | |
uint64_t uVar8; | |
uint64_t uVar9; | |
uint64_t uVar10; | |
uint64_t uVar11; | |
uint64_t uVar12; | |
iVar1 = 8; | |
uVar11 = 0; | |
uVar12 = 0; | |
do { | |
uVar2 = (int64_t)(1 << ((iVar1 + 0xffffU) & 0x1f)); | |
uVar7 = 0; | |
if ((param_1 & 2) != 0) { | |
uVar7 = uVar2; | |
} | |
uVar3 = 0; | |
if ((param_1 & 1) != 0) { | |
uVar3 = uVar2 << 0x20; | |
} | |
uVar4 = 0; | |
if ((param_1 & 4) != 0) { | |
uVar4 = uVar2 << 0x28; | |
} | |
uVar8 = 0; | |
if ((param_1 & 8) != 0) { | |
uVar8 = uVar2 << 8; | |
} | |
uVar5 = 0; | |
if ((param_1 & 0x10) != 0) { | |
uVar5 = uVar2 << 0x30; | |
} | |
uVar9 = 0; | |
if ((param_1 & 0x20) != 0) { | |
uVar9 = uVar2 << 0x10; | |
} | |
uVar6 = 0; | |
if ((param_1 & 0x40) != 0) { | |
uVar6 = uVar2 << 0x38; | |
} | |
uVar10 = 0; | |
if ((param_1 & 0x80) != 0) { | |
uVar10 = uVar2 << 0x18; | |
} | |
uVar11 = uVar11 | uVar3 | uVar4 | uVar5 | uVar6; | |
iVar1 = iVar1 + 0xffff; | |
uVar12 = uVar12 | uVar7 | uVar8 | uVar9 | uVar10; | |
param_1 = param_1 >> 8; | |
} while (iVar1 != 0); | |
return uVar11 | uVar12; | |
} | |
uint64_t FUN_00293b28(uint64_t param_1) //OK | |
{ | |
uint32_t uVar1; | |
uint64_t uVar2; | |
uint64_t uVar3; | |
uint64_t uVar4; | |
uint64_t uVar5; | |
uint64_t uVar6; | |
uint64_t uVar7; | |
uint64_t uVar8; | |
uint64_t uVar9; | |
uint64_t uVar10; | |
uint64_t uVar11; | |
uint64_t uVar12; | |
uVar1 = 0; | |
uVar11 = 0; | |
uVar12 = 0; | |
do { | |
uVar2 = (int64_t)(1 << (((uVar1 >> 2 ^ 1) & 0x1f) | (uVar1 & 3) << 1)); | |
uVar3 = 0; | |
if ((param_1 & 1) != 0) { | |
uVar3 = uVar2 << 0x38; | |
} | |
uVar7 = 0; | |
if ((param_1 & 2) != 0) { | |
uVar7 = uVar2 << 0x30; | |
} | |
uVar4 = 0; | |
if ((param_1 & 4) != 0) { | |
uVar4 = uVar2 << 0x28; | |
} | |
uVar8 = 0; | |
if ((param_1 & 8) != 0) { | |
uVar8 = uVar2 << 0x20; | |
} | |
uVar5 = 0; | |
if ((param_1 & 0x10) != 0) { | |
uVar5 = uVar2 << 0x18; | |
} | |
uVar9 = 0; | |
if ((param_1 & 0x20) != 0) { | |
uVar9 = uVar2 << 0x10; | |
} | |
uVar10 = 0; | |
if ((param_1 & 0x80) != 0) { | |
uVar10 = uVar2; | |
} | |
uVar6 = 0; | |
if ((param_1 & 0x40) != 0) { | |
uVar6 = uVar2 << 8; | |
} | |
uVar1 = uVar1 + 1; | |
uVar12 = uVar12 | uVar7 | uVar8 | uVar9 | uVar10; | |
uVar11 = uVar11 | uVar3 | uVar4 | uVar5 | uVar6; | |
param_1 = param_1 >> 8; | |
} while (uVar1 < 8); | |
return uVar11 | uVar12; | |
} | |
uint64_t dat_36d940[0x20] = { | |
0x8000000000020000, 0x0000000000040000, 0x0000000000080000, 0x0000000000500000, 0x0000000000a00000, 0x0000000001000000, 0x0000000002000000, 0x0000000014000000, 0x0000000028000000, 0x0000000040000000, 0x0000000080000000, 0x0000000500000000, 0x0000000a00000000, 0x0000001000000000, 0x0000002000000000, 0x0000014000000000, 0x0000028000000000, 0x0000040000000000, 0x0000080000000000, 0x0000500000000000, 0x0000a00000000000, 0x0001000000000000, 0x0002000000000000, 0x0014000000000000, 0x0028000000000000, 0x0040000000000000, 0x0080000000000000, 0x0500000000000000, 0x0a00000000000000, 0x1000000000000000, 0x2000000000000000, 0x4000000000010000 | |
}; | |
uint64_t FUN_00293c08(uint64_t param_1) // OK | |
{ | |
uint64_t uVar1; | |
int iVar2; | |
uint64_t uVar3; | |
uint64_t *puVar4; | |
puVar4 = dat_36d940; //0x36d940 | |
iVar2 = 0x20; | |
uVar3 = 0x20; | |
uVar1 = 0; | |
do { | |
iVar2 -= 1; | |
if (((param_1 >> uVar3) & 1) != 0) { | |
uVar1 |= *puVar4; | |
} | |
uVar3 += 1; | |
puVar4 += 1; | |
} while (iVar2 != 0); | |
return uVar1; | |
} | |
uint8_t dat_36dac0[512] = { | |
0x0D, 0x02, 0x08, 0x04, 0x06, 0x0F, 0x0B, 0x01, 0x0A, 0x09, 0x03, 0x0E, 0x05, 0x00, 0x0C, 0x07, 0x01, 0x0F, 0x0D, 0x08, 0x0A, 0x03, 0x07, 0x04, 0x0C, 0x05, 0x06, 0x0B, 0x00, 0x0E, 0x09, 0x02, 0x07, 0x0B, 0x04, 0x01, 0x09, 0x0C, 0x0E, 0x02, 0x00, 0x06, 0x0A, 0x0D, 0x0F, 0x03, 0x05, 0x08, 0x02, 0x01, 0x0E, 0x07, 0x04, 0x0A, 0x08, 0x0D, 0x0F, 0x0C, 0x09, 0x00, 0x03, 0x05, 0x06, 0x0B, 0x04, 0x0B, 0x02, 0x0E, 0x0F, 0x00, 0x08, 0x0D, 0x03, 0x0C, 0x09, 0x07, 0x05, 0x0A, 0x06, 0x01, 0x0D, 0x00, 0x0B, 0x07, 0x04, 0x09, 0x01, 0x0A, 0x0E, 0x03, 0x05, 0x0C, 0x02, 0x0F, 0x08, 0x06, 0x01, 0x04, 0x0B, 0x0D, 0x0C, 0x03, 0x07, 0x0E, 0x0A, 0x0F, 0x06, 0x08, 0x00, 0x05, 0x09, 0x02, 0x06, 0x0B, 0x0D, 0x08, 0x01, 0x04, 0x0A, 0x07, 0x09, 0x05, 0x00, 0x0F, 0x0E, 0x02, 0x03, 0x0C, 0x0C, 0x01, 0x0A, 0x0F, 0x09, 0x02, 0x06, 0x08, 0x00, 0x0D, 0x03, 0x04, 0x0E, 0x07, 0x05, 0x0B, 0x0A, 0x0F, 0x04, 0x02, 0x07, 0x0C, 0x09, 0x05, 0x06, 0x01, 0x0D, 0x0E, 0x00, 0x0B, 0x03, 0x08, 0x09, 0x0E, 0x0F, 0x05, 0x02, 0x08, 0x0C, 0x03, 0x07, 0x00, 0x04, 0x0A, 0x01, 0x0D, 0x0B, 0x06, 0x04, 0x03, 0x02, 0x0C, 0x09, 0x05, 0x0F, 0x0A, 0x0B, 0x0E, 0x01, 0x07, 0x06, 0x00, 0x08, 0x0D, 0x02, 0x0C, 0x04, 0x01, 0x07, 0x0A, 0x0B, 0x06, 0x08, 0x05, 0x03, 0x0F, 0x0D, 0x00, 0x0E, 0x09, 0x0E, 0x0B, 0x02, 0x0C, 0x04, 0x07, 0x0D, 0x01, 0x05, 0x00, 0x0F, 0x0A, 0x03, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01, 0x0B, 0x0A, 0x0D, 0x07, 0x08, 0x0F, 0x09, 0x0C, 0x05, 0x06, 0x03, 0x00, 0x0E, 0x0B, 0x08, 0x0C, 0x07, 0x01, 0x0E, 0x02, 0x0D, 0x06, 0x0F, 0x00, 0x09, 0x0A, 0x04, 0x05, 0x03, 0x07, 0x0D, 0x0E, 0x03, 0x00, 0x06, 0x09, 0x0A, 0x01, 0x02, 0x08, 0x05, 0x0B, 0x0C, 0x04, 0x0F, 0x0D, 0x08, 0x0B, 0x05, 0x06, 0x0F, 0x00, 0x03, 0x04, 0x07, 0x02, 0x0C, 0x01, 0x0A, 0x0E, 0x09, 0x0A, 0x06, 0x09, 0x00, 0x0C, 0x0B, 0x07, 0x0D, 0x0F, 0x01, 0x03, 0x0E, 0x05, 0x02, 0x08, 0x04, 0x03, 0x0F, 0x00, 0x06, 0x0A, 0x01, 0x0D, 0x08, 0x09, 0x04, 0x05, 0x0B, 0x0C, 0x07, 0x02, 0x0E, 0x0A, 0x00, 0x09, 0x0E, 0x06, 0x03, 0x0F, 0x05, 0x01, 0x0D, 0x0C, 0x07, 0x0B, 0x04, 0x02, 0x08, 0x0D, 0x07, 0x00, 0x09, 0x03, 0x04, 0x06, 0x0A, 0x02, 0x08, 0x05, 0x0E, 0x0C, 0x0B, 0x0F, 0x01, 0x0D, 0x06, 0x04, 0x09, 0x08, 0x0F, 0x03, 0x00, 0x0B, 0x01, 0x02, 0x0C, 0x05, 0x0A, 0x0E, 0x07, 0x01, 0x0A, 0x0D, 0x00, 0x06, 0x09, 0x08, 0x07, 0x04, 0x0F, 0x0E, 0x03, 0x0B, 0x05, 0x02, 0x0C, 0x0F, 0x01, 0x08, 0x0E, 0x06, 0x0B, 0x03, 0x04, 0x09, 0x07, 0x02, 0x0D, 0x0C, 0x00, 0x05, 0x0A, 0x03, 0x0D, 0x04, 0x07, 0x0F, 0x02, 0x08, 0x0E, 0x0C, 0x00, 0x01, 0x0A, 0x06, 0x09, 0x0B, 0x05, 0x00, 0x0E, 0x07, 0x0B, 0x0A, 0x04, 0x0D, 0x01, 0x05, 0x08, 0x0C, 0x06, 0x09, 0x03, 0x02, 0x0F, 0x0D, 0x08, 0x0A, 0x01, 0x03, 0x0F, 0x04, 0x02, 0x0B, 0x06, 0x07, 0x0C, 0x00, 0x05, 0x0E, 0x09, 0x0E, 0x04, 0x0D, 0x01, 0x02, 0x0F, 0x0B, 0x08, 0x03, 0x0A, 0x06, 0x0C, 0x05, 0x09, 0x00, 0x07, 0x00, 0x0F, 0x07, 0x04, 0x0E, 0x02, 0x0D, 0x01, 0x0A, 0x06, 0x0C, 0x0B, 0x09, 0x05, 0x03, 0x08, 0x04, 0x01, 0x0E, 0x08, 0x0D, 0x06, 0x02, 0x0B, 0x0F, 0x0C, 0x09, 0x07, 0x03, 0x0A, 0x05, 0x00, 0x0F, 0x0C, 0x08, 0x02, 0x04, 0x09, 0x01, 0x07, 0x05, 0x0B, 0x03, 0x0E, 0x0A, 0x00, 0x06, 0x0D | |
}; | |
uint64_t FUN_00293ca8(uint64_t param_1) //OK | |
{ | |
uint32_t uVar1; | |
uint64_t uVar2; | |
int iVar3; | |
uint64_t uVar4; | |
uint8_t *iVar5; // pointer | |
uint8_t *pbVar6; | |
uint64_t uVar7; | |
iVar3 = 8; | |
uVar4 = 0x20; | |
iVar5 = dat_36dac0; //0x36dac0 | |
uVar2 = 0; | |
do { | |
uVar1 = (uint32_t)param_1; | |
iVar3 -= 1; | |
pbVar6 = (uint8_t *)(((uVar1 & 0x20) | ((uVar1 >> 1) & 0xf) | (uVar1 & 1) << 4) + iVar5); | |
iVar5 = iVar5 + 0x40; | |
param_1 = param_1 >> 6; | |
uVar7 = (uint64_t)*pbVar6 << uVar4; | |
uVar4 = (uint64_t)((int)uVar4 + 4); | |
uVar2 = uVar2 | uVar7; | |
} while (iVar3 != 0); | |
return uVar2; | |
} | |
uint32_t dat_36da40[0x20] = { | |
0x00000800, 0x00020000, 0x00000020, 0x08000000, 0x02000000, 0x00000400, 0x00100000, 0x00000001, 0x00002000, 0x00200000, 0x00000008, 0x10000000, 0x20000000, 0x00000080, 0x00040000, 0x01000000, 0x80000000, 0x00400000, 0x00001000, 0x00000040, 0x04000000, 0x00000004, 0x00010000, 0x00000100, 0x00004000, 0x40000000, 0x00000010, 0x00080000, 0x00000002, 0x00000200, 0x00008000, 0x00800000 | |
}; | |
uint64_t FUN_00293c5c(uint64_t param_1) //OK | |
{ | |
uint64_t uVar1; | |
int iVar2; | |
uint64_t uVar3; | |
uint32_t *piVar4; | |
uint64_t uVar5; | |
uint64_t uVar6; | |
piVar4 = dat_36da40; // 0x36da40 | |
iVar2 = 0x20; | |
uVar3 = 0x20; | |
uVar1 = 0; | |
do { | |
uVar5 = param_1 >> uVar3; | |
iVar2 -= 1; | |
uVar3 = (uint64_t)((int)uVar3 + 1); | |
uVar6 = 0; | |
if ((uVar5 & 1) != 0) { | |
uVar6 = (uint64_t)*piVar4; | |
} | |
piVar4 = piVar4 + 1; | |
uVar1 = uVar1 | uVar6; | |
} while (iVar2 != 0); | |
return uVar1 << 0x20; | |
} | |
uint8_t dat_36dcc0[0x38] = { | |
0x07, 0x0F, 0x17, 0x1F, 0x27, 0x2F, 0x37, 0x3F, 0x06, 0x0E, 0x16, 0x1E, 0x26, 0x2E, 0x36, 0x3E, 0x05, 0x0D, 0x15, 0x1D, 0x25, 0x2D, 0x35, 0x3D, 0x04, 0x0C, 0x14, 0x1C, 0x01, 0x09, 0x11, 0x19, 0x21, 0x29, 0x31, 0x39, 0x02, 0x0A, 0x12, 0x1A, 0x22, 0x2A, 0x32, 0x3A, 0x03, 0x0B, 0x13, 0x1B, 0x23, 0x2B, 0x33, 0x3B, 0x24, 0x2C, 0x34, 0x3C | |
}; | |
uint8_t dat_36dd00[0x30] = { | |
0x32, 0x2F, 0x35, 0x28, 0x3F, 0x3B, 0x3D, 0x24, 0x31, 0x3A, 0x2B, 0x36, 0x29, 0x2D, 0x34, 0x3C, 0x26, 0x38, 0x30, 0x39, 0x25, 0x2C, 0x33, 0x3E, 0x17, 0x0C, 0x21, 0x1B, 0x11, 0x09, 0x22, 0x18, 0x0D, 0x13, 0x1F, 0x10, 0x14, 0x0F, 0x19, 0x08, 0x1E, 0x0B, 0x12, 0x16, 0x0E, 0x1C, 0x23, 0x20 | |
}; | |
uint64_t kek[0x10]; | |
void FUN_00293d08(uint64_t *param_1,uint64_t param_2) | |
{ | |
uint64_t uVar1; | |
uint64_t uVar2; | |
uint32_t uVar3; | |
int iVar4; | |
uint8_t *pbVar5; | |
uint64_t uVar6; | |
uint64_t uVar7; | |
uint32_t uVar8; | |
uint32_t uVar9; | |
uint32_t uVar11; | |
uint32_t uVar12; | |
iVar4 = 0x38; | |
pbVar5 = dat_36dcc0; //0x36dcc0 | |
uVar6 = 1ll << (32 + 0x1f);//0x8000000000000000; | |
uVar1 = 0; // v0? | |
do { | |
if ((param_2 & (1ll << (*pbVar5))) != 0) { | |
uVar1 |= uVar6; | |
} | |
iVar4 -= 1; | |
pbVar5 += 1; | |
uVar6 >>= 1; | |
} while (iVar4 != 0); | |
// v0=0xCA9F390B5DA70B00 | |
uVar6 = uVar1 >> 0x24ll; | |
uVar1 = uVar1 >> 8ll & 0xfffffff; | |
uVar3 = 0x10; | |
do { | |
uVar11 = (uint32_t)uVar6; | |
uVar12 = (uint32_t)uVar1; | |
if (((uVar3 < 0xf) && (uVar3 != 8)) && (uVar8 = uVar11 >> 0x1all, uVar3 != 1)) { | |
uVar9 = uVar12 >> 0x1all; | |
iVar4 = uVar11 << 2ll; | |
uVar12 = uVar12 << 2ll; | |
} | |
else { | |
uVar8 = uVar11 >> 0x1bll; //.., 1 | |
uVar9 = uVar12 >> 0x1bll; //.., 0 | |
iVar4 = uVar11 << 1ll; //.., 0x12A7CE42 | |
uVar12 = uVar12 << 1ll; //.., 0x0D769C2E | |
} | |
uVar6 = ((uint64_t)iVar4 & 0xfffffffll) | (uint64_t)uVar8; | |
uVar1 = (uint64_t)(uVar12 | uVar9) & 0xfffffffll; | |
iVar4 = 0x30; | |
pbVar5 = dat_36dd00; // 0x36dd00 | |
uVar7 = 1ll << (32 + 0x1f); // 0x8000000000000000 | |
uVar2 = 0ll; // v0? | |
do { | |
if ((((uVar6 << (32 + 0x4)) | uVar1 << (0x8)) & (1ll << *pbVar5)) != 0) { | |
uVar2 |= uVar7; | |
} | |
iVar4 -= 1; | |
pbVar5 += 1; | |
uVar7 >>= 1; | |
} while (iVar4 != 0); | |
// v0 = 0xA9CF467F63340000 | |
uVar3 -= 1; | |
*param_1 = uVar2; | |
param_1 += 1; | |
} while (uVar3 != 0); | |
return; | |
} | |
int main(int argc, char **argv) | |
{ | |
if (argc != 3) | |
{ | |
return 0x10; | |
} | |
FILE *f = fopen(argv[1], "rb"); | |
if (!f) | |
{ | |
return 0x11; | |
} | |
uint64_t buf[64]; | |
size_t count = fread(buf, 1, sizeof(buf), f); | |
if (count != sizeof(buf)) | |
{ | |
return 0x12; | |
} | |
FUN_00293d08(kek, ((0xD774444561237516 ^ 0x2cbadb31cccb12f6) - 5) - 0x87F95C7F3EBCDB15); | |
for (int i = 0; i < 64; i += 1) | |
{ | |
int uVar13 = 0xf; | |
uint64_t * puVar12 = kek + uVar13; | |
uint64_t uVar5 = FUN_00293a60(buf[i]); | |
// v1=0xffffffffffffffff | |
uint64_t uVar6 = uVar5 << 0x20ll; | |
//uVar5 = uVar5 & 0xffff00000000ll; | |
uVar5 = uVar5 & 0xffffffffffffffff; | |
uint64_t uVar7 = 0; | |
uint64_t uVar11 = 0; | |
do { | |
uVar11 = uVar6; | |
uVar6 = /* 0xCAD40D6FE8530000 */ FUN_00293c08(uVar11 /* 0x492f63409686df09,0x52D8A34500000000 */); | |
uVar13 -= 1; | |
uint64_t uVar9 = *puVar12; | |
puVar12 -= 1; | |
uVar7 = FUN_00293ca8((uVar6 ^ uVar9) >> 0x10ll /* 0x56723AD2F9B4,0x68A696CA5519 */); | |
uVar6 = FUN_00293c5c(uVar7 /* 0xC162CADA00000000,0x9B45929000000000 */); | |
uVar6 = uVar6 ^ uVar5; | |
uVar5 = uVar11; | |
} while (-1 < uVar13); | |
uVar7 = /* 0x5445534552 */ FUN_00293b28(uVar6 | uVar11 >> 0x20ll /* 0xF8A85870000000A0 */); | |
buf[i] = uVar7; | |
} | |
FILE *wf = fopen(argv[2], "wb"); | |
if (!wf) | |
{ | |
return 0x21; | |
} | |
size_t wcount = fwrite(buf, 1, sizeof(buf), wf); | |
if (wcount != sizeof(buf)) | |
{ | |
return 0x22; | |
} | |
// Write the rest of the data | |
uint8_t bbuf[0xffff]; | |
while (1) | |
{ | |
size_t rrcount = fread(bbuf, 1, sizeof(bbuf), f); | |
if (rrcount == 0) | |
{ | |
break; | |
} | |
size_t wwcount = fwrite(bbuf, 1, rrcount, wf); | |
if (wwcount != rrcount) | |
{ | |
return 0x31; | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment