天翼杯

Posted by marginal on 2021-09-25
Estimated Reading Time 1 Minutes
Words 308 In Total
Viewed Times

revvverse

先判断flag格式, 然后取中间

2字节2字节的取, 类似于atoi的转化.比如aabb 转化为0xaa 0xbb

1
sub_47C0D0(dest, v65, (__int64)v65);

异或加密, 调试可以发现异或的数据是(不会因为输入发生变化)

1
0x7c, 0x55, 0x3b, 0xf4, 0xcb, 0x74, 0x38, 0xea, 0x2b, 0xeb, 0xa8, 0x67, 0x5d, 0x13, 0x9c, 0xbb.

接下来是对密钥和IV进行生成, 直接跑, 然后看内存就行了.

1
2
密钥0xC4, 0x92, 0xA1, 0x76, 0x2F, 0x26, 0x0E, 0x6F, 0x3B, 0xBF, 0xA4, 0xE9, 0xDB, 0x54, 0x25, 0x4E
IV B6 4C 8A 9D C5 EA F4 A6 FA F6 70 16 D7 E6 6D B9

密文

1
2
0x16, 0xF0, 0x3F, 0x5B, 0x38, 0xB9, 0x80, 0x90
0x1D, 0xA3, 0x58, 0xD8, 0xE6, 0xED, 0x97, 0xE3

观察字符串, 看起来很像是des加密, 多次尝试之后, 发现不是, 密钥长度也不对3des也不对, 用findcrypto插件可以找有AES. 试试了一下, 果然是.

AES解密后

1
0x5F,0x79,0x3D,0x30,0xA1,0xA9,0xDD,0x85,0xC1,0x20,0x05,0xE3,0xE6,0x1A,0xF3,0x7A

解密脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>

using namespace std;

int main()
{
unsigned a[] = {0x5F, 0x79, 0x3D, 0x30, 0xA1, 0xA9, 0xDD, 0x85, 0xC1, 0x20, 0x05, 0xE3, 0xE6, 0x1A, 0xF3, 0x7A};
unsigned b[] = {0x7c, 0x55, 0x3b, 0xf4, 0xcb, 0x74, 0x38, 0xea, 0x2b, 0xeb, 0xa8, 0x67, 0x5d, 0x13, 0x9c, 0xbb};
for (int i = 0; i < 16; i++)
{
a[i] ^= b[i];
printf("%02x", a[i]);
}
system("pause");
}

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !