ereere WP
ereere WP
先【shift】 + F12 、【ctrl】 + F 查找敏感词”flag“:
直接定位第一个输入flag里:
可以看到这个字符串出现在 sub_400BC8这个函数里,找过去【F5】反编译:
看第15行的字符串特征,易猜出flag 与 base64 有很大关系,那就先Findcrtpt插件看看能不能识别出特征:
但可惜,没有任何识别到,说明可能是自定义的base64表,只能一步一步看了。
先看sub_41A6E0:
没看出什么特征,看不懂先跳过
接着看sub_4009DC:
)
步近sub_400864:
很容易看出这个函数做的操作就是RC4算法的过程(初始化256的S盒、通过密钥打乱S盒)
流密钥 key :flag{123321321123badbeef012}
所以在外层的sub_4009DC函数做的就是RC4加密的过程。
然后看sub_400550:
这里的特征更好辨认,这就是一个自定义表的base64编码
自定义的表为:ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543210
最后看这里:
很容易就能猜到这是一个比较函数。
总结:
所以这题就是用用户输入的str
先做key = flag{123321321123badbeef012}
的RC4加密,再做自定义表为ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543210
的base64编码,最后和ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ==
进行比较。
要想得到 flag
也只需要对ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ==
先进行自定义的base64解码,再进行key = flag{123321321123badbeef012}
的RC4解密即可。
import base64
from Crypto.Cipher import ARC4
cipher = "ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ=="
base_table = "ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543210"
# 标准Base64字符表
standard_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
key = b"flag{123321321123badbeef012}"
#tcipher = cipher.decode('utf-8')
print(ARC4.new(key).decrypt(base64.b64decode(cipher.translate(str.maketrans(base_table,standard_table)))))