用IDA打开,定位到主要的地方。

当我在搜索字符串的时候:

猜测到有base64换表的操作。

image-20231017202029235

看到主要过程:

image-20231017202141408

v1 = sub_41A6E0((char *)v3);

sub_41A6E0

image-20231017202255180

看不懂,不知道它是干什么的。

sub_4009DC

image-20231017202603999

这个很明显是一个rc4。

sub_400864()

这个函数是去得到rc4的key

flag{123321321123badbeef012}

image-20231017202708636

v2 = (unsigned __int8 *)sub_400550(v3, (int)v1);

虽然这个函数看不懂,但是可以猜到是一个base64换表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import base64
import string

str1 = "ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ===" # 需要换表的字符串

string1 = "ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543210" # IDA中看到的表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # IDA中看到的表
c = str.maketrans(string1, string2)

translated_str = str1.translate(c)
decoded_bytes = base64.b64decode(translated_str)

# 将解码后的字节转换成16进制字符串
hex_str = ' '.join([f'{byte:02X}' for byte in decoded_bytes])

print(hex_str)
#1D C5 80 5F E7 0C 58 06 B1 9E 1D 3D 78 3F 85 76 A6 97 89 0F E2 8C 84 55 C6 5B C4 56 02 BB F2 BA 71 A3 16 C1 78 A6 21 A7 04 96 29

然后rc4解码

image-20231017201917456

得到flag

:flag{RC_f0ur_And_Base_s1xty_f0ur_Encrypt_!}