之前看的题对本小白来说有点难度,最近决定从最基本题目入手找感觉~
题目地址 BUUCTF-reverse3
首先查看exeinfo PE,无壳,32位,拖入IDA查看反编译代码:
分析如下:
查看Str2
的值
先通过最后两步得到v4
的值,每个字符减去j个偏移量即可,得到值为e2lfbDB2ZV95b3V9
(脚本一起放到最后)
重点是第三步如何对Str
操作得到v4
的,查看函数sub_4110BE
,发现返回值为另一个函数,继续查看sub_411AB0
这里我就有点发懵,但是感觉有点像一种变换,是通过那个aAbcdefghijklmn
字符串得到的v12返回值,查看字符串内容
一般结尾为运算符的比较像base64加密,尝试一下,通过python的base46库解码,具体函数讲解可以查看此博客 python中base64库用法详解
最后通过对v4
的值解码得到输入字符串应为{i_l0ve_you}
,脚本如下:
import base64
a = "e3nifIH9b_C@n@dH"
d = ""
for i in range(len(a)):
d += chr(ord(a[i])-i)
print(base64.b64decode(d))
运算得到结果
最终flag为flag{i_l0ve_you}
总结一下,这题的核心就是判断base64加密,主要是尝试和观察,一是在变换函数中有一个if判断,两个循环,可以猜测为base64,二是通过字符串的特征
收获了判断base64的基本方法,base64库的使用~