本帖最后由 JoyBoy521 于 2024-10-30 00:10 编辑
网鼎杯
赛题名称:REVERSE02
从前,有一个秘密组织,他们的最高机密被存放在一段字符串中。为了保护这段字符串,组织设计了“四大护法”,每一位护法都掌握着一种魔法。只有通过“四大护法”的重重考验,才能解开这段字符串的秘密。你会如何通过这“四大护法”的考验,解开这段字符串的秘密?
提交的flag格式:wdflag{xxxxx}
赛题附件:
6e3ab24752b064f43020d1c383094c8f.zip
(4.08 KB, 下载次数: 28)
https://wwgn.lanzoul.com/iTbgj2dp4vmd
https://files.wangdingcup.com/wdb/6e3ab24752b064f43020d1c383094c8f.zip?AWSAccessKeyId=UIM73OJQTM1F6ZN5OHFK&Expires=1730192399&Signature=FrGjiuL09RHPEWIt2pB095Om9U0%3D
前半部分,很容易看明白。写代码可以解出来flag一 二部分。
#include <iostream>
int main() {
char flag[32];
int a[] = {96, 98, 110, 96, 196, 102, 114, 198};
// a[i]/2就是flag的第一个部分
for (int i = 0; i < 8; i++) {
flag[i] = a[i] / 2;
}
int b[] = {109, 10, 22, 64, 120, 12, 68, 87}; // 整数数组
const char* v22 = "XorrLord"; // 字符串
//异或得到flag第二个部分
for (int j = 8; j < 16; ++j) {
flag[j] = b[j - 8] ^ v22[j - 8];
}
for (int i = 0; i < 16; i++) { // 输出 flag 的前 16 个字符
std::cout << flag[i];
}
std::cout << std::endl;
return 0;
}
第三部分的base64也可以解出来。
码表换一下就可以了。
最后的aes
下好断点。
随便输入32位进去,通过比较。
修改RIP地址跳过中间,那一段。
v8看逻辑像是vi,我们绕过来就是为了看v8和密钥到底是什么。在外面看v8不是很舒服,双击进去。
发现是8个0,8个8
)
密钥就是AesMasterAesMast
咱也去cyberchef解,mode咱们不知道,就一个一个换。
到ECB的时候就好了。
把四个拼接到一起就是flag。
wdflag{0170b39c5ed24c63ec3b52a6724ba7d5}
远程linux动调的时候,会出现缺libssl.so.10的报错。
找不到libssl.so.10的终极解决方案 - Ubuntu 18 - HENCH@T
我是看这篇文章补上的。
|