ISCC2024个人挑战赛WP-CrypticConundrum

(非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) 

CrypticConundrum

使用 UPX 脱壳

主要逻辑如上,输入的明文经过 mix Encryption 两个函数进行变换,然后与预期flag的密文进行比较

mix 函数的主要功能是对输入参数a1a2进行变换操作,最终将结果存储在字符串a1中,并返回a1字符串指针

Encryption 函数中,会先调用 NewEncryption 函数对输入字符串进行加密处理,然后执行剩余的加密部分

通过动调拿到密文和Key后根据加密函数编写脚本解密即可

Encryption实际上只使用到了v7的前四位作为加密参数,而密文是从v7[4]开始

0x53 开始提取即可

#include <stdio.h> #include <stdlib.h>

void decryption(char *enc, char *key, int a3) { char v3; // [rsp+2Bh] [rbp-15h]

int n; // [rsp+2Ch] [rbp-14h] int m; // [rsp+30h] [rbp-10h] int k; // [rsp+34h] [rbp-Ch] int j; // [rsp+38h] [rbp-8h] int i; // [rsp+3Ch] [rbp-4h] for (n = 0; n < a3; ++n)

enc[n] -= 10;

for (m = 0; m <= a3 - 2; ++m) enc[m] += enc[m + 1];

for (k = 0; k < a3 - 1; ++k)

enc[k] ^= key[2];

for (j = 0; j < a3; j += 2) enc[j] ^= key[j % 4];

for (j = 0; j < a3 / 2; ++j) { v3 = enc[j];

enc[j] = enc[a3 - j - 1];

enc[a3 - j - 1] = v3;

}

for (i = 0; i < a3 / 2; ++i) { v3 = enc[i];

enc[i] = enc[a3 - i - 1];

enc[a3 - i - 1] = v3;

}

for (i = 0; i < a3; ++i) enc[i] += key[i % 4];

}

int main() {

char key[] = "ISCC";

unsigned char enc[] = {0x53, 0xCB, 0x8C, 0x88, 0xCF, 0x7D,

0xEB, 0x40, 0x39, 0xF4, 0xCE, 0x2A, 0x3F, 0xC3, 0x95,

0x8D,

0xD6, 0x77, 0xE7, 0x0E, 0x49, 0xE0, 0x85, 0x8E, 0xF4,

0x34

};

decryption((char *)enc, key, 26); puts((char *)enc);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pluto-2003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值