https://buuoj.cn/challenges#[2019%E7%BA%A2%E5%B8%BD%E6%9D%AF]easyRE
exeinfo: NOT Win EXE - .o - ELF [ 64bit obj. Exe file
字符串定位到主要函数
if ( sub_424BA0(v15) == 36 )
这行猜测是检测字符串长度是 36,对长度重新分配(Y)
打开汇编,发现字符串分配是一起的,IDA 把它分开了(有两个 7F 干扰识别了)
也改成 36 就好了
变成这样:
总之先写个脚本看看是什么东西
Info:The first four chars are `flag`
好吧,很有意义的提示,继续往下看
接下来对输入进行 base64加密 检验
从两个地方可以看出是 →base64加密
解密得网址 https://bbs.pediy.com/thread-254172.htm
得知被坑了……
https://www.cnblogs.com/Moomin/p/15440957.html
在 base64 下面有一些可疑的数字(思路来源 https://blog.csdn.net/qq_61051249/article/details/121884109 )找到该函数
看到关键部分也就是中间的那个 if 部分,if 判断内将 byte_6CC0A0 数组的第一位与 key 的第一位异或,将 byte_6CC0A0 数组的第四位(也就是 byte_6CC0A3)与 key 的第四位异或(因为 HIBYTE() 函数的作用是获取高字节也就是数组的最后一位),并将两者的异或后的结果与 “f” 与 “g” 作比较,所以可以推理出 v4 其实是一个长度为 4 的数组,也就是 key,它按照一定的规律与 byte_6CC0A0 数组中的每一位异或最后生成一串开头为 flag 的字符串
for 循环里面就是干的反复异或 v1 的事情,上面的分析是成立的
但是怎么获取 v1 呢
Info:The first four chars are `flag`
这样通过已知原码和密文,就刚刚好可以知道循环的 4 位 box
写个脚本逆回去吧
flag{Act1ve_Defen5e_Test}