Skip to content

Instantly share code, notes, and snippets.

@itachi-cracker
Created December 30, 2023 18:08
Show Gist options
  • Save itachi-cracker/0f0b1b3d35bf28b0e3751cf658d33c2b to your computer and use it in GitHub Desktop.
Save itachi-cracker/0f0b1b3d35bf28b0e3751cf658d33c2b to your computer and use it in GitHub Desktop.
Easy Risky solution - ASIS CTF 2023
#include <stdint.h>
#include <stdio.h>
void encryptData(uint8_t *flag_enc) {
uint8_t bVar1;
int64_t lVar2;
uint64_t *puVar3;
uint64_t uVar4;
uint8_t *pbVar5;
uint64_t uVar6;
uint64_t uVar7;
if (flag_enc[0x2a] != 0) {
return;
}
uVar6 = -(long)flag_enc;
uVar7 = uVar6 & 7;
if (uVar7 == 0) {
uVar4 = (uint64_t)flag_enc[0x2b];
lVar2 = 0x2a;
pbVar5 = flag_enc;
}
else {
bVar1 = flag_enc[0x2b];
uVar4 = (uint64_t)bVar1;
*flag_enc = *flag_enc ^ bVar1;
if ((uVar6 & 6) == 0) {
lVar2 = 0x29;
pbVar5 = flag_enc + 1;
}
else {
lVar2 = 0x28;
flag_enc[1] = flag_enc[1] ^ bVar1;
pbVar5 = flag_enc + 2;
if (2 < uVar7) {
lVar2 = 0x27;
flag_enc[2] = flag_enc[2] ^ bVar1;
pbVar5 = flag_enc + 3;
if ((uVar6 & 4) != 0) {
flag_enc[3] = flag_enc[3] ^ bVar1;
if (uVar7 < 5) {
lVar2 = 0x26;
pbVar5 = flag_enc + 4;
}
else {
flag_enc[4] = flag_enc[4] ^ bVar1;
if (uVar7 == 5) {
lVar2 = 0x25;
pbVar5 = flag_enc + 5;
}
else {
flag_enc[5] = flag_enc[5] ^ bVar1;
lVar2 = 0x24;
pbVar5 = flag_enc + 6;
if (((uint64_t)(flag_enc + -1) & 7) == 0) {
lVar2 = 0x23;
flag_enc[6] = flag_enc[6] ^ bVar1;
pbVar5 = flag_enc + 7;
}
}
}
}
}
}
}
puVar3 = (uint64_t *)(flag_enc + uVar7);
uVar6 = uVar4 << 8 | uVar4 | uVar4 << 0x10 | uVar4 << 0x18 | uVar4 << 0x20 | uVar4 << 0x28 |
uVar4 << 0x30 | uVar4 << 0x38;
puVar3[3] = uVar6 ^ puVar3[3];
*puVar3 = uVar6 ^ *puVar3;
puVar3[1] = uVar6 ^ puVar3[1];
puVar3[2] = uVar6 ^ puVar3[2];
if (0x2a - uVar7 >> 3 == 5) {
pbVar5 = pbVar5 + 0x28;
puVar3[4] = uVar6 ^ puVar3[4];
lVar2 = lVar2 + -0x28;
if (0x2a - uVar7 == 0x28) goto LAB_00100c04;
}
else {
pbVar5 = pbVar5 + 0x20;
lVar2 = lVar2 + -0x20;
}
*pbVar5 = *pbVar5 ^ flag_enc[0x2b];
if ((((lVar2 != 1) && (pbVar5[1] = pbVar5[1] ^ flag_enc[0x2b], lVar2 != 2)) &&
(pbVar5[2] = pbVar5[2] ^ flag_enc[0x2b], lVar2 != 3)) &&
(((pbVar5[3] = pbVar5[3] ^ flag_enc[0x2b], lVar2 != 4 &&
(pbVar5[4] = pbVar5[4] ^ flag_enc[0x2b], lVar2 != 5)) &&
(pbVar5[5] = pbVar5[5] ^ flag_enc[0x2b], lVar2 != 6)))) {
pbVar5[6] = pbVar5[6] ^ flag_enc[0x2b];
}
LAB_00100c04:
flag_enc[0x2a] = 1;
return;
}
void main() {
char enc_flag[] = { 0x6b,0x79,0x63,0x79,0x51,0x1d,0x58,0x73,0x75,0x5e,0x65,0x75,0x58,0x7f,0x44,0x75,0x67,0x19,0x75,0x45,0x64,0x75,0x78,0x63,0x79,0x69,0x07,0x7c,0x1c,0x1e,0x75,0x47,0x1e,0x49,0x62,0x0b,0x44,0x6f,0x0b,0x0b,0x57,0x2a,0x00,0x2a};
encryptData(enc_flag);
puts(enc_flag);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment