题目下载链接:下载链接
无壳,直接拖入IDA,然后F5看伪代码。
通过分析,v6即为输入的flag,然后经过sub_401570()函数加密,最后与 a5mc58bphliax7j
比较,双击 a5mc58bphliax7j
观察为 5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==,通过if语句我们 知道,Buf1等于5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==,即成功,所以我们观察sub_401570()函数,
可发现,为base64加密。点击 aQvejafhmuyjbac,为
base64的字符表被偷偷变为了qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD
而不是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
所以要用到maketrains函数
思路为通过 5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==对base64解密就可以
flag为 NSSCTF{a8d4347722800e72e34e1aba3fe914ae}
maketrains()函数:
Python maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
注:两个字符串的长度必须相同,为一一对应的关系。
translate() 函数:
Python translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。
也就是通过maketrains()函数创建的表来进行解密